我从以下答案中提出了这个问题: 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/