我有一个奇怪的问题。我有一个Matlab mexfunction,其中我使用了OpenMP指令/函数。在并行部分开始之前(并行...),我使用命令来设置和打印创建的线程数:
nP = omp_get_num_procs();
omp_set_num_threads(nP);
mexPrintf("\n Num of threads= %d\n",nP);
.
.
.
#pragma omp parallel for shared(...)
问题是,在输出时,它打印'Num of threads = 12',但是后面的并行部分不能在我的机器的所有12个核心上运行(但仅在1个核心上运行)。我的程序很久以前写过,我之前没有遇到过这样的问题(它运行在所有12个内核上)。最近,系统损坏,OS(Win 7 Pro)重新安装了更新版本的Matlab 2011b(早期2010b)。我还安装了Visual Studio 2010 Pro。
我有什么遗漏或忽视的吗?
答案 0 :(得分:0)
你是否在omp parallel for
区块内调用了mex函数?
我最好先按顺序提取指针,然后并行处理,然后在结束时依次将结果加载到matlab变量中。这样,并行代码就是纯C ++,没有调用mex函数(可以等待共享锁)。
当然,请确保您在启用OpenMP的情况下进行实际编译...否则会忽略指令并最终获得顺序代码。