0

すなわち。為に

int A[100]
A[:] = 1;

それは100のスレッドを作成しようとしますか? それともforループをするのと同じですか?

並列化されていると思っていましたが、テストしたところ、そうは見えません。

複数のスレッドを使用する方法はありますか、それとも配列表記だけですか?

4

1 に答える 1

0

いいえ。Cilk Plus は 2 種類の並列処理をサポートしています。データ並列処理とタスク並列処理。

データ並列処理は、複数の値に対して同時に同じ操作を実行します。これは、SIMD (Single Instruction, Multiple Data) と呼ばれることもあります。配列表記は、これがデータ並列操作であり、CPU のベクトル ユニットを使用して実行する必要があることをコンパイラに知らせる「ヒント」です。ベクトル単位に収まるよりも多くの要素がある場合、コンパイラは操作の周りにループを生成します。複数の行が同じデータ セットで動作していることをコンパイラが検出できる場合、コンパイラは計算全体にループを配置します。

タスク並列処理では複数のタスクが同時に実行され、各タスクは独自の命令ストリームを実行します。計算も並行して行いたい場合は、計算の周りに cilk_for ループを使用する必要があります。必要に応じて、TBB または OpenMP を使用することもできます。

  • バリー
于 2014-04-24T12:53:49.450 に答える