问题标签 [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 回答
3448 浏览

parallel-processing - 阿姆达尔定律示例

阿姆达尔定律指出,计算的部分 S 必须按顺序从 1 个处理器系统到 N 个处理器系统进行时,计算的最大加速比最多为

有谁知道对代码进行实际分析的书籍或笔记,对于一些非平凡的计算,以确定分数 S 吗?

0 投票
2 回答
5763 浏览

algorithm - 使用阿姆达尔定律计算性能增益

我对确定性能增益和串行应用程序部分的阿姆达尔定律感到困惑,但未能弄清楚这一点。

已知如下:

如果我有 4 个 CPU 和 3 倍的加速因子(性能增益)。f会是什么?

我猜:

所以在公式中输入这些值:

我说 f = 0,11 是否正确?还是我需要将 S(N) 设置为 1(所以除以 3)?还是我做错了什么?

0 投票
1 回答
2105 浏览

cuda - 阿姆达尔定律和 GPU

我对阿姆达尔定律在 GPU 上的应用有几个疑问。例如,我有一个内核代码,我使用多个线程启动,比如 N。那么,在阿姆达尔定律中,处理器的数量将是 N 对吗?此外,对于使用大量线程的任何 CUDA 编程,我可以安全地假设 Amdahl 定律减少到 1/(1-p) 其中 p 代表并行代码吗?谢谢

0 投票
2 回答
1123 浏览

performance - 在并行使用一定数量的 cpu 时找到应用程序的最大加速

假设我们有以下代码:

现在让我们假设我们有14相同的 CPUS 可以用来帮助我们并行计算最终结果。

14执行上述代码时,使用所有 cpu 可以获得的最大速度是多少?假设每个操作(加法)都需要1单位时间。

正如我所看到的,加速通常Ts/TpTs使用1cpuTp所花费的时间,而使用所有可用 cpu 所花费的时间。

在我的示例中,我们将不得不花费时间单位来使用cpu20 + 8*2 = 36执行代码。1

然后使用14cpus,我们可以使用1时间单位来找到 的第一个14A。然后使用6cpus 我们可以使用另一个1时间单位来6查找A.

在找到 的剩余值时,A我们将使用其他8cpu 来查找 的8CE通过花费2时间单位。

所以总的来说,我们会花费1 + (1 || 2) = 1 + 2 = 3时间单位,这意味着speedup36/3 = 12

这个对吗?我们能否以更好的方式使用 cpu 来实现更好的加速?此外,是否有可能以某种方式使用阿姆达尔定律更快地找到结果?阿姆达尔定律说,如果x是总代码中不能并行运行的部分,那么最大加速就是1/(x + (1 - x)/p)使用p的 CPU 数量,所以在我的情况下,这个数字将等于14.

但是我不确定我们如何找到可以并行运行的代码部分。如果我决定解决以下等式:

在此处输入图像描述

然后x = 1/78。但是,如何x仅通过查看代码来找到它?如果我决定更一般地看待我的问题,则需要20时间单位的第一个循环可以并行运行。但是在第二个循环中,循环内的操作不能并行运行,所以在16时间单位之外,只能8并行运行。

所以可以并行运行的总时间是28。所以x = 8/36

因此,我们从 Amdahl 定律得到以下结果(来自 wolframalpha):

在此处输入图像描述

但我发现12按照上面解释的逻辑可以加快速度。我究竟做错了什么?

先感谢您

0 投票
2 回答
475 浏览

parallel-processing - 阿姆达尔定律:矩阵乘法

我正在尝试计算可以并行化的代码的分数 P,以应用阿姆达尔定律并观察理论上的最大加速。

我的代码大部分时间都花在乘法矩阵上(使用库 Eigen)。我应该认为这部分是完全可并行的吗?

0 投票
1 回答
8610 浏览

performance - Working through an example of Amdahl's Law with respect to percentage speedup

I am reading through "Computer Architechture: A Quantitative Approach 5th ed" and am trying to grasp Amdahl's law, when it comes to speeding up portions of the system i.e. speed up a certain percentage of the system by a certain percentage . It is easy to understand when you are talking about speeding up a system by a certain factor e.g. a system that is 10 times faster.

To give a concrete example:

You have a system, where a certain sub-system accounts for 70% of the execution time and you wish to develop a speedup which will improve the latency of this sub-system by 50%.

From the book, Amdahl's Law is listed as:

SpeedupOverall = 1/((1-FractionEnhanced)+(FractionEnhanced/SpeedupEnhanced))

I gather from the explanation of the Fractional Enhancement ("The fraction of the computation time in the original computer that can be converted to take advantage of the enhancement"), that: FractionEnhanced = 70% or 0.7.

My question here is how to reflect the speedup. The book lists it as "The improvement gained by the enhanced execution mode, that is, how much faster the task would run if the enhanced mode were used for the entire program". The book says that this would be the time that the original mode over the improvement time; in this case 70/50, or 1.4. However, where my confusion comes in is with this website, where by examining the java applet code, it seems that speedup enhanced would be 1 + the percentage speedup, or 1.5. Maybe I am overthinking this as well, but I am also thinking how it could also be .7/(0.7 - 0.7*0.5), or 2 (since, 70%*50% is the actual latency reduction, in terms of the actual sub-sbstem, right?).

Working the math out, we get the following answers:

  1. For SpeedupEnhanced = 70/50 = 1.4: SpeedupOverall = 1/((1-0.7)+ .7/1.4) = 1.25

  2. For SpeedupEnhanced = 1+0.5 = 1.5: SpeedupOverall = 1/((1-0.7)+ .7/1.5) = 1.3043

  3. For SpeedupEnhanced = 0.7/(0.7-0.7*0.5) = 2: SpeedupOverall = 1/((1-0.7)+.7/2) = 1.54

Which one would be the correct speedup here? The second seems to make sense to me, but the book seems to imply that the first is correct. Any help by way of references or explanations as to how to grasp this type of speedup would be greatly appreciated.

0 投票
1 回答
54 浏览

caching - 理解并行中的通信延迟

我正在阅读“计算机体系结构:一种定量方法,第 5 版”,并正在查看第 350 页第 5 章中的一个示例。附件是对相关示例的扫描。在这个例子中,我不太遵循他们如何做事的逻辑。

在此处输入图像描述

我的问题如下:

  1. 0.3ns的循环时间从何而来?
  2. 200/0.3 大约是 666 个周期,我遵循这个。然而,当回到 CPI 方程时,它没有任何意义:0.2% (0.002) x 666 等于 1.332 而不是 1.2。这里发生了什么?
  3. 当他们说“具有所有本地引用的多处理器速度快 1.7/0.5 = 3.4 倍”时,他们是从哪里得到的?含义:我在给定的信息中看不到任何地方表明本地通信速度是原来的两倍......

任何帮助,将不胜感激。

0 投票
1 回答
142 浏览

concurrency - 为什么比较和交换操作受阿姆达尔定律的限制?

Martin Thompson 断言,依赖于 CAS 的 ref 的 STM 最终将受到 Amdahl 定律的限制阿姆达尔定律是并行程序的最大性能受到程序的顺序(非并行)部分的限制。Martin Thompson 是否说 CAS 本质上是非平行的?

0 投票
1 回答
23467 浏览

java - -XX:parallelGCThreads = 8 是否与阿姆达尔定律相关的核心数有关?

介绍:

我目前正在开发一款软件,我在其中使用多线程程序对顺序程序进行基准测试。我的硬件有 24 个可用内核和 16GB 的 RAM。我的程序是用 Java 编写的,但由于需要绘图而从 MATLAB 执行。打开 MATLAB 后会显示以下消息:

理论

现在根据阿姆达尔定律,maksimum 性能提升将被定义为 1/(B-(1-B)/P),其中 B 是顺序分数,P 是处理器数量。在我的情况下,我有 B = 0.01, (1-B = .99) 和 P = 24 这给了我大约 20 的理论最大性能提升。

现在,据我了解parallelGCThreads,这是可用的垃圾收集器线程的最大数量。在对我的程序进行了一些密集测试之后,我能够实现的最大比率增加似乎是 7.5 倍,这与理论值 20 相差甚远。但是,如果我替换 P = 8,我得到的理论限制为7.8 与我的程序中获得的非常接近。

问题

实际上是否parallelGCThreads限制了线程的数量,使得阿姆达尔定律应该与 P = 8 而不是 P = 24 一起使用?

提前致谢!

0 投票
0 回答
203 浏览

algorithm - 如何通过阿姆达尔定律找到并行算法与串行算法的加速比?

串行伪代码:

并行解决方案:

我想找到测试版来加快速度??beta=自然串行的程序部分

我怎样才能在其中找到测试版????