我刚刚遇到并绕过了Matlab中的问题,但我仍然想知道为什么会发生这种情况,我也想把这些信息留在这里以供将来参考。
在Matlab的并行计算工具箱中,命令matlabpool local
启动一个本地Matlab工作池,然后透明地使用它来加速parfor
之类的命令。将处理分配到不同的CPU核心。我尝试在我通过家用Linux计算机上的ssh连接的Linux机器上这样做。我使用没有X转发的ssh,因为我想运行的脚本只计算并保存结果,但不生成图形输出。
问题:matlabpool
永远挂起,没有任何原因迹象。我重新启动了远程机器,重新启动了Matlab,检查了许可证问题,没有结果。
但是当我关闭ssh并重新登录时,问题得到了解决,这次包括用于X11转发的-X
选项 - 尽管我已经使用-nodesktop
选项启动了Matlab。
有没有人知道为什么Linux上的matlabpool
似乎依赖于对X11的访问?
答案 0 :(得分:0)
即使matlabpool
启动并与后台无头工作人员进行通信,您仍然可以创建数字和绘图,并将它们打印/导出为parfor
并行循环内的图像。以下是有效的用例:
matlabpool(..)
parfor i=1:4
plot(..)
print(...)
close(..)
end
对我而言,这表明后台工作人员仍将依赖图形功能在内存中生成隐形图(可能是使用虚拟帧缓冲器等)。当然这只是我的猜测:)
为了确保这一点,您可以尝试以下命令序列:
[client]$ ssh -v -x user@server # X11 forwarding disabled
[server]$ unset DISPLAY # clear $DISPLAY variable
[server]$ nohup matlab -nodesktop -nodisplay -noFigureWindows -nosplash \
-r "myscript; quit;" 2>&1 < /dev/null &
脚本包含一个简单的并行测试,如:
parpool('local',2)
smpd
fprintf('hello from lab#%d', labindex);
end
delete(gcp('nocreate'))
如果MATLAB仍然挂起,请尝试添加-debug
启动选项:
matlab -debug
启动MATLAB并显示可能有用的调试信息,尤其是对于基于X的问题。