标签: 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
查看次数

在x86上撕毁的单词

在什么情况下,让两个不同的线程同时写入x86上相同阵列的相邻元素是不安全的?据我所知,在一些类似DS9K的体系结构中使用疯狂的内存模型会导致单词撕裂,但在x86单字节上是可寻址的.例如,在D编程语言real中,x86上是80位浮点类型.做以下事情是否安全:

real[] nums = new real[4];  // Assume new returns a 16-byte aligned block.
foreach(i; 0..4) {
    // Create a new thread and have it do stuff and 
    // write results to index i of nums.
}
Run Code Online (Sandbox Code Playgroud)

注意:我知道,即使这是安全的,它有时也会导致缓存的错误共享问题,从而导致性能降低.但是,对于我想到的用例,写入的内容很少,实际上并不重要.

编辑:不要担心读回写入的值.假设在读取任何值之前存在同步.我只关心这种写作的安全性.

parallel-processing multithreading d thread-safety race-condition

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

CUDA - 实现设备哈希映射?

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

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

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

parallel-processing cuda hashmap

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

用于集群环境的伪随机数发生器

如何在集群上生成独立的伪随机数,例如蒙特卡罗模拟?我可以有很多计算节点(例如100),我需要在每个节点上生成数百万个数字.我需要保证一个节点上的PRN序列不会与另一个节点上的PRN序列重叠.

  • 我可以在根节点上生成所有PRN,然后将它们发送到其他节点.但这太慢了.
  • 我可以在每个节点上跳到序列中的已知距离.但对于Mersenne-Twister或任何其他优秀的PRNG,是否有这样的算法,可以在合理的时间和内存下完成?
  • 我可以在每个节点上使用不同的生成器.但是有没有像Mersenne-Twister这样的优秀发电机?怎么可能呢?
  • 还有其他吗?

random parallel-processing prng mersenne-twister

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

处理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
查看次数

为共享内存配置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
查看次数

如何在单机上运行Hadoop?

我可以在HDD上访问运行​​Linux的计算机,该计算机具有20个内核,92 GB RAM和100 GB存储空间.我想将Hadoop用于涉及大量数据的任务(超过1M字,超过1B字组合).伪分布式模式或完全分布式模式是在单台计算机上利用Hadoop功能的最佳方式吗?

对于我对Hadoop的预期用途,遇到数据丢失并因节点故障而不得不重新运行作业不是大问题.

涉及Linux容器的此项目使用完全分布式模式.本文介绍伪分布式模式; 更多细节可以在这里找到.

parallel-processing hadoop virtual-machine processing-efficiency linux-containers

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

如何有效地并行设置位向量的位?

考虑其中的位向量N(N大)和M数字数组(M中等,通常小得多N),每个都在范围内0..N-1指示必须将向量的哪个位设置为1.后一个数组未排序.位向量只是一个整数数组,具体而言__m256i,每个__m256i结构中包含256位.

如何在多个线程中有效地分割这项工作?

首选语言是C++(MSVC++ 2017工具集v141),汇编也很棒.首选CPU是x86_64(内在函数没问题).如果有任何益处,AVX2是理想的.

c++ algorithm parallel-processing x86 bit-manipulation

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