我有一个类似的序列代码:
sum = a;
sum += b;
sum += c;
sum += d;
我想将它与这样的东西并行化:
temp1 = a + b and in the same time temp2 = c + d
sum = temp1 + temp2
如何使用英特尔Parallel studio工具进行操作?
感谢!!!
答案 0 :(得分: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+
。