为什么ssh下的`matlabpool`需要X转发?

时间:2014-09-21 16:02:06

标签: ssh parallel-processing x11 matlab

我刚刚遇到并绕过了Matlab中的问题,但我仍然想知道为什么会发生这种情况,我也想把这些信息留在这里以供将来参考。

在Matlab的并行计算工具箱中,命令matlabpool local启动一个本地Matlab工作池,然后透明地使用它来加速parfor之类的命令。将处理分配到不同的CPU核心。我尝试在我通过家用Linux计算机上的ssh连接的Linux机器上这样做。我使用没有X转发的ssh,因为我想运行的脚本只计算并保存结果,但不生成图形输出。

问题:matlabpool永远挂起,没有任何原因迹象。我重新启动了远程机器,重新启动了Matlab,检查了许可证问题,没有结果。

但是当我关闭ssh并重新登录时,问题得到了解决,这次包括用于X11转发的-X选项 - 尽管我已经使用-nodesktop选项启动了Matlab。

有没有人知道为什么Linux上的matlabpool似乎依赖于对X11的访问?

1 个答案:

答案 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 &

脚本包含一个简单的并行测试,如:

myscript.m

parpool('local',2)
smpd
    fprintf('hello from lab#%d', labindex);
end
delete(gcp('nocreate'))

如果MATLAB仍然挂起,请尝试添加-debug启动选项:

  

matlab -debug启动MATLAB并显示可能有用的调试信息,尤其是对于基于X的问题。