Tôi vừa mới bắt đầu học cách sử dụng OpenMP. Tôi đang cố gắng tìm ra lý do tại sao các mã sau đây không chạy song song với Visual Studio 2008. Nó biên dịch và chạy tốt. Tuy nhiên nó chỉ sử dụng một lõi trên máy lõi tứ của tôi. Đây là một phần của mã mà tôi đang cố gắng chuyển đến hàm mex MATLAB. Bất kỳ con trỏ nào được đánh giá cao.Đang cố gắng biết tại sao mã OpenMP không song song
#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;
}
}
Bạn cũng nên cân nhắc kỹ về số máy phát số ngẫu nhiên trong vòng lặp. Tùy thuộc vào việc triển khai, tính năng này có thể khóa trên tài nguyên được chia sẻ, tuần tự hóa mã của bạn một cách hiệu quả sau khi bạn giải quyết vấn đề ở trên. –