c++ - 包含后增量的表达式能否与 C++ 中该表达式的其他部分并行执行?

标签 c++ parallel-processing

我从以下答案中提出了这个问题: Efficiency of postincrement v.s. preincrement in C++

我发现了这个表达式:

a = b++ * 2;

他们说,上面的b++可以和乘法并行运行。

b++ 如何与乘法并行运行?

我对程序的理解是: 首先我们将 b 的值复制到一个临时变量,然后递增 b,最后将 2 乘以该临时变量。 我们不是乘以 b 而是乘以那个临时变量,那么它将如何并行运行?

我从另一个答案 Is there a performance difference between i++ and ++i in C++? 得到了关于临时变量的想法。

最佳答案

你说的是instruction level parallelism .在这种情况下,处理器可以对 b 的拷贝执行递增,同时还乘以旧的 b。 这是处理器级别的非常细粒度的并行性,通常您可以期望它为您带来一些优势,具体取决于架构。

相反,在预递增的情况下,递增操作的结果必须在处理器的管道中等待,然后才能执行乘法,因此会给你带来惩罚。 但是,这在语义上并不等价,因为 a 的值会不同。

关于c++ - 包含后增量的表达式能否与 C++ 中该表达式的其他部分并行执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39827045/

相关文章:

c++ - '\r' 转义序列有什么用?

java - 如何检测二值图像中的圆圈

c# - 让 Parallel.ForEach 等待直到插槽打开才开始工作

C++ 多线程 : terminate after throwing an instance of 'std::length_error'

c++ - 指针中的二维数组

c++ - 如何获取所有使用全局变量的函数名?

for-loop - Julia:具有大数据移动的并行 For 循环

python - multiprocessing.Queue 的管道损坏错误

c++ - Eigen 与 OpenMP : No parallelisation due to false sharing and thread overhead

c++ - OpenMP:是使用更少的长线程更好,还是使用最大可用的短线程更好?