问题标签 [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.

0 投票
3 回答
231 浏览

perl - 如何根据行的第一个单词替换同一文件中的多个模式?

我在一个文件(“ phrases”)中有一个短语列表,每个文件都在自己的行中。

我还有另一个文件,其中包含一个单词列表,每个单词占一行(“ words”)。

我希望在“”中的每个短语的末尾附加一个星号phrases,它以“”中列出的单词开头words

例如:

文件“ phrases”:

文件“ words”:

操作后“”中的预期结果phrases

到目前为止我所做的是:

但这会截断文件,有时(并非总是)给我这个错误:

无法删除短语:没有这样的文件或目录,跳过文件。

因为编辑将同时进行,所以我的意图是只搜索和替换那些以单词开头的行,而其他行保持不变。否则parallel并发执行会互相覆盖。

我也对其他并发方法持开放态度。

0 投票
2 回答
2423 浏览

python-2.7 - 为什么 python 多处理比串行代码花费更多时间?如何加快这个速度?

我正在尝试 Python 多处理模块。在下面的代码中串行执行时间为 0.09 秒,并行执行时间为 0.2 秒。由于我没有得到加速,我想我可能会在某个地方出错

我的系统有四个核心。请让我知道我可以加速此代码的方法。另外,我有哪些使用 python 进行并行编程的选项(除了多处理模块)。

谢谢并恭祝安康

0 投票
1 回答
251 浏览

parallel-processing - RegCM、MPICH、计算机集群

背景: 我需要使用大量800 [GB]数据(过去 50 年和未来 80 年)进行大量的气候模拟计算。

为此,我使用基于 linux 的 RegCM4。我正在使用 Ubuntu。我们拥有的最强大的系统有一些具有 20 个内核的 Intel XEON 处理器。此外,我们还有近 20 个更小、功能更弱的 Intel i7 八核处理器。

要运行模拟,单个系统需要一个多月的时间。

所以,我一直在尝试建立具有可用资源的计算机集群。
(仅供参考:RegCM 允许并行处理mpi。)

眼镜::

-> 我使用mpichv3(我不记得确切的版本号。)

以此类推...(除 之外的所有节点node0都与 相同node1。)
所有节点都1 Gbps支持以太网卡。
出于测试目的,我建立了一个小型模拟工作来分析 6 天的气候。所有测试模拟都使用相同的参数和模型设置。

所有节点都从它们自己的 HDD 引导。
node0在 Ubuntu 16.04 LTS 上运行。
其他节点运行 Ubuntu 14.04 LTS。

我是怎么开始的? 我按照这里的步骤进行操作。

  1. 连接node1node2使用 Cat 6 电缆,为它们分配静态 IP。(暂时离开node0) -/etc/hosts使用 IP-s 和相应的名称进行编辑 -node1如上node2表所示
  2. 在两者中都使用 ssh 设置无密码登录 - 成功
  3. /home/user在 in中创建了一个文件夹node1(将在此测试中为主)并导出文件夹(/etc/exports),将此文件夹安装NFS到并在node2其中编辑- 成功/etc/fstabnode2
  4. 使用两台机器的 14 个核心运行我regcm的集群 - 成功
  5. 我使用 : iotop, bmon,htop分别监控磁盘读/写、网络流量和 CPU 使用率。

$ mpirun -np 14 -hosts node0,node1 ./bin/regcmMPI test.in

此测试的结果
单节点处理上的更快计算


现在我尝试了同样的node0 方法(参见上面的计算机规格)

-> 我正在开发node0.
-> 工作正常,但问题是在集群中连接时的时间因素。

以下是结果摘要:: - 首次使用node0- 不使用集群

$ mpirun -np 20 ./bin/regcmMPI test.in

这没关系

现在,使用集群
(使用以下参考来理解下表)

rt= regcm 以秒为单位报告的 CPU 运行时间

a-rt=以秒为单位的实际时间(大约)

LAN=以 MBps 为单位达到的最大 LAN 速度(接收/发送)

disk(0 / 1)=最大磁盘写入速度 at node0/ at node1 MBps

*笔记:

1,0(例如 16 核)意味着:$ mpirun -np 16 -hosts node1,node0 ./bin/regcmMPI test.in

0,1(例如 16 核)意味着:$ mpirun -np 16 -hosts node0,node1 ./bin/regcmMPI test.in

实际运行时间是使用 regcm 报告的开始和结束时间手动计算的。

我们可以在上面看到 LAN 使用和驱动器写入速度对于两个选项有显着差异 - 1.node1,node0作为主机传递;node0,node12.作为主机传递----注意顺序。

此外,在单节点中运行的时间比在集群中运行的时间要快。为什么 ?

我还进行了另一组测试,这次使用的是 hostfile(名为 hostlist),其内容是:

现在我运行了以下脚本

$ mpirun -np 22 -f hostlist ./bin/regcmMPI test.in

报告 CPU 运行时间101 [s],实际运行时间为1 min 42 sec( 102 [s]),达到的 LAN 速度约为10-15 [MB/s],磁盘写入速度约为7 [MB/s]

当我使用相同的主机文件设置并使用 20 个处理器运行代码时获得了最好的结果,因此订阅不足

$ mpirun -np 20 -f hostlist ./bin/regcmMPI test.in

当我将核心从 20 个更改为 18 个时,运行时间增加到102 [s].

我还没有连接node2到系统。


问题:

  1. 有没有办法实现更快的计算速度?难道我做错了什么 ?
  2. 单机 14 核的计算时间比 22 核或 20 核的集群要快。为什么会这样?
  3. 可用于实现时间效率的最佳内核数量是多少?
  4. 如何利用可用资源实现最佳性能?
  5. 有没有最好的 mpich 使用手册可以回答我的问题?(我找不到任何此类信息)
  6. 有时使用更少的内核比使用更高的内核提供更快的完成时间,即使我没有使用所有可用的内核,在单个节点中为操作系统和其他操作留下 1 或 2 个内核。为什么会这样?
0 投票
1 回答
96 浏览

python-2.7 - 用于并行化的 python 的 Pool() 是否会阻止写入全局变量?

在 python 2.7 中,我试图将二维数组的计算分布在所有内核上。
为此,我有两个与全局范围内的变量关联的数组,一个用于读取,一个用于写入。

假设数组有一些额外的初始化,除了arr示例性 -s 之外还有一些不同的值1,因此计算(温度的迭代计算)实际上是有意义的。

当我使用注释掉的for循环而不是Pool.map()方法时,一切正常,并且数组实际上包含值。使用该Pool()函数时,变量new_array仅保持其初始化状态(这意味着它仅包含零,因为它最初是用 初始化的)。

Q1:这是否意味着Pool()阻止写入全局变量?

Q2:有没有其他方法可以通过并行化来解决这个问题?

0 投票
1 回答
1764 浏览

python - 为什么 multiprocessing.Pool.map_async 中的 get() 操作需要这么长时间?

因此,我试图在 Python 中使用实例.map_async()上的方法并行化一些代码。multiprocessing.Pool()

我注意到虽然
Line1大约需要千分之一秒,但
Line2大约需要 0.3 秒。

有没有更好的方法来做到这一点或绕过由 引起的瓶颈Line2
或者
我在这里做错了什么?

(我对此很陌生。)

0 投票
1 回答
152 浏览

haskell - How non-trivial should a computation be to make it reasonable to get it sparked for a parallel execution in Haskell?

According to the doumentation for Control.Parallel, one should make sure that the computation being sparked is non-trivial so that creating the spark is cheaper than the computation itself.

This makes sense, but after listening to Bartosz Milewski talk about how cheap sparks are, I'm wondering how experienced Haskell programmers determine whether or not a computation is worthy of parallelism.

0 投票
2 回答
126 浏览

multithreading - 如果在“内部”虚拟机运行,我们会在 Chapel 中看到预期的加速吗?

下学期我将在 Chapel 教书,我们正在考虑使用 VM 代替物理机器让学生进行编程。作为课堂的一部分,我希望学生能够在使用多个线程时看到加速。我担心他们将无法看到这一点,因为 VM 将使用隐式超线程进行操作;一个线程的运行速度与多个线程一样快。

有人对这个有经验么?我有机会使用虚拟机而不是物理设备吗?

0 投票
2 回答
229 浏览

distributed - 提高 bigint 写入磁盘性能

我正在处理非常大的bigint数字,我需要将它们写入磁盘并稍后再读取它们,因为它们一次无法全部放入内存中。

当前的 Chapel 实现首先将 a 转换bigint为 a string,然后将其写入string磁盘 [1]。对于大整数来说,这需要很长时间。

有没有办法使用 GMP 的mpz_out_raw()/ mpz_inp_raw()[2] 或mpz_export()/ mpz_import()[3] 或其他类似的方式将bigint' 的字节直接转储到磁盘而不事先转换为字符串,然后将字节读回bigint对象?

这也适用于bigint数组吗?

如果在当前状态下不可能,如何将这样的功能添加到 Chapel 的标准库中?

[1] https://github.com/chapel-lang/chapel/blob/master/modules/standard/BigInteger.chpl#L346

[2] https://gmplib.org/manual/I_002fO-of-Integers.html

[3] https://gmplib.org/manual/Integer-Import-and-Export.html

0 投票
0 回答
867 浏览

c++ - cv::parallel_for_ 没有很大的改进

我正在测试cv::ParallelLoopBody图像处理代码的类。

我首先开始实现归一化,在这里我必须为每个通道划分具有特定值的所有像素,这是一个简单而漂亮的并行化代码。

但是,在测试它时,我没有看到任何区别。

我在这里做错了吗?

这是我的课:

main()函数中,我像这样调用我的操作员:

编辑

这是我的 OpenCV 配置:

我用来测试并行性的代码示例:

我正在 linux ubuntu Core i7-2630QM 2Ghz * 8 线程(4 核)上编译我的代码:

EDIT2htop我看到它最后使用了所有线程

0 投票
1 回答
593 浏览

c# - 读/写文件的最大并行度是多少?

假设我有 100 个文本文件

我想尽快阅读它们。我是一名软件开发人员,在硬件方面没有很好的背景。所以我想知道“最大并行度”是否是我的 CPU 数量?如果我有 4 个 CPU,那么我应该尝试并行读取 4 个文件,还是它们会以 ~1/4 的速度读取并且对性能没有帮助?

如果我需要发出 100 个 Web 请求并得到他们的响应,该怎么办?有多少硬件端口事物可以等待响应?

如何预测要使用的并行度?