问题标签 [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 - 为 Dask 分布式客户端准备数据的最佳方式
我有一个功能可以有效地生成图像并存储到磁盘中。该函数没有参数:
我需要生成大量图像(比如 100k),所以我选择了 Dask。阅读手册后,我整理了一个创建分布式(本地)客户端并使用多个进程执行任务的函数,如下所示:
如您所见,“期货”在 for 循环中提交给服务器并存储在一个简单的列表中。问题是:在这种情况下,是否有更有效的方式来添加和执行期货?例如,并行化提交过程本身?
c - OpenMP 对并行计算进行基准测试
我正在尝试对计算进行基准测试,f(x)
同时在每次迭代中改变线程数。
f(x) = c * ln(x) * cos(x)
n=10000000
结果:
开始了不同的线程:
并行:对于 n=10000000,p=2,所用时间=0.153774,加速=3.503831
并行:对于 n=10000000,p=3,耗时=0.064447,加速比=8.360370
并行:对于 n=10000000,p=4,耗时=0.044694,加速=12.055239
并行:对于 n=10000000,p=5,耗时=0.048700,加速=11.063550
并行:对于 n=10000000,p=6,所用时间=0.039009,加速比=13.811989
并行:对于 n=10000000,p=7,所用时间=0.041735,加速=12.910017
并行:对于 n=10000000,p=8,耗时=0.041268,加速=13.055919
并行:对于 n=10000000,p=9,所用时间=0.039032,加速=13.804157
并行:对于 n=10000000,p=10,耗时=0.038970,加速=13.825767
并行:对于 n=10000000,p=11,耗时=0.039843,加速=13.522884
并行:对于 n=10000000,p=12,耗时=0.041356,加速=13.028237
并行:对于 n=10000000,p=13,所用时间=0.041039,加速=13.128763
并行:对于 n=10000000,p=14,耗时=0.047433,加速=11.359218
并行:对于 n=10000000,p=15,耗时=0.048430,加速=11.125202
并行:对于 n=10000000,p=16,耗时=0.051950,加速=10.371477
注意:此处的加速比是根据顺序算法计算的(线程 = 1)
加速似乎并没有真正受到p
(线程数)变化的影响。
我这样做是否正确,或者原因来自线程数的非有效增量(即理论上讲更改p
不会严重影响O(myprogram)
)?
python - Chapel-Python 集成问题
我正在尝试查看是否可以使用 Chapel 编写用于基于 Python 的气候模型的并行代码: https ://github.com/CliMT/climt
我对 Chapel 没有任何经验,但它对我的用例来说似乎很有希望。关于如何将 Chapel 代码集成到我当前的工作流程中,我有几个问题:
我知道您可以构建可导入
.so
的文件,但是生成 Cython 文件时可以停止编译吗?然后我可以将它包含到发行版中并使用标准setuptools
在 Travis 上编译我的项目。我可以将
numpy
数组传递给用 Chapel 编写的 Python 扩展吗?如果对 2. 的回答是肯定的,并且我的计算在数组的一维上是并行的,那么在 Chapel 中是否有一种优雅的方式来表达这种并行性?
如果我编写适用于多个节点的 Chapel 代码并将其编译为 Python 扩展,我该如何运行它?我可以使用
mpirun python my_code.py
某种命令吗?
java - 为什么使用大于内核的 Executor 来加速并行编程?
我正在编写一个使用 Executorservice 框架处理矩阵并行编程的程序。而且我将fixedpoolsize设置为4,但令我惊讶的是,当矩阵维度设置为5000时,使用多线程对串行执行的加速大于4(这也是我的CPU内核)。而且我已经检查过我的 CPU 不支持超线程。
实际上,我使用 Callable 和 Future 容器,因为我的多线程任务需要返回结果。
简而言之,我只是将内部循环拿走,让它由线程运行,而外部循环保持不变。
但是加速怎么可能是这样的呢?
因为从我之前的概念来看,最大加速只能是 4。我已经检查过该任务实际上是由 4 个线程完成的。
python - 对于 skimage,joblib.Parallel() 比 single 慢
我必须为一堆图像的每个切片应用 2D 过滤器,并且我想并行化分析。但是,下面的代码运行速度比正常的 for 循环慢。此外,增加n_jobs
也会增加处理时间,n_jobs = 1
对于n_jobs = 6
.
python - 在 Windows 中运行 python 多处理时的高内存使用率
下面的代码是一个人为的示例,它模拟了我使用多处理来加速代码的实际问题。代码运行在Windows 10 64-bit OS
, python 3.7.5
, 和ipython 7.9.0
转换函数(这些函数将用于转换数组main()
)
多处理部分
出于性能原因,所有进程之间使用多个共享的“只读”字典以减少冗余计算(在实际问题中,在所有进程之间使用共享字典后,总计算时间减少了 40%)。但是,在我的实际问题中使用共享字典后,ram 的使用率变得高得多;我的 6C/12T Windows 计算机的内存使用量从(峰值 8.2GB,空闲 5.0GB)变为(峰值 23.9GB,空闲 5.0GB),为了获得 40% 的加速,付出的成本有点太高了。
当必须在进程之间使用多个共享数据时,高内存使用是否不可避免?可以对我的代码做些什么,以便在使用尽可能低的内存的同时使其尽可能快?
先感谢您
注意:我尝试使用imap_unordered()
而不是map
因为我听说当输入迭代很大时它应该减少内存使用量,但老实说我看不到内存使用量的改进。也许我在这里做错了什么?
编辑:由于答案中的反馈,我已经更改了代码的繁重计算部分,使其看起来不那么虚拟,并且类似于实际问题中的计算。
matlab - 如何找到 parfor 的最佳工人数量?
如何parfor
在亚马逊的虚拟机上找到最佳的工作人员数量?
对于哪些情况,我应该使用物理内核的数量和逻辑内核的数量?
这有什么“经验法则”吗?
我运行编译代码(可执行代码)。
parallel-processing - 如何使用阿姆达尔定律(整体加速与加速)
回想一下关于估计最佳可能加速的阿姆达尔定律。回答以下问题。
您有一个程序,其 40% 的代码在三个处理器上并行化,仅对于这部分代码,就实现了 2.3 的加速。什么是整体加速?
在这个问题中,我无法理解加速和整体加速之间的区别。我知道这个问题的措辞肯定有所不同。
performance - CyclicDist 在多个语言环境中变慢
CyclicDist
我尝试使用模块来实现矩阵乘法。
当我使用一种语言环境与两种语言环境进行测试时,一种语言环境要快得多。是因为两个 Jetson nano 板之间的通信时间真的很大,还是我的实现没有利用这种工作方式CyclicDist
?
这是我的代码:
我知道我的实现对于分布式内存系统来说并不是最优的。
parallel-processing - 计算并行化的最大加速
当向我们的硬件添加越来越多的处理能力时,阿姆达尔定律让我们计算程序的最大理论加速。这可以通过T = 1 / ((1-P) + (P/N))
where(1-P)
是顺序的程序部分来说明,并且(P/N)
是可以从加速中受益的部分。现在,阿姆达尔定律遗漏了开销因素。要将其计入其中,我们可以说
T = 1 / ((1-P) + 0(N) + (P/N))
哪里0(N)
表示随着计算节点数量的增加而增加的同步工作量。
现在我的问题是:如何计算程序的最大加速比0(N)
?假设我们有一个程序,其顺序部分为25%,并行部分为75%。