问题标签 [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 投票
0 回答
116 浏览

python - 在优化移动窗口熵计算方面需要帮助

我正在尝试从更大的 3D 数组中计算带有滑动窗口的 3D 补丁的熵。我似乎找不到优化代码以任何合理速度运行的方法。

我目前的工作方法使用嵌套的 for 循环,获取较大数组的每个坐标,并以该坐标为起点计算补丁的熵。

我真的很希望能够并行运行此操作,但似乎无法pool.apply()正常工作,是否可以并行运行?

这是我的工作代码:

这是并行尝试

运行这个我得到以下信息:

0 投票
2 回答
4521 浏览

numpy - 如何使用更多 CPU 来运行我的 python 脚本

我想使用更多的处理器来运行我的代码,以尽量减少运行时间。虽然我尝试过这样做,但未能得到预期的结果。我的代码非常大,这就是为什么我在这里给出一个非常小而简单的代码(尽管它不需要并行工作来运行此代码)只是为了知道如何在 python 中进行并行工作。任何意见/建议将不胜感激。

0 投票
1 回答
359 浏览

python - 在 GPU 上运行并行递归 python 程序,同时仍保持全局变量的功能

我的问题基本上归结为“我如何让这段线程 Python 代码在我的 GPU 而不是我的 CPU 上运行?”

我正在开发一个类似于旅行推销员问题的程序,在该程序中我递归地检查每个可能的移动(当然还有优化)。棘手的是全局变量的保留——python 的本机线程在这方面做得很好,而我使用的算法完全依赖于全局变量——我知道,这很糟糕。冒着进入太多细节的风险,我的许多线程将不得不产生它们自己的单独线程,直到某个“深度”(我发现大约 3 个效果最好),此时每个线程将不再被并行化,并且函数将被线性执行。

一开始它工作得很好,然后我通过线程化了一些性能改进。然而,它仍然不够好——如果我可以维护全局变量,那么理论上这个程序可以完全并行化,因此我认为它可以在 GPU 上快速运行。

目前代码很乱,但这是用伪代码表达的一般思想:

所以我的问题很简单——我可以(轻松地)从线程 python 程序转换为在我的 GPU 上运行的线程 python 程序,同时仍然保持全局变量的使用?我知道 Numba/NumbaPro 的存在,但它们是非常令人生畏的软件包,我不确定像我这样的程序将如何转化为该框架。

0 投票
2 回答
92 浏览

parallel-processing - 是否存在调度单个工作项时不发散的保证?

众所周知,当存在条件分支时,在 GPU 上运行的工作项可能会出现分歧。Apple 的OpenCL Programming Guide for Mac中提到了其中之一。

因此,算法的某些部分可能运行“单线程”,只有一个工作项在运行。当它特别是串行和长时间运行时,一些应用程序会将这些工作带回 CPU。

但是,这个问题仅涉及 GPU,并假设这些部分是短暂的。当这些“单线程”部分具有条件分支时,它们是否也会发散(如在执行真假代码路径时)?或者计算单元(或处理元素,无论你喜欢哪个术语)会跳过那些错误的分支?

更新

在回复评论时,我会删除 OpenCL 标记并将 Vulkan 标记留在那里。

我包括了 OpenCL,因为我想知道clEnqueueTaskclEnqueueNDRangeKernelwith之间是否有任何区别dim=1:x=1。该文件说它们是等效的,但我对此表示怀疑。

我相信 Vulkan 删除了将单线程任务入队的特殊功能是有充分理由的,如果我错了,请纠正我。

0 投票
0 回答
78 浏览

filter - Parallel version for DSP kernels

I developed auto-parallelizer for compiler-generated serial code ( see www.dalsoft.com ) and looking for the ways to apply this technology ( any suggestions? ). One possibility is to create parallel code for DSP filters. As an example I took Normalized Lattice filter ( latnrm ):

Is there parallel version for this filter?

Is there need for parallel version for this filter?

After analyzing the code I realized that it is a 2-point stencil, thus parallelization may be attempted. It will help to better understand the usage of this kind of filters.

  1. What are the usual values for NPOINTS and ORDER?

  2. The code depends on the input InpData, InternalState and Coefficients. May it be assumed that routine will be called for different data in InpData and InternalState but the same Coefficients?

  3. What are the other DSP kernels that need to be parallelized?

Thank you,

David Livshin

www.dalsoft.com

0 投票
1 回答
337 浏览

python - 并行化生成组合的过程

问题

我需要从长度的主列表中创建项目组合列表n。由于主列表中的项目数量很少,这可以在没有并行化的情况下完成并且很快就会发生。但是,当我尝试使用该multiprocessing库来并行化列表的生成时,似乎需要更长的时间。这是一个例子:

假装我有一个名为的项目列表(我将使用冰淇淋口味)item_list

我想生成所有口味的组合,以及 size 的组合n_items,所以我写了一个函数来做到这一点:

如果我称它为 size n_items = 2,它会快速生成元组列表。

我知道当项目数量增加时,可能组合的数量会增加为 2 n,我想并行化这个过程以更快地生成组合(基本上让每个核心工作在不同的 值上n_items)。我有 4 个内核可用。

为了尝试并行化它,我使用了这个示例multiprocessing指导的库,如下所示:

这个过程并没有那么快发生,事实上,我无法判断这个过程是否有效。当我复制我所遵循的示例代码并运行它时,我得到了相同的结果。

问题

我有两个问题:

1)这是并行化此功能的正确方法吗?还是有更好/更有效/更快的方法?

2)是否有更好/更快/更有效的方法来产生所有这些组合?

我可以根据需要提供更多信息。在此先感谢您的帮助。

0 投票
1 回答
413 浏览

python - 在 Python 中并行化数组赋值

我一直在尝试在 main 调用整个函数时并行化整个函数,或者在没有运气的情况下在下面看到的函数的任何部分,似乎我无法摆脱TypeError: function object is not iterable. 感谢任何建议。

0 投票
1 回答
3445 浏览

python - 为什么 joblib.Parallel() 比非并行计算花费更多时间?Parallel() 不应该比非并行计算运行得更快吗?

模块提供了一个joblib简单的帮助类来使用多处理编写并行 for 循环。

此代码使用列表推导来完成这项工作:

大约需要 0.51 秒

此代码使用joblib.Parallel()构造函数:

大约需要 31 秒

这是为什么?不应该Parallel()比非并行计算更快吗?

以下是部分内容cpuinfo

0 投票
2 回答
125 浏览

algorithm - 具有优先图和不同执行时间的 M 机器上的 N 个作业

假设我有 n 个工作和 m 台机器。这些作业具有优先约束(在有向无环图中给出)和不同的执行时间。时间表不能是抢先的。安排它们的最佳算法是什么?有什么建议么?我知道这通常是 NP 难的,所以启发式也可以。我会考虑这里给出的 Hu Level Scheduling http://web.cecs.pdx.edu/~mperkows/temp/0002.scheduling2.pdf 但如果我理解正确,它假定执行时间相同。

0 投票
3 回答
3477 浏览

python - 为什么 Dask 执行得这么慢,而多处理执行得这么快?

为了更好地理解并行,我比较了一组不同的代码。

这是基本的(code_piece_1)。

for 循环

此代码以串行方式(for 循环)运行时间消费者并得到此结果

多处理

多处理风格可以被视为实现并行计算的一种方式吗?

我假设是的,因为文档是这样说的。

这是code_piece_2

此代码以多处理方式运行同一时间消费者并得到此结果

显然,在这种特殊情况下,多处理比串行更快。

达斯克

Dask是一个灵活的 Python 并行计算库。

此代码(code_piece_3)与 Dask 运行同一时间消费者(我不确定我是否以正确的方式使用 Dask。)

我有

我的 cpu 有 6 个物理核心

问题

为什么 Dask 执行得这么慢,而多处理执行得这么快?

我是否以错误的方式使用 Dask?如果是,正确的方法是什么?

注:请与本案例或其他具体具体案例讨论。请不要泛泛而谈。