Acabo de empezar a aprender cómo usar OpenMP. Estoy tratando de descubrir por qué el siguiente código no se ejecuta en paralelo con Visual Studio 2008. Se compila y funciona bien. Sin embargo, utiliza solo un núcleo en mi máquina de cuatro núcleos. Esto es parte del código que intento portar a una función mex MATLAB. Cualquier puntero es apreciado.Intentando saber por qué el código de OpenMP no se hace paralelo a
#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;
}
}
También debe considerar su se de un generador de números aleatorios dentro del ciclo. Dependiendo de su implementación, esto puede bloquearse en un recurso compartido, serializando efectivamente su código después si aborda el problema anterior. –