Я хотел бы оптимизировать этот простой цикл:
unsigned int i;
while(j-- != 0){ //j is an unsigned int with a start value of about N = 36.000.000
float sub = 0;
i=1;
unsigned int c = j+s[1];
while(c < N) {
sub += d[i][j]*x[c];//d[][] and x[] are arrays of float
i++;
c = j+s[i];// s[] is an array of unsigned int with 6 entries.
}
x[j] -= sub; // only one memory-write per j
}
Цикл имеет время выполнения около одной секунды с 4000 МГц AMD Bulldozer. Я думал о SIMD и OpenMP (который я обычно использую для получения большей скорости), но этот цикл является рекурсивным.
Любые предложения?