假设我想在威胁(比如说4个线程)之间运行以下循环,这样每个线程都负责计算(N / 4),其中N是矩阵的行数。
#pragma omp parallel num_threads(4) private(i,j,M) shared(Matrix)
{
#pragma omp for schedule(static)
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
M[i][j]= Matrix[i][j] + (Matrix[i][j] * Matrix[j][i]);
}
}
}
我的问题是:我应该明确指定每个线程将计算的矩阵的每个块的开头和结尾,还是OpenMP将自动在线程之间分配作业?这个问题背后的原因是我在某处读过OpenMP会自动在线程之间分配作业但是当我实现它时,它给了我错误分段错误。
谢谢。