问题标签 [parallelism-amdahl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 大型对象列表上的多处理 Pool.map() 缩放不良:如何在 python 中实现更好的并行缩放?
让我们定义:
请注意,func()
它做了一些事情,它总是返回一个小数字1
。
然后,我比较了一个 8 核并行Pool.map()
v/sa 串行,python 内置,map()
这给出了:
这显示了相当好的并行缩放。因为我用的是 8 个核心,38.3 [ms]
大约是 1/8200[s]
然后让我们尝试Pool.map()
一些更大的列表,为简单起见,我以这种方式使用列表列表:
这使 :
你看,并行缩放已经消失了!1s ~ 1.76s
我们可以让它变得更糟,尝试让每个子列表通过更大:
这给出了:
哇,更大的子列表,时间结果完全相反。我们使用 8 个核心来获得慢 20 倍的时序!!
您还可以注意到 serialmap()
的时间与子列表大小无关。因此,一个合理的解释是,Pool.map()
真正将那些大子列表的内容传递给导致额外副本的进程?
我不知道。但如果是这样,为什么它不传递子列表的地址?毕竟,子列表已经在内存中,并且在实践中func()
我使用的保证不会更改/修改子列表。
那么,在 python 中,在将某些操作映射到大型事物列表时保持并行缩放的正确方法是什么?
performance - 为什么在 OpenMP 线程中运行的任务实际上比在串行中运行的时间更长?
我编写了这段代码来估计积分的值。
一个简单直接for()
的并行循环,使用openmp
.
无论我做什么,我都无法将并行运行时间减少到少于串行运行时间。
问题是什么?
lenmuta, tol, cores, seed
分别是1
, 0.01
, number_of_threads
。0
这是代码:
linux - 并行计算:如何在用户之间共享计算资源?
我正在使用以下规格的 Linux 机器上运行模拟。
这是我的求解器的运行命令行脚本。
我与我的另一位同事共享该系统。他的解决方案使用了 10 个内核。在这种情况下,对我来说最快的选择是什么?使用 30 个 MPI 进程?
我是一名机械工程师,对并行计算知之甚少。所以如果这个问题太愚蠢,请原谅。
python - 在 Python 中预测差分进化的并行性能
我是一名工程专业的学生,在遗传算法方面实习。最近,我一直在对差异进化进行大量研究。在我实习期间,我们决定直接使用scipy.optimize.differential_evolution()来测试差分进化。
在文档中,提到并行是可能的,但我们不确定它是否真的会产生很大的不同。这就是为什么我们决定寻找是否有一种方法可以预测性能的改进。我发现使用阿姆达尔定律可以实现这样的事情。我的问题是,为了使用阿姆达尔定律,我必须知道“程序的一部分可以并行化”。有没有人可以帮我找到这部分?或者可能以另一种方式预测改进?
先感谢您!
python - 当 n_jobs > 1 时,Joblib 不调用自定义函数
我有一个数据示例。
从代码中可以看出,函数的每次调用fit_by_idx()
都必须 print 'here'
,但事实并非如此。当 时一切正常n_jobs=1
,但如果n_jobs
大于joblib
,则不调用该函数。
代码:
这是数据集的链接。
performance - 我是否应该更改我原来的 Python/Tensorflow 代码以使其在 HPC 上运行得更快?
如果这个问题太基本,请原谅。我既不熟悉并行化的概念,也没有使用过 HPC 系统。
我正在训练一个深度学习模型,这在我的 PC 上需要很长时间。使用 12 GB RAM 的 i5 大约需要 2 天。
所以我决定使用 HPC,但在我看过的一个教程中,它说如果我没有正确编写代码,HPC 不会比普通 PC 快。它的真正含义是什么?我是否应该调整我的原始代码以使 HPC 受益?
其次,我们是否可以说使用 30 核应该比使用 6 核快 5 倍?速度和核心数量成比例吗?
python - 将 for 循环转换为并行计算
我做了一个数值模拟。我有 50,000 个粒子在一个盒子中结晶,其中有几个晶体(具有周期性边界条件)。我试着在盒子里找到最大的水晶。该代码运行良好,但它需要100 [s]
在我的计算机上。速率确定步骤是find_neighbors()
下面的函数。
有没有办法使用并行计算来缩短计算时间?
我的电脑有12核。也许我们可以将数组(中心)分成 12 个部分?
我的函数的输出是一个二维列表。
这是find_neighbors()
没有并行计算编写的函数:
python - 如果我的 8 核 CPU 支持 16 个线程,对于池中的进程数,16 会比 8 更好吗?
我在 python 3.7 中使用多处理
一些文章说,池中要使用的进程数的一个好数字是 CPU 内核的数量。
我的 AMD Ryzen CPU 有 8 个内核,可以运行 16 个线程。
那么,进程数应该是 8 还是 16?
python - 并行化 Python 循环
我在 , 等之间有点迷路joblib
了multiprocessing
。
根据您的经验,并行化 for 循环的最有效方法是什么?
例如 :
它获取 i 块图像,然后通过 haralick 提取特征
这就是我获取补丁的方式
对不起,如果任何信息是多余的
parallel-processing - Chapel 中分散子阵列的高效收集和传输
最近,我遇到了教堂。我喜欢教程中给出的示例,但其中许多在我眼中是令人尴尬的平行。我正在研究多体量子物理学中的散射问题,一个常见问题可以简化为以下问题。
A
一个形状的张量用不同参数M x N x N
的矩阵方程的解来填充M
1..M
- 需要张量的一个子集
A
来计算每个参数的校正项1..M
。
问题的第一部分令人尴尬地平行。
因此,我的问题是,是否以及如何仅将所需的张量子集传输A
到集群的每个区域并最小化必要的通信?