matlab parpool 内存,linux - Matlab:-maxNumCompThreads,超线程和parpool - 堆栈内存溢出

首先,进行一些快速测试以确认我们的理解:

> matlab.exe -singleCompThread

>> warning('off', 'MATLAB:maxNumCompThreads:Deprecated')

>> maxNumCompThreads

ans =

1

>> maxNumCompThreads(2)

Error using feature

MATLAB has computational multithreading disabled.

To enable multithreading please restart MATLAB without singleCompThread option.

Error in maxNumCompThreadsHelper (line 37)

Error in maxNumCompThreads (line 27)

lastn = maxNumCompThreadsHelper(varargin{:});

如前所述,当使用-singleCompThread选项启动MATLAB时,我们无法使用maxNumCompThreads覆盖它。

> matlab.exe

>> parpool(2); % local pool

>> spmd, n = maxNumCompThreads, end

Lab 1:

n =

1

Lab 2:

n =

1

我们可以看到,默认情况下,每个工作程序都限于一个计算线程。 这是一件好事,因为我们希望避免超额预订和不必要的上下文切换,这种切换在尝试运行的线程数超过可用物理/逻辑核心数时发生。 因此,从理论上讲,最大化CPU利用率的最佳方法是启动与我们拥有的内核一样多的单线程工作器。

否,通过查看在后台运行的本地工作进程,我们可以看到每个进程的启动方式如下:

matlab.exe -dmlworker -noFigureWindows [...]

我相信未-dmlworker选项执行的功能类似于-singleCompThread ,但可能有所不同。 首先,我能够使用maxNumCompThreads(2)覆盖它,而不会像以前一样引发错误。

请记住,即使MATLAB会话在单线程计算模式下运行,也并不意味着计算线程仅限于一个CPU内核(该线程可能会在OS调度程序分配的内核之间跳转)。 如果要控制工作进程的相似性,则必须设置它。

因此,我使用英特尔VTune放大器进行了一些性能分析。 基本上,我运行了一些线性代数代码,并通过附加到MATLAB进程并在mkl.dll模块上进行过滤(这是Intel MKL库,MATLAB将其用作优化的BLAS / LAPACK实现)来执行热点分析。 这是我的结果:

-串行模式

我使用了以下代码: eig(rand(500));

正常启动MATLAB时,计算会产生4个线程(这是我拥有四核i7 Intel CPU时选择的默认自动值)。

正常启动MATLAB,但在计算前调用maxNumCompThreads(1) 。 如预期的那样,该计算仅使用1个线程。

使用-singleCompThread选项启动MATLAB,再次仅使用1个线程。

-并行模式( parpool )

我使用了以下代码: parpool(2); spmd, eig(rand(500)); end parpool(2); spmd, eig(rand(500)); end parpool(2); spmd, eig(rand(500)); end 。 在以下两种情况下,MATLAB均可正常启动

当使用默认设置在工作程序上运行代码时,每个工作程序只能使用一个计算线程

当我使用maxNumCompThreads(2)覆盖工作程序上的设置时,则每个工作程序将使用2个线程

这是VTune报告的屏幕截图:

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS92akhGei5wbmc=

希望能回答您的问题:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值