Как мне развернуть следующие вложенные циклы?unroll вложенные для циклов в C++
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]);
}
}
}
}
Я будет работать этот код в параллельном режиме с использованием TBB Intel, так что он использует несколько ядер. По завершении работы другая функция выдает то, что находится в массиве [], и прямо сейчас, при моей разворачивании, вывод не идентичен. Любая помощь приветствуется.
Обновление: я исправил его. Я использовал ответ для этого вопроса, чтобы сделать разворот ... результат не был сопоставлен, потому что я не делал array[k] = 0;
после первого цикла for.
Спасибо, Христо
Это вопрос С. –
@ VicenteBotetEscriba - это может быть C или C++ ... зависит от того, как он скомпилирован. –
Это C++, а не C – Hristo