방금 OpenMP을 사용하는 방법을 배우기 시작했습니다. 다음 코드가 Visual Studio 2008과 병렬로 실행되지 않는 이유를 알아 내려고 노력 중입니다. 컴파일되고 정상적으로 실행됩니다. 그러나 그것은 내 쿼드 코어 머신에서 하나의 코어만을 사용합니다. 이것은 MATLAB mex 함수로 이식하려고하는 코드의 일부입니다. 모든 포인터를 주셔서 감사합니다.왜 OpenMP 코드가 병렬 처리되지 않는지 알고 싶습니다.
#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;
}
}
또한 루프 내에서 임의의 숫자 생성기를 고려해야합니다. 구현에 따라 공유 리소스를 잠글 수 있으므로 위의 문제를 해결 한 후에 코드를 효과적으로 직렬화합니다. –