Как бы я развернул следующие вложенные циклы?
for(k = begin; k != end; ++k) {
for(j = 0; j < Emax; ++j) {
for(i = 0; i < N; ++i) {
if (j >= E[i]) continue;
array[k] += foo(i, tr[k][i], ex[j][i]);
}
}
}
Я попробовал следующее, но мой вывод не тот, и он должен быть:
for(k = begin; k != end; ++k) {
for(j = 0; j < Emax; ++j) {
for(i = 0; i+4 < N; i+=4) {
if (j >= E[i]) continue;
array[k] += foo(i, tr[k][i], ex[j][i]);
array[k] += foo(i+1, tr[k][i+1], ex[j][i+1]);
array[k] += foo(i+2, tr[k][i+2], ex[j][i+2]);
array[k] += foo(i+3, tr[k][i+3], ex[j][i+3]);
}
if (i < N) {
for (; i < N; ++i) {
if (j >= E[i]) continue;
array[k] += foo(i, tr[k][i], ex[j][i]);
}
}
}
}
Я буду запускать этот код параллельно, используя Intel TBB, чтобы он использовал преимущества нескольких ядер. После того, как это закончится, другая функция распечатывает, что находится в массиве [], и сейчас, с моим развертыванием, вывод не идентичен. Любая помощь приветствуется.
Обновление: я исправил это. Я использовал ответ на этот вопрос, чтобы развернуть ... вывод не соответствовал, потому что я не делал array[k] = 0;
после первого цикла for.
Спасибо,
Христо