Ich habe gerade angefangen zu lernen, wie man OpenMP verwendet. Ich versuche herauszufinden, warum der folgende Code nicht parallel mit Visual Studio 2008 ausgeführt wird. Es kompiliert und läuft gut. Es verwendet jedoch nur einen Kern auf meiner Quad-Core-Maschine. Dies ist Teil des Codes, den ich versuche, auf eine MATLAB Mex-Funktion zu portieren. Jeder Zeiger wird geschätzt.Versucht zu wissen, warum der OpenMP-Code nicht parallelisiert
#pragma omp parallel for default(shared) private(dz, t, v, ts_count) reduction(+: sum_v)
for(t = 0; t<T; t++)
{
dz = aRNG->randn();
v += mrdt* (tv - v) +
vv_v_sqrt_dt * dz +
vv_vv_v_dt*(dz*dz - 1.);
sum_v += v;
if(t == ts_count-1)
{
int_v->at_w(k++) = sum_v/(double)(t+1);
ts_count += ts;
}
}
Sie sollten auch einen Blick auf Ihre se von einem Zufallsgenerator innerhalb der Schleife. Abhängig von der Implementierung kann sich dies auf eine freigegebene Ressource auswirken, wodurch Ihr Code effektiv serialisiert wird, wenn Sie das oben genannte Problem beheben. –