У меня есть что-то вроде этого:
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 в основном цикле, но если операция сокращения уже порождает поток, не будет ли cilk_for увеличивать накладные расходы потока и замедлять все это? И должен ли я добавить restrict в аргументы dest и src, чтобы помочь компилятору? или это подразумевается в этом случае?
(ps: я не могу попробовать код прямо сейчас из-за
внутренняя ошибка компилятора: в find_rank, в c-family/array-notation-common.c:244
on
neu1b->ac[0:layer1_size]=neu1->ac[0:layer1_size];
что я тоже пытаюсь решить.)