次のようなシリアルコードがあります。
sum = a;
sum += b;
sum += c;
sum += d;
私はそれをそのようなものに並列化したいと思います:
temp1 = a + b and in the same time temp2 = c + d
sum = temp1 + temp2
インテル® パラレル・スタジオ・ツールを使用してそれを行うにはどうすればよいですか?
ありがとう!!!
次のようなシリアルコードがあります。
sum = a;
sum += b;
sum += c;
sum += d;
私はそれをそのようなものに並列化したいと思います:
temp1 = a + b and in the same time temp2 = c + d
sum = temp1 + temp2
インテル® パラレル・スタジオ・ツールを使用してそれを行うにはどうすればよいですか?
ありがとう!!!
すべての変数が整数型または浮動小数点型であると仮定すると、(異なるスレッド/コアで実行するという意味で) このコードを並列化する意味はまったくありません。この例で適用可能な並列処理は、単一の CPU での複数の計算ユニットおよび/またはベクトル化のレベルです。現在、最適化コンパイラは十分に洗練されており、コードを変更することなく、これを自動的に利用できます。ただし、質問の2番目の部分のように、一時変数を明示的に使用することもできます。
好奇心から聞いてみると、インテル® Parallel Studio には、コードを並列化する方法がいくつか用意されています。たとえば、Cilk キーワードを C++11 ラムダ関数と一緒に使用してみましょう。
#include <cilk/cilk.h>
...
temp = cilk_spawn [=]{ return a+b; }();
sum = c+d;
cilk_sync;
sum += temp;
計算量の多いオーバーロードされたクラスを使用しない限り、そこからパフォーマンスを期待しないでください (上記参照) operator+
。