【发布时间】:2014-05-26 17:43:42
【问题描述】:
我是并行编程的新手,遇到了 OpenMP 库的问题。我用简单的代码在 Visual Studio Win 32 控制台应用程序中对其进行了测试:
int main(){
omp_set_num_threads(2);
#pragma omp parallel
{
int tid = omp_get_thread_num();
long tmp;
if(tid == 0){ for (int i = 0;i<10000;i++){ tmp = ((i*999)*90000)*((i*999)*90000) }
if(tid == 1){ for (int i = 0;i<10000;i++){ tmp = ((i*999)*90000)*((i*999)*90000) }
}
}
代码是并行运行的,如果我在没有 OpenMP 的情况下运行它,它的运行时间会延长 2 倍。
现在,在 MATLAB 中,我可以运行 .mex 文件,这些文件是编译后在 MATLAB 中运行的 C 文件,您需要在文件中为特定编译器添加 /openmp 编译标志。由于我在 Visual Studio 2010 中工作,因此需要修改的文件是 msvc100opts.bat,我在编译标志中添加了 /openmp。当我进行基准测试时,我得到了不好的结果并且它不稳定。我已经阅读了大量对我没有帮助的指南。如何在 MATLAB 的 .mex 文件中可靠地使用 OpenMP 指令?
【问题讨论】:
-
您能否更具体地谈谈“不良结果”和“不稳定”?