标签: parallel-processing

如何在多台计算机上运行并行程序(用户指定的IP地址)?

我是并行编程的新手.我研究了很多关于使用MPI和Windows HPC服务器的SOA编程模型.但现在我比以前更加困惑.手头的任务是在多台计算机上运行程序(IP地址将由用户提供),该程序采用数百万字符串的输入文件并提取某些区域.我已完成编程(在C#和.net4 fw中)并已在一台计算机上成功测试过.但问题是我必须使其并行以加快速度.我只是想让某人向我展示一种不涉及使用MPI的方法.我希望我的问题很清楚.

谢谢.

c# parallel-processing

4
推荐指数
1
解决办法
2785
查看次数

Scala并行集合和可变状态

我有一个函数,通过更新映射执行一步计算(底层是一个可变的HashMap).我想并行执行其中几个计算(每个"链"在自己的可变HashMap上工作).

我通过将HashMaps放入并行集合并使用map将函数应用于每个HashMap来实现此目的.

现在我在地图中遇到了丢失的条目.在调试时,一旦异常断点停止程序,映射就会包含该条目(然后通过丢弃某些堆栈帧层来重新开始计算).

当我使用顺序集合时,此行为已消失.那么有可能存在一些不正常行为(或错误),这是由同一个HashMap在不同的线程中处理的吗?

我没有发布代码示例,因为我不认为该行为是可重现的.据我所知,唯一可变数据包含在那些保持计算状态的HashMaps中.

根据要求,我的代码示例创建(reset)和修改(step)的并行映射.

class ParallelInferer[V <: DiscreteVariable, TInf <: InferenceAlgorithm[V]](val numChains: Int,
                                              val inferer: InferenceAlgorithm[V],
                                              val random: Random) {
  //tuples of inferer state and the according random number generator
  protected var states: ParSeq[(inferer.Repr,Random)] = _
  protected var steps = 0

  reset()

  def reset() {
    steps = 0

    val seed = random.nextInt()

    //todo why does parallelizing fail here (key not found on a map)
    states = (1 to numChains).par
      .map(n => new Random(seed + …
Run Code Online (Sandbox Code Playgroud)

parallel-processing scala

4
推荐指数
1
解决办法
1692
查看次数

从GNU parallel获取退出状态值

下面的Perl包装器并行执行命令,将STDOUT和STDERR保存到/ tmp文件:

open(A,"|parallel"); 
for $i ("date", "ls", "pwd", "factor 17") { 
  print A "$i 1> '/tmp/$i.out' 2> '/tmp/$i.err'\n"; 
} 
close(A); 
Run Code Online (Sandbox Code Playgroud)

如何从各个命令获取退出状态值?

parallel-processing perl exit-code

4
推荐指数
2
解决办法
2526
查看次数

Visual Studio 2010,超线程处理器的最大并发C++编译

我正在尝试优化大型VC++项目的编译时间.我的处理器是Core i7 950(4核,8线程,因为它支持Intel超线程技术).

在Microsoft Visual Studio 2010中,如果转到"工具">"选项">"项目和解决方案">"VC++项目设置">"最大并发C++编译"

您可以选择用于并行C++编译的最大CPU内核.我在那里选择0(以便使用我的所有核心),这与使用4或8时产生完全相同的结果.

现在,如果我在编译项目时打开任务管理器,我可以看到4个并行编译线程正在运行(在进程下他们有描述:Microsoft C/C++编译器驱动程序),并且总CPU使用率略低于50%的所有时间.

所以我的问题是:

是否有可能在四核,超线程处理器中拥有8个并行编译线程?如果这是不可能的,那么在编译时是否有可能以某种方式使用接近100%的处理器功率?

这将为我节省大量时间.

非常感谢你提前,

尼古拉斯

c++ compiler-construction parallel-processing visual-studio-2010 hyperthreading

4
推荐指数
1
解决办法
3907
查看次数

并行.失败(C#)

我写了一些代码:

class Program
    {
        public const int count = 3000;
        static List<int> list = new List<int>();
        static void DoWork(int i)
        {            
            list.Add(i);
        }        
        static void Main(string[] args)
        {
            while (true)
            {

                Stopwatch s = new Stopwatch();
                s.Start();
                Parallel.For(0, count + 1, DoWork);            
                s.Stop();
                Console.WriteLine("\n Elapsed: " + s.Elapsed.ToString());
                Console.WriteLine("Expected: {0}", count + 1);
                Console.WriteLine("count: {0}", list.Count);
                Console.ReadKey();
                list = new List<int>(); 
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但结果不是预期的(

并非所有循环都在Console.WriteLine调用之前完成

使用Parallel.For有什么问题?

c# parallel-processing

4
推荐指数
1
解决办法
386
查看次数

并行应用程序具有随机行为

我正在使用pthreads编写一个C程序,在二维矩阵上进行波前模式计算.为了获得良好的性能,我以交错的方式向每个线程分配几行,如下所示:

线程0 ------------------

线程1 ------------------

线程2 ------------------

线程3 ------------------

线程0 ------------------

线程1 ------------------

线程2 ------------------

线程3 ------------------

等等

在这个计算中,我认为这是唯一可行的分割,因为每个线程需要在每一行上计算的新值,并且在它们可用之前不能进一步移动.现在,这里的问题是线程1需要在其行上由线程0计算的值,因此它必须在线程0后面跟踪而不是在它之前.为此,我将每一行分成块并用一个关键部分保护每个块.计算如下:

线程0 -----------

线程1 ------

线程2 ---

总是我必须排在第i - 1行后面.我希望你理解这个想法.我实现了这个想法,我正在一台双核四核系统的机器上进行测试.我遇到了奇怪的行为.结果是正确计算的,但运行时间在连续时间的8倍以内,最多超过连续时间.实际上,12000 x 12000矩阵的连续时间为16秒,并行运行时间为2到17秒之间,并且通常在两次连续运行时不同.

我最初的想法是这个问题非常敏感,所以当然,如果让线程0和线程1安排在不同的物理处理器上,我的性能可能会很差.在/ proc/cpuinfo中查看,我已经推断出核心被映射为0,2,4,6在处理器0上,而1,3,5,7在处理器1上.然后,在创建线程时,我有使用pthread_setaffinity_np设置右核上线程的亲和性.然而,没有任何改变.我也尝试过使用pthread_attr_setaffinity_np和sched_setaffinity,但我得到了相同的随机运行时间.

内核忽略了我的亲和力调用,或者这不是问题.我真的希望有人可以帮助我,因为我已经没有想法了.谢谢.

c parallel-processing multithreading pthreads

4
推荐指数
1
解决办法
316
查看次数

线程并行调用,操作

我的代码如下

public void DownloadConcurrent(Action<string> Methord)
{
    Action<string>[] methordList = new Action<string>[Concurent_Downloads];

    for (int i = 0; i < Concurent_Downloads; i++)
    {
        methordList[i] = Methord;
    }

    Parallel.Invoke(methordList);
}
Run Code Online (Sandbox Code Playgroud)

Parallel.Invoke给出了错误:

"cannot convert from 'System.Action<string>[]' to 'System.Action[]'"
Run Code Online (Sandbox Code Playgroud)

它调用的方法是

public void DownloadLinks(string Term)
{ 
}
Run Code Online (Sandbox Code Playgroud)

.net c# windows parallel-processing multithreading

4
推荐指数
1
解决办法
2529
查看次数

嵌套并行性能问题

我有问题.

在另一个Parallel.ForEach中使用Parallel.Invoke有什么好处吗?

这是我的代码:

    Parallel.ForEach(yearMonths,
                     () => new List<DJVSStatsCo>(),
                     (yearMonth, loopState, localDjvsStatsCo) =>
                         {
                             var coVintageCounter = 0;
                             var coExitsCounter = 0;
                             var coExtant = 0;

                             Parallel.Invoke(() =>
                                             coVintageCounter = globalData.ValuationEventsPit.
                                                                    Where(x => x.FirstRoundYearMonth <= yearMonth).
                                                                    Select(x => x.CompanyId).Distinct().Count(),
                                             () =>
                                             coExitsCounter = globalData.ValuationEventsPit.
                                                                  Where(x => x.ExitDate != null && x.ExitDateYearMonth == yearMonth).
                                                                  Select(x => x.CompanyId).Distinct().Count(),
                                             () =>
                                             coExtant = globalData.ValuationEventsPit.
                                                            Where(x => x.FirstRoundYearMonth <= yearMonth && (x.ExitDate == null || x.ExitDateYearMonth > yearMonth)).
                                                            Select(x => x.CompanyId).Distinct().Count()
                                 );

                             localDjvsStatsCo.Add(new DJVSStatsCo(yearMonth, coVintageCounter, …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing multithreading task-parallel-library

4
推荐指数
1
解决办法
903
查看次数

并行减少算法实现

我一直在研究使用块在Objective-C中使用reduce [inject,fold,无论你想要什么称呼]函数的实现,并且想知道是否存在任何并行化计算的技术,其中所应用的函数是关联的(例如,a的总和)整数集合)?

也就是说,可以在NSArray上并行化或改进这样的东西:

- (id)reduceWithBlock:(id (^)(id memo, id obj))block andAccumulator:(id)accumulator
{
  id acc = [[accumulator copy] autorelease];

  for (id obj in self) {
    acc = block(acc, obj);
  }
  return acc;
}
Run Code Online (Sandbox Code Playgroud)

使用大中央调度?

编辑:我已经进行了第二次尝试,将数组划分为更小的块并在单独的调度队列中减少它们,但在我的测试中没有明显的性能提升:( 这里的要点)

parallel-processing multithreading objective-c grand-central-dispatch objective-c-blocks

4
推荐指数
1
解决办法
2455
查看次数

Haskell嵌套向量并行策略

此相关问题类似,我想在Vector上执行并行映射,但在我的情况下,我有一个嵌套的 Vector,我似乎无法使评估正确.

这是我到目前为止:

import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
import Data.Vector.Strategies 
import Control.DeepSeq

main = do
  let res = genVVec 200 `using` parVector 2
  print res

genUVec :: Int -> U.Vector Int
genUVec n = U.map (ack 2) $ U.enumFromN n 75

genVVec :: Int -> V.Vector (U.Vector Int)
genVVec n = V.map genUVec $ V.enumFromN 0 n

ack :: Int -> Int -> Int
ack 0 n = n+1
ack m 0 …
Run Code Online (Sandbox Code Playgroud)

parallel-processing haskell nested vector

4
推荐指数
2
解决办法
480
查看次数