Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 创建的线程数为12,但仍仅在12核CPU中的一个核上运行_Multithreading_Matlab_Openmp_Mex_Single Threaded - Fatal编程技术网

Multithreading 创建的线程数为12,但仍仅在12核CPU中的一个核上运行

Multithreading 创建的线程数为12,但仍仅在12核CPU中的一个核上运行,multithreading,matlab,openmp,mex,single-threaded,Multithreading,Matlab,Openmp,Mex,Single Threaded,我有一个奇怪的问题。我有一个MatlabMexFunction,其中使用了OpenMP指令/函数。在开始并行部分(parallel for…)之前,我使用命令设置并打印创建的线程数: 问题是,在输出时,它会打印'numofthreads=12',但后面的并行部分不会在我的机器的所有12个内核上运行(但只在1个内核上运行)。我的程序是很久以前写的,我以前没有这样的问题(它在所有12个内核上运行)。最近,系统损坏,操作系统(Win 7 Pro)重新安装了Matlab 2011b的更新版本(早于2

我有一个奇怪的问题。我有一个MatlabMexFunction,其中使用了OpenMP指令/函数。在开始并行部分(parallel for…)之前,我使用命令设置并打印创建的线程数:



问题是,在输出时,它会打印'numofthreads=12',但后面的并行部分不会在我的机器的所有12个内核上运行(但只在1个内核上运行)。我的程序是很久以前写的,我以前没有这样的问题(它在所有12个内核上运行)。最近,系统损坏,操作系统(Win 7 Pro)重新安装了Matlab 2011b的更新版本(早于2010b)。我还安装了VisualStudio2010 Pro


是否有我遗漏或忽略的内容?

是否在
omp parallel for
块中调用mex函数

我最幸运的是先按顺序提取指针,然后并行处理,最后按顺序将结果加载到matlab变量中。这样,并行代码是纯C++的,没有调用MEX函数(可以等待共享锁)。
当然,请确保您实际上是在启用OpenMP的情况下编译的。。。否则,指令将被忽略,并以顺序代码结束。

是否在
omp parallel for
块中调用mex函数

我最幸运的是先按顺序提取指针,然后并行处理,最后按顺序将结果加载到matlab变量中。这样,并行代码是纯C++的,没有调用MEX函数(可以等待共享锁)。
当然,请确保您实际上是在启用OpenMP的情况下编译的。。。否则,指令会被忽略,最终会产生顺序代码。

您是否将Windows配置为仅使用一个核心。Windows Server 2008也有限制,这取决于您购买的editon,使用了多少内核()。@AloisKraus:问题是Windows 7 Pro,它支持两个物理处理器插槽(以及多个内核/插槽)。您是否将Windows配置为仅使用一个内核。Windows Server 2008也有限制,这取决于您购买的editon使用了多少内核()。@AloisKraus:问题是Windows 7 Pro,它支持两个物理处理器插槽(以及多个内核/插槽)。
nP = omp_get_num_procs();
omp_set_num_threads(nP);
mexPrintf("\n Num of threads= %d\n",nP);
.
.
.
#pragma omp parallel for shared(...)