标签: parallel-processing

如何分析并行化的Python脚本?

假设我有一个调用的python脚本my_parallel_script.py涉及使用multiprocessing并行化几个东西,我使用以下命令运行它:

python -m cProfile my_parallel_script.py
Run Code Online (Sandbox Code Playgroud)

这仅为父进程生成分析输出.根本不记录在子进程中进行的呼叫.是否也可以分析子进程?

如果唯一的选择是修改源,那么最简单的方法是什么?

python parallel-processing profile multiprocessing

10
推荐指数
1
解决办法
2796
查看次数

Haskell中自动并行的当前状态

可能重复:
Haskell中多核编程的状态是什么?

特别是在GHC中的地位如何?它还很受欢迎,还是仍在试验?

编译器在决定何时以及如何并行化时有多细致/细粒度?运行时是否适当选择了线程池的大小,或者我们必须通过命令行指定?

parallel-processing optimization haskell multicore ghc

10
推荐指数
2
解决办法
2227
查看次数

多维嵌套OpenMP循环

在OpenMP中并行化多维尴尬并行循环的正确方法是什么?维度的数量在编译时是已知的,但是哪个维度是大的.他们中的任何一个可能是一,二或一百万.当然我不希望N omp parallel是一个N维循环......

思考:

  • 问题在概念上很简单.只有最外层的"大"循环需要并行化,但循环维度在编译时是未知的并且可能会发生变化.

  • 将动态设置omp_set_num_threads(1)#pragma omp for schedule(static, huge_number)使某些环路并行化无操作?这会产生不良的副作用/开销吗?感觉像一个kludge.

  • OpenMP规范(2.10,A.38,A.39)讲述整合及不符合要求的嵌套并行之间的差异,但没有提出解决这个问题的最好的办法.

  • 可以重新排序循环,但可能会导致大量缓存未命中.展开是可能的,但不是重要的.还有另外一种方法吗?

这是我要并行化的内容:

for(i0=0; i0<n[0]; i0++) {
  for(i1=0; i1<n[1]; i1++) {
    ...
       for(iN=0; iN<n[N]; iN++) {
         <embarrasingly parallel operations>
       }
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

c parallel-processing openmp nested-loops

10
推荐指数
1
解决办法
3690
查看次数

CUDA - 实现设备哈希映射?

有没有人有在CUDA设备上实现哈希映射的经验?具体来说,我想知道如何在设备上分配内存并将结果复制回主机,或者是否有任何有用的库可以促进此任务.

看起来我需要先了解哈希映射的最大大小才能分配设备内存.我以前的所有CUDA努力都使用了数组和memcpys,因此非常简单.

任何洞察这个问题的人都表示赞赏.谢谢.

parallel-processing cuda hashmap

10
推荐指数
1
解决办法
4827
查看次数

处理scala.collections.parallel中令人惊讶的ParList缺失

因此scala 2.9最近出现在Debian测试中,带来了新奇的并行集合.

假设我有一些相当于的代码

  def expensiveFunction(x:Int):Int = {...}

  def process(s:List[Int]):List[Int} = s.map(expensiveFunction)
Run Code Online (Sandbox Code Playgroud)

现在,在我的机器上实际显示文档之前,我已经收集到了关于并行集合的那些内容,我希望通过将List切换到ParList... 来并行化这个...但令我惊讶的是,没有一个!(只是ParVector,ParMap,ParSet...).

作为一个工作区,这个(或一行等效)似乎运作良好:

  def process(s:List[Int]):List[Int} = {
    val ps=scala.collection.parallel.immutable.ParVector()++s
    val pr=ps.map(expensiveFunction)
    List()++pr
  }
Run Code Online (Sandbox Code Playgroud)

在我的测试代码中实现了大约x3的性能提升,并实现了更高的CPU使用率(四核和超线程i7).但它似乎有点笨重.

我的问题是一种汇总的:

  • 为什么没有ParList
  • 鉴于没有ParList,我应该采用哪种更好的模式/习语,以至于我不觉得他们错过了?
  • 在我的scala程序中,我只是"在时代背后"使用了很多列表(就像我在2.7天内买过的所有Scala书籍一样)我应该更多地使用它 Vectors?(我指的是C++的土地,我通常会需要一个很好的理由使用 std::liststd::vector).

parallel-processing scala list map scala-collections

10
推荐指数
3
解决办法
772
查看次数

Perl,如何从url并行获取数据?

我需要从许多Web数据提供程序中获取一些数据,这些数据提供程序不公开任何服务,因此我必须编写类似这样的内容,例如使用WWW :: Mechanize:

use WWW::Mechanize;
@urls = ('http://www.first.data.provider.com', 'http://www.second.data.provider.com', 'http://www.third.data.provider.com');
%results = {};
foreach my $url (@urls) {
 $mech = WWW::Mechanize->new();
 $mech->get($url);
 $mech->form_number(1);
 $mech->set_fields('user' => 'myuser', pass => 'mypass');
 $resp = $mech->submit();
 $results{$url} = parse($resp->content());
}
consume(%results);
Run Code Online (Sandbox Code Playgroud)

是否有一些(可能是简单的:-)方式将数据同时提取到一个公共的%结果变量,即:并行地从所有提供者那里获取?

parallel-processing perl fetch

10
推荐指数
2
解决办法
6094
查看次数

MPI和D:链接器选项

我正在尝试使用D编程语言的MPI.D完全支持C ABI,可以链接并调用任何C代码.我已经完成了显而易见的事情并将MPI标题翻译为D.然后我将测试程序从维基百科翻译成D.我使用以下命令编译它:

dmd test.d -L-lmpistubs

它在我刚运行时起作用./test,并打印:

0: We have 1 processors

但是,当我跑步时mpiexec -n 8 test,它什么都不打印.我的理解是MPI可执行文件需要一堆奇怪的链接选项,这就是mpicc存在自动化过程的工具的原因.但是,如果我在D中尝试使用MPI,这对我没有帮助.我认为这是因为我没有使用正确的链接器选项.有人可以告诉我mpicc,我可以做什么以及如何让DMD做同样的事情?

编辑:我找到了答案mpicc -showme.这显示了mpicc转发的命令gcc.但是,我也意识到我做错了头文件翻译.下一个问题: 如何做对.

parallel-processing linker d mpi mpiexec

10
推荐指数
1
解决办法
818
查看次数

为共享内存配置MPI意味着什么?

我有一些研究相关的问题.

目前我已经完成了基于MPI(特别是使用openmpi 6.3)的结构骨架框架的实现.框架工作应该在单台机器上使用.现在,我将它与其他先前的骨架实现(例如scandium,fast-flow,..)进行比较

我注意到的一件事是我的实现的性能不如其他实现.我认为这是因为,我的实现基于MPI(因此需要匹配发送和接收操作的双向通信),而我正在比较的其他实现基于共享内存.(...但我仍然没有很好的解释来证明这一点,这是我的问题的一部分)

这两个类别的完成时间有很大差异.

今天我也介绍了配置open-mpi for shared memory => openmpi-sm

我的问题出现了.

1,为共享内存配置MPI意味着什么?我的意思是MPI进程存在于自己的虚拟内存中; 究竟是什么标志就像在下面的命令一样呢?(我认为在MPI中,每次通信都是通过显式传递消息,进程之间没有共享内存).

    shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
Run Code Online (Sandbox Code Playgroud)

第二,为什么MPI的性能与为共享内存开发的其他骨架实现相比要差得多?至少我也在一台多核机器上运行它.(我想这是因为其他实现使用了线程并行编程,但我没有令人信服的解释).

任何建议或进一步讨论都是非常受欢迎的.

如果我需要进一步澄清我的问题,请告诉我.

感谢您的时间!

parallel-processing message-passing mpi shared-memory openmpi

10
推荐指数
1
解决办法
1万
查看次数

为Scala 2.10中的所有集合设置并行度级别?

我理解如何通过可变tasksupport字段设置单个并行集合的并行度级别(参见/sf/answers/379774811/).

如何在Scala 2.10中为所有新并行集合设置并行度级别?

一个附属问题---是由tasksupport并行集合"继承"并由它构建的新并行集合相关联的吗?(例如,与take,map等)

parallel-processing scala scala-2.10

10
推荐指数
1
解决办法
2045
查看次数

子进程调用是否并行完成?

我一直在谷歌搜索这个问题的简单答案,但似乎没有一个.任何人都可以告诉我subprocess模块是否并行执行调用?Pythong.org文档建议它可以用来产生新的进程,但它没有提到它们是否并行.如果他们可以并行完成,你可以给我一个例子或链接我吗?

python parallel-processing

10
推荐指数
1
解决办法
7858
查看次数