是否有任何技术可以将依赖循环(我的意思是第k次迭代取决于前一次迭代结果的循环)转换为独立循环,使其成为并行化的候选者?这很重要,因为我有这样一个循环,我想将它迁移到GPU。如果它是一个帮助,循环是一个for
循环,具有先验已知的迭代计数。
for (int n = 1; n <= nmax; n++) {
t = nhVal;
Nv = gfft(pow(real(ifft(tile(i, N, 1) * kv)), 2));
a = E2 * v + QNv;
Na = gfft(pow(real(ifft(tile(i, N, 1) * ka)), 2));
b = E2 * v + QNa;
Nb = gfft(pow(real(ifft(tile(i, N, 1) * kb)), 2));
c = E2 * a + Q * (2 * Nb - Nv);
Nc = gfft(pow(real(ifft(tile(i, N, 1) * kc)), 2));
v = Ev + Nvf1 + 2 * (Na + Nb) * f2 + Ncf3;
if (mod(n, 100) == 0)
printf("n = %d\n", n);
if (mod(n, nplt) == 0) {
plotIdx++;
u = real(ifft(v));
}
}