为MATLAB引擎设置处理器关联(Windows 7)

tmp*_*rce 7 c++ matlab matlab-engine affinity windows-7

我正在用c ++开发一个应用程序.该应用程序的一个组件使用Matlab(通过Matlab引擎)进行数据处理.同时,数据采集系统将数据流传输到磁盘.偶尔,在强化Matlab处理期间,采集系统崩溃.通过将Matlab的处理器亲和性设置为可用处理器的子集,可以解决此问题.但是,由于应用程序每天启动几次,并且在多台计算机上,每次手动设置关联是不方便的.通过快捷方式的命令行设置处理器关联性的技巧不起作用,因为引擎是从我的应用程序内启动的,而不是通过快捷方式启动的.我一直在寻找一种以编程方式设置亲和力的方法,但成效有限.

我考虑了以下选项(按优先顺序排列):

  1. 在引擎启动时,从应用程序内指定matlab引擎的处理器关联.
  2. 为matlab引擎指定默认的处理器关联,与完整的Matlab应用程序本身分开.
  3. 作为最后的手段,为Matlab设置默认关联(引擎和非引擎使用).这是最不可取的,因为Matlab在部署机器上用于其他目的,并且最好不要将其限制用于其他用途.

是否可以在我的应用程序中设置处理器关联,如果是,如何设置?如果没有,解决这个问题的正确方法是什么?对这些选项或其他建议/解决方案的任何建议都将受到欢迎.

And*_*nke 6

听起来像是在Windows上.您可以直接从Matlab调用.NET来操作处理器关联掩码,并避免构建MEX文件.System.Diagnostics.Process类具有处理器关联性控件,如此解决方案中所述.这是一个使用它的Matlab函数.启动后,首先在Matlab引擎中运行它.

function twiddle_processor_affinity()
proc = System.Diagnostics.Process.GetCurrentProcess();
aff = proc.ProcessorAffinity.ToInt32;  % get current affinity mask
fprintf('Current affinity mask: %s\n', dec2bin(aff, 8));
proc.ProcessorAffinity = System.IntPtr(int32(2)); % set affinity mask
fprintf('Adjusted affinity to: %s\n', dec2bin(proc.ProcessorAffinity.ToInt32, 8));
Run Code Online (Sandbox Code Playgroud)

由于Matlab在Windows上公开.NET标准库对象,因此您有时可以在C#或.NET下搜索此类问题,并将答案直接传递给Matlab.