Cilkplusの並列forループ内で関数を呼び出そうとしています。呼び出す関数で配列を宣言すると、人種の問題が発生しますか?ループを何度か実行した後、セグメンテーション違反または中止(コアダンプ)エラーが発生します。
PScan()
{
// Would working on w create race issues?
double *w = calloc(num,sizeof(double));
}
Cilkplusの並列forループ内で関数を呼び出そうとしています。呼び出す関数で配列を宣言すると、人種の問題が発生しますか?ループを何度か実行した後、セグメンテーション違反または中止(コアダンプ)エラーが発生します。
PScan()
{
// Would working on w create race issues?
double *w = calloc(num,sizeof(double));
}
PScan()がcilk_forループから呼び出された場合、w配列の使用は競合しません。すべての並列ストランドには、独自に割り当てられたwのコピーがあります。使い終わったら、必ずそのメモリを解放してください。
ただし、callocなどのメモリ割り当てルーチンの呼び出しには、パフォーマンスを制限する可能性のあるロックが含まれる場合があることに注意してください。tbbmallocのような代替メモリアロケータはこれを軽減できます。
Cilkscreenツールを使用して人種を検索できます。Cilk Tools(Cilkscreenレース検出器およびCilkviewスケーラビリティアナライザー)は、 http: //cilkplus.org/downloadから無料で入手できます。
- Barry Tannenbaum
Intel Cilk Plus Runtime Development