2

我有一个奇怪的问题。我有一个使用 OpenMP 指令/函数的 Matlab mexfunction。在并行部分开始之前(并行用于...),我使用命令来设置和打印创建的线程数:


nP = omp_get_num_procs();
omp_set_num_threads(nP);
mexPrintf("\n Num of threads= %d\n",nP);
.
.
.
#pragma omp parallel for shared(...)

问题是,在输出中,它会打印“线程数 = 12”,但随后的并行部分并未在我机器的所有 12 个内核上运行(但仅在 1 个内核上运行)。我的程序是很久以前写的,我之前没有遇到过这样的问题(它在所有 12 个内核上运行)。最近,系统损坏,操作系统(Win 7 Pro)重新安装了 Matlab 2011b(2010b 早期)的更新版本。我还安装了 Visual Studio 2010 Pro。

有什么我遗漏或忽略的吗?

4

1 回答 1

0

你在omp parallel for块内调用 mex 函数吗?

我最幸运的是先按顺序提取指针,然后并行处理,最后按顺序将结果加载到 matlab 变量中。这样并行代码是纯 C++,没有调用 mex 函数(可以等待共享锁)。

当然,请确保您实际上是在启用 OpenMP 的情况下进行编译...否则这些指令将被忽略,您最终会得到顺序代码。

于 2012-01-16T21:21:08.740 回答