私はそのようなものを持っています:
for (b=from; b<to; b++)
{
for (a=from2; a<to2; a++)
{
dest->ac[b] += srcvec->ac[a] * srcmatrix->weight[a+(b+from)*matrix_width];
}
}
cilkを使って並列化したい。私は次のコードを書きました:
for ( b=from; b<to; b++)
{
dest->ac[b] =+ __sec_reduce_add(srcvec->ac[from2:to2-from2] * (srcmatrix->weight+(b*matrix_width))[from2:to2-from2]);
}
しかし、問題は、プライマリ ループで cilk_for を使用することもできますが、reduce 操作が既にスレッドを生成している場合、cilk_for はスレッドのオーバーヘッドを増加させ、全体の速度を低下させないのでしょうか? また、コンパイラをさらに支援するために、 destおよびsrc args にrestrictを追加する必要がありますか? または、この場合は暗黙的ですか?
(ps: という理由で、今はコードを試すことができません
内部コンパイラ エラー: c-family/array-notation-common.c:244 の find_rank 内
の上
neu1b->ac[0:layer1_size]=neu1->ac[0:layer1_size];
私も解決しようとしています。)