英特尔并行工作室2011 -并行求和



我有一个序列代码,看起来像这样:

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

我想把它并行化为这样的东西:

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

我如何使用英特尔并行工作室工具?

谢谢! !

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

如果你只是好奇地问:Intel Parallel Studio提供了几种并行化代码的方法。例如,让我们将Cilk关键字与c++ 11 lambda函数一起使用:

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

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

最新更新