c++ - "C++ Concurrency in Action"中的阿姆达尔定律

标签 c++ multithreading concurrency

<分区>

我正在做一篇关于多线程的理学士学位论文,引用书目之一是 Anthony Williams 的“C++ Concurrency in Action”。它在使用 std 线程方面帮助了我很多,但是有一件事我不确定。阿姆达尔定律提到的公式是

P(N) = 1 /( f + ( 1 - f )/ N )

而我找到的所有其他来源都提供:

P(N) = 1 / ( 1 - f + f / N )

在这两种情况下,P 是性能增益因子,f 是“串行”的常数分数,[0, 1] 中的独立部分,N 是处理器的数量(自然数)。

即使函数的水平渐近线在第一种情况下也是 1/f,而在第二种情况下是 1/(1 - f)。是错误还是我理解错了?

最佳答案

在第一种情况下,f 是串行代码的分数,在第二种情况下,f 是并行代码的分数。

如果将 (1-f) 代入任一方程式中的 f,您将得到另一个方程式

关于c++ - "C++ Concurrency in Action"中的阿姆达尔定律,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39999057/

相关文章:

c++ - 如何让编译器根据版本跳过一个函数?

c++ - 如何在 C++ 中备份/克隆对象

python - 使用 asyncio 在 django 中执行周期性任务

c++ - 在另一个类的成员函数中从成员函数启动线程

c - c 中的 pthreads 返回意外结果

c++ - 在 C++11 下使用正则表达式

java - 用 ConcurrentHashmap 替换所有出现的 Hashtable 是否安全?

java - 如何确保一个线程在另一个线程之前启动?

c# - 共享资源访问的优化同步

c++ - vector 构造函数标识为函数