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

python - Python joblib - 在并行代码中运行并行代码

我正在做一个项目,我打算通过使用joblib带有共享内存的并行函数来提高效率。

但是,我还打算通过使用不同的参数(即没有共享内存)多次运行进程来对程序进行参数化研究。

我想知道这在 Python/ 中是否可行joblib


编辑:2020-06-19

正如另一位用户提到的,我应该澄清我想要并行化的代码中的内容。本质上,我有一个代表一些物理空间的 3D numpy 数组,我用大量截断的高斯函数填充该数组(仅影响有限数量的元素)。由于瓶颈是内存访问,没有发现完全矢量化可以特别加快代码速度,我想尝试并行化,因为我遍历所有ith- 高斯中心并将其贡献添加到整个领域。(这些循环将在一定程度上共享变量)

并行代码中并行代码的想法是,我还希望使用在线访问的集群同时运行大量此类进程,以便对项目的整体性能进行参数研究未指定的指标。因此,这些循环将是完全独立的。

此处发布了内部循环的修改摘录。不幸的是,它似乎并没有提高性能,而且在我没有将高斯中心列表拆分为每个核心的两个数组的情况下,情况更糟,我目前正在对此进行调查。


0 投票
1 回答
211 浏览

parallel-processing - 如何使用 OMP 任务和递归任务工作负载测量 OMP 时间?

下面我尝试绘制使用 OpenMP 任务并行化的代码。

在 main 函数中,启动了一个并行环境,然后立即将代码包装到一个#pragma omp master部分中。在计算了预期的工作负载之后,根据这个工作负载是否低于给定的阈值,必须完成的工作要么被传递给串行函数,要么被传递给递归分割工作负载并初始化单独任务的函数。然后在指令#pragma omp task之后汇总每个单曲的结果。#pragma omp taskwait

在这样的设置中,如何测量每个线程的实际计算时间?

如果我测量 CPU 时间并有k活动线程,那么我会得到k*wallTime,这是有道理的,因为线程由前导#pragma omp parallel指令初始化并始终保持活动状态。然而,这并没有给我任何关于线程实际工作花费多少时间的信息,这使得代码难以分析。

0 投票
1 回答
187 浏览

python - 如何在python中并行化类方法?

我有一个带有方法的类foo(),以及dictionary带有该类的一堆对象的类。

如何foo()在我的对象集合中并行执行 ?

pd:这可能是一个愚蠢的问题,在其他编程语言中非常简单,但是我在互联网上进行了谷歌搜索,并没有找到任何直接的解决方案。

0 投票
1 回答
481 浏览

parallel-processing - 阿姆达尔定律中的负加速?

0 投票
1 回答
30 浏览

cpu-architecture - 处理器加速计算差异

我试图理解为什么阿姆达尔定律不适用于这种情况?

假设我们有两个配置

配置 1 的 L1 访问延迟(hitDelay 和 missDelay 为 1 个周期) 配置 2 的 L1 访问延迟为 7 个周期。

假设加载和存储占处理器时间的 30%,我们预计加速为 1/(0.7 + 0.3/7) = 1.35

但是,当我在模拟基于 ROB 的处理器并使用周期计算加速比的实际模拟器上运行这两种配置时,加速比为 1.12。

为什么加速与使用阿姆达尔定律计算的不同。我认为由于某种原因,阿姆达尔定律不适用?

0 投票
1 回答
81 浏览

performance - 古斯塔夫森定律试图论证什么?

Gustafson 定律与 Amdahl 定律相反,该定律声称大多数并行处理应用程序实际上在增加对并行处理的访问时会增加工作量。因此,假定恒定工作负载来衡量加速比的阿姆达尔定律是确定并行处理收益的较差方法。

然而,我对古斯塔夫森到底想争论什么感到困惑。

例如,假设我采用古斯塔夫森定律并将其应用于顺序处理器和两个并行处理器:

我生成了一个在并行处理器 #1 上运行的工作负载。在并行处理器上执行需要 1 秒,在顺序处理器上执行需要 10 秒。

我生成了更大的工作负载并在并行处理器 #2 上运行它。在并行处理器上执行需要 1 秒,在顺序处理器上执行需要 50 秒。

对于每个工作负载,相对于顺序处理器都有一个加速。但是,这似乎并没有违反阿姆达尔定律,因为每个工作负载仍然存在一些加速上限。所有这一切都是在改变工作量,以便可能减少代码的“仅串行”部分。根据阿姆达尔定律,减少仅串行部分将增加加速限制。

所以我很困惑,提倡增加工作量并保持恒定执行时间的古斯塔夫森定律似乎并没有添加任何新信息。

古斯塔夫森到底在争论什么?具体来说,“规模化加速”甚至意味着什么?

0 投票
2 回答
90 浏览

c - 如何对给定的代码应用阿姆达尔定律?

我的作业中有以下问题。我知道我需要使用阿姆达尔定律,但我不知道公式中的哪一部分将成为哪一部分。

这是问题:

如果我们在 8 个线程上同时运行以下代码,它会加速多少?

任何帮助表示赞赏!

0 投票
3 回答
75 浏览

math - 试图理解阿姆达尔定律

我正在尝试回答一项学校作业,但我对这个问题试图问什么感到困惑。

将设计优化应用于计算机系统,以将给定执行模式的性能提高 10 倍。优化模式的使用率为 50%,以优化完成后执行时间的百分比来衡量应用。

(a)
通过这种优化实现的全局加速值是多少?
提醒:
阿姆达尔定律将全局加速比定义为应用优化前优化分数的函数。因此,不能直接使用 50% 的比率来评估这个加速值。

(b)
受此优化影响的原始执行时间的百分比是多少?

(c)
为了达到 5 的全局加速,这种执行模式应该优化多少?
可以实现 12 的全局加速吗?
还有11?

当试图计算答案 A) 我来到答案 1.81 (20/11)

T' = 0.5 * T + 0.5 * T / 10 = T / 2 + ( 1 / 20 ) T = ( 11 / 20 ) * T

加速 = T / T' = T / ( ( 11 / 20 ) * T = 20 / 11 = 1.81

对我来说,这个答案是有道理的,但在教授的解决方案中却另有说法:

(一) 5.5

(b) 91%

(c)
是的,它可以通过 25 / 3 的因子进行优化。
不,因为因子不能为负,所以这是不可能的。
也不是,因为 ∞ 优化 → 不可能

我无法解决其他问题,因为我对第一个感到困惑。

为什么 5.5 是正确答案?

0 投票
1 回答
60 浏览

performance - 数据大小和相同资源的性能度量

我有具有大量内核和集群的系统。对于没有可用串行实现的特定任务,我只能对在不同输入大小上运行的任务所花费的时间进行基准测试。我看到即使数据大小增加了 10 倍,在使用相同资源的情况下,完成时间也少于 10 倍。我想知道如何衡量性能,因为这似乎不属于强/弱缩放的典型定义。这似乎与效率有关,但我不确定。从我能收集到的关于这三个方面:

  1. 强缩放(Amdhal 定律):加速 = 1 / ( s + p / N ) = T( 1 ) / T( N )
  2. 弱缩放(古斯塔夫森定律):缩放加速 = s + p × N
  3. 效率:加速比/N

由于缺乏串行实现并且 N a 是恒定的,因此我没有加速,我只能想到使用强缩放来找到效率比。CS中有这样的参数吗?

0 投票
1 回答
70 浏览

java - 如何在 JAVA 中与执行器服务并行调用相同的函数?

我是java中并发和线程的新手,我有以下场景 -

Function1(从队列中获取下一个任务并使用任务调用 function2)然后 Function2(调用 Function Run 以运行此任务)然后 Run(函数运行正在使用具有固定线程池的执行器服务提交任务,代码如下所示)

我的问题是即使在声明线程池之后,任务仍然以顺序方式运行。我怎样才能让它并行,以便一旦有另一个运行调用它应该使用池中的空闲线程并提交任务?

所有这些函数都没有返回类型。