0

我有一个看起来像这样的序列号:

sum = a;
sum += b;
sum += c;
sum += d;

我想将它并行化为类似的东西:

temp1 = a + b     and in the same time     temp2 = c + d
sum = temp1 + temp2

我如何使用英特尔并行工作室工具来做到这一点?

谢谢!!!

4

1 回答 1

1

假设所有变量都是整数或浮点类型,那么并行化这段代码绝对没有意义(在由不同线程/内核执行的意义上),因为开销将远远高于它带来的任何好处。此示例中适用的并行性是在单个 CPU 上的多个计算单元和/或矢量化级别。如今,优化编译器已经足够复杂,可以自动利用这一点,而无需更改代码;但是,如果您希望可以显式使用临时变量,如问题的第二部分所示。

如果您只是出于好奇而问:英特尔 Parallel Studio 提供了多种并行化代码的方法。例如,让我们将 Cilk 关键字与 C++11 lambda 函数一起使用:

#include <cilk/cilk.h>
...
temp = cilk_spawn [=]{ return a+b; }();
sum = c+d;
cilk_sync;
sum += temp;

不要期望从中获得性能(见上文),除非您使用具有大量计算重载的类operator+

于 2011-07-25T11:01:54.453 回答