我不擅长并行编程,但我需要更快地完成这个循环。我知道如何使用该库,但我不确定输出是否正确,因为输出非常接近零,但不是。
for ( int l = 0; l < s; ++l ) {
double denonimator_l = 0;
for (int g = 0; g < G; ++g ) {
double &pi_gl = pi(g, l) = w[g];
for (int i = 0; i < p; ++i )
pi_gl *= P[g](i, Y(l, i) - 1);
denonimator_l += pi_gl;
}
for (int g = 0; g < G; ++g ) {
double &pi_gl = pi(g, l);
pi_gl /= denonimator_l;
}
}
我需要将四个循环并行而不仅仅是第一个循环。
#pragma omp parallel for schedule(dynamic)
所以,我不确定我是否将上面的行放在第一个循环中就足够了。此外,我需要正确的输出,如果我不使用私有变量,我不知道我是否做错了,因为我正在使用读/写操作。
循环不是完全嵌套的,所以我不能使用折叠。
请注意,每个循环都有一个临时循环变量。