我有类似的东西:
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 中添加限制以进一步帮助编译器吗?还是在这种情况下是隐含的?
(ps:我现在无法尝试代码,因为
内部编译器错误:在 find_rank 中,位于 c-family/array-notation-common.c:244
在
neu1b->ac[0:layer1_size]=neu1->ac[0:layer1_size];
我也在努力解决。)