标签: parallel-processing

我可以异步运行Seq.iter的动作功能吗?

所以,标题描述了一切.

Seq.iter (fun item -> (*do something*)) sequence
Run Code Online (Sandbox Code Playgroud)

我可以将所有这些lambda函数作为并行运行吗?当这个函数做了一些大工作时,它会很有用.

.net parallel-processing f# asynchronous

3
推荐指数
1
解决办法
376
查看次数

如何在p个处理器上分配n个元素的向量

假设我有一个n个元素的向量,我想在p进程上分发它,其中n不是p的倍数.每个进程的等级从0到p-1.如何确定每个流程上将有多少元素,以便更均匀地分配数据?

例如,如果n = 14且p = 4,我想要像[3,3,4,4]或[3,4,3,4]这样的分布,但不是[3,3,3,5]也不是[3,3,4,5] 4,4,4,2].

我想要一个函数f(n,p,r),它返回具有秩r的进程的元素数.

algorithm parallel-processing mpi

3
推荐指数
1
解决办法
760
查看次数

TaskFactory.Tasks中BlockingCollection.GetConsumingEnumerable()集合的Parallel.ForEach和foreach循环

我已经尝试了这两个循环,并注意到即使Task的Action委托中的常规foreach循环应该并行执行,它也不会并行处理元素.但是,如果我用Parallel.ForEach替换它,我看到数据正在跨多个线程并行处理.

代码1:

Task loadingTask1 = Factory.StartNew(() =>
        {
            foreach (MyOneClass dg in Queue.GetConsumingEnumerable())
            {

                MyOtherClass vl = new MyOtherClass();
                vl.Id = dg.Id;
                vl.PerformTimeConsumingAction();

                OutputQueue.Add(vl);
            }
        });
Run Code Online (Sandbox Code Playgroud)

代码2:

Task loadingTask2 = Factory.StartNew(() =>
        {
            Parallel.ForEach(Queue.GetConsumingEnumerable(), (dg) =>
            {

                MyOtherClass vl = new MyOtherClass();
                vl.Id = dg.Id;
                vl.PerformTimeConsumingAction();

                OutputQueue.Add(vl);
            });
        });
Run Code Online (Sandbox Code Playgroud)

在每次迭代时使用Console.Write语句运行的代码1似乎等待上一个循环完成,直到它抓住下一个循环,但代码2确实并行处理多个元素.

我是否正确理解Task.Action中的常规foreach?我认为.NET将启动尽可能多的任务线程作为加载保证,并且每个迭代的foreach将被并行处理.

我也尝试将PLINQ结果传递给上述代码和观察者相同的行为:常规foreach似乎等待上一次迭代完成以启动下一个代码,即使我已经使用了.AsParallel()和.WithExecutionMode(ParallelExecutionMode.ForceParallelism)指令.

任何见解都将受到高度赞赏.我知道OrderingPartitioner类,可能会尝试使用它

c# parallel-processing multithreading task-parallel-library

3
推荐指数
1
解决办法
3001
查看次数

并行处理队列的好策略是什么?

我正在编写一个程序,需要递归搜索文件夹结构,并希望与多个线程并行执行.

我已经编写了相当简单的同步方法 - 最初将根目录添加到队列,然后将目录出列,对其子目录进行排队等,直到队列为空.我会用ConcurrentQueue<T>我的队列,但已经意识到我的循环会过早停止.第一个线程将使根目录出列,并且每个其他线程立即看到队列为空并退出,使第一个线程成为唯一运行的线程.我希望每个线程循环直到队列为空,然后等待另一个线程排队更多的目录,然后继续.我需要在循环中使用某种检查点,以便在每个线程都到达循环结束之前不会退出任何线程,但是我不确定最好的方法是在没有死锁的情况下执行此操作,而实际上没有更多的目录处理.

c# queue parallel-processing deadlock

3
推荐指数
1
解决办法
2759
查看次数

使用arrayfun在Matlab中更快地进行for循环?

目前我有以下部分代码:

for i = 2:N-1
  res(i) = k(i)/m(i)*x(i-1) -(c(i)+c(i+1))/m(i)*x(N+i) +e(i+1)/m(i)*x(i+1);
end
Run Code Online (Sandbox Code Playgroud)

其中变量k,m,c和e是大小为N的向量,x是大小为2*N的向量.使用像arrayfun这样的东西有没有办法更快地做到这一点!?我无法弄清楚这一点:(我特别想通过以后在GPU上运行来加快速度,因此,arrayfun也会有所帮助,因为matlab不支持并行化for循环而且我不想买夹克包...非常感谢!

arrays parallel-processing matlab

3
推荐指数
2
解决办法
4062
查看次数

bash gnu并行帮助

它关于 http://en.wikipedia.org/wiki/Parallel_(software)和非常丰富的联机帮助页http://www.gnu.org/software/parallel/man.html

(for x in `cat list` ; do 
       do_something $x
   done) | process_output
Run Code Online (Sandbox Code Playgroud)

被这取代

 cat list | parallel do_something | process_output
Run Code Online (Sandbox Code Playgroud)

我正试图在此实现这一点

    while [ "$n" -gt 0 ]
        do          
        percentage=${"scale=2;(100-(($n / $end) * 100))"|bc -l}}
    #get url from line specified by n from file done1              
nextUrls=`sed -n "${n}p" < done1`
    echo -ne "${percentage}%  $n / $end urls saved going to line 1. current: $nextUrls\r"
#    function that gets links from the url
    getlinks $nextUrls
#save n
    echo …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash loops replace gnu

3
推荐指数
1
解决办法
3896
查看次数

MPI_Sendrecv在3个进程上发生死锁

试图做一个"晕/鬼"行交换,我被一个死锁困住了(在图片下方的代码片段中).要交换的"光晕"行表示为深灰色线(在图中)和as hp[0]和hp[M-1](在代码中).

[无法发布图片; 没有足够的声誉.再次用文字表达:hp[0]并且hp[M-1]是"晕"行(即要交换的行),hp[1]而hp[M-2](和中间的所有行)都要用.计算.

为什么这个片段(适用于2个进程)可以解决3个进程的死锁问题?

// in-between processes ("P1" and "P2" in the picture; 
// one of "P1" and "P2" is of course missing in the case of 3 processes)
if (p > 0 && p < P-1) 
{ 
    MPI_Sendrecv(hp[M-2], N, MPI_DOUBLE, p+1, 0, 
                 hp[0],   N, MPI_DOUBLE, p-1, 0, MPI_COMM_WORLD, &s);  
    MPI_Sendrecv(hp[1],   N, MPI_DOUBLE, p-1, 1, 
                 hp[M-1], N, MPI_DOUBLE, p+1, 1, MPI_COMM_WORLD, &s);  
}
// root process ("P0" in …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing mpi

3
推荐指数
1
解决办法
1674
查看次数

MapReduce还是批处理作业?

我有一个需要在很多文件(1000's)上调用的函数.每个都独立于另一个,可以并行运行.每个文件的函数输出不需要与其他文件组合(当前).我有很多服务器可以扩展,但我不知道该怎么做:

1)在其上运行MapReduce

2)创建1000个作业(每个作业都有不同的文件).

一种解决方案会优于另一种吗?

谢谢!

parallel-processing jobs scalability mapreduce batch-file

3
推荐指数
1
解决办法
602
查看次数

C#并行编程与列表 - 读取线程安全吗?

我正在读一本关于并行编程的书,它说它不是线程保存,不使用锁而将元素添加到列表中,因为结果将是不可预测的.例如,如果我们必须将800,000个元素添加到列表中,则最终结果将少于800 000个元素.

现在我想知道是否是线程保存从列表中读取元素.例如,假设我有一个列表BlackListedNumbers

List<int> BlackListedNumbers = new List<int> {10, 50 ....... n}; 
//lets say there is 500 000 elements in the list
Run Code Online (Sandbox Code Playgroud)

和另一个Numbers包含10 000 000个数字的列表,显然我将使用parallel.Foreach来完成这个任务,我想要的是Final包含所有数字Numbers的BlackListedNumbers列表不在列表中

List<int> finalList = new List<int>();
Parallel.ForEach(Numbrs, 
  num =>
    {
      if (!blackListedNumbrs.Contains(num))
      {
        lock (finalList)
        {
          finalList.Add(num);
        }
      }
  });
Run Code Online (Sandbox Code Playgroud)

我知道这不是完成这项工作的最有效方法,但我只是想说明问题.

所以我的问题是:是否保存线程以从List中读取结果blackListedNumbrs并获得100%准确的结果?

c# parallel-processing list

3
推荐指数
1
解决办法
4518
查看次数

多线程java

我正试图弄清楚如何在java中进行多线程.现在,我的程序运行良好,没有并发,但我想实现多线程,以帮助加快它.

该程序运行单独子类的多个对象,并且每个对象的50%的时间评估花费在仅使用一个核而不是8个可用核的过程中.这些对象完全相互独立,但在程序中用作输入.

我试图通过让子类实现Runnable来多线程,然后让我的程序为每个这样的对象使用一个线程.这是正确的方法吗?

但是,java中的线程如何处理?每次运行后我是否需要处理线程?加入如何工作?

谢谢

java parallel-processing multithreading

3
推荐指数
2
解决办法
746
查看次数