【发布时间】:2012-01-16 20:41:26
【问题描述】:
我有一个奇怪的问题。我有一个使用 OpenMP 指令/函数的 Matlab mexfunction。在并行部分开始之前(parallel for...),我使用命令来设置和打印创建的线程数:
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。
有什么我遗漏或忽略的吗?
【问题讨论】:
-
您是否将 Windows 配置为仅使用一个内核? sevenforums.com/tutorials/…。 Windows Server 2008 也有限制,具体取决于您购买的版本,使用了多少内核 (directionsonmicrosoft.com/sample/DOMIS/update/2008/02feb/…)。
-
@AloisKraus:问题是 Windows 7 Pro,它支持两个物理处理器插槽(和许多内核/插槽)。
标签: multithreading matlab openmp mex single-threaded