【问题标题】:Number of threads created is 12 but still runs only on one core of 12 core-CPU创建的线程数为 12,但仍仅在 12 核 CPU 中的一个核上运行
【发布时间】: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。

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

【问题讨论】:

标签: multithreading matlab openmp mex single-threaded


【解决方案1】:

您是否在 omp parallel for 块内调用 mex 函数?

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

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

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多