Mat*_*ari 2 c multithreading openmp
我正在用openMP计算一个项目.在这个项目中,我需要做一个计算,特别是:
gap = (DEFAULT_HEIGHT / nthreads);
Run Code Online (Sandbox Code Playgroud)
where DEFAULT_HEIGHT是常量,nthreads 是并行区域内的线程数.我的问题是我无法计算gap 并行区域外的变量,因为我需要在里面知道nthreads .但另一方面,我不想gap 为每个线程计算.此外,我无法设置这样的代码:
if(tid==0){
gap = (DEFAULT_HEIGHT / nthreads);
}
Run Code Online (Sandbox Code Playgroud)
因为我不知道每个线程的执行顺序,所以可能是线程0从最后开始,所有我需要的其他计算gap都是错误的(因为它不会被设置).那么,有一种方法可以在没有这个问题的情况下进行一次这种计算吗?
谢谢
确保它gap是一个共享变量,并将其包含在OpenMP single指令中,例如
#pragma omp single
{
gap = (DEFAULT_HEIGHT / nthreads);
}
Run Code Online (Sandbox Code Playgroud)
只有一个线程将执行single指令中包含的代码,其他线程将在封闭的代码块的末尾等待.
另一种方法是gap私有化,让所有线程计算自己的值.这可能更快,该single选项需要一些总是需要时间的同步.如果您担心,请尝试两者并比较结果.(我认为这就是ComicSansMS的建议.)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |