使用 SLURM 设置 Matlab 的显示分辨率

问题描述

我过去常常在 HPC 集群上运行一些 Matlab 模拟。

集群运行 SLURM。

我的 Matlab 脚本的输出之一是一个 GIF 文件,它显示了我正在模拟的内容的时间演变。 GIF 文件的每一帧都是通过命令“getframe”获取的,该命令获取显示的快照。

当我在计算机上运行 Matlab 脚本时,GIF 文件看起来很完美,因为快照具有我计算机的分辨率。当我在 HPC 集群上运行相同的 Matlab 脚本,通过 SLURM 提交作业时,GIF 文件看起来很糟糕,因为它的分辨率非常低。毕竟,HPC 集群并没有真正的显示器,也许只是一个虚拟显示器。

那么,我的问题是:我可以在提交作业时更改虚拟显示器的分辨率,以便 Matlab 在模拟过程中拍摄的快照看起来是高分辨率的吗?

解决方法

尝试在调用 getframe 之前添加以下内容:

h = figure;
h.WindowState = 'maximized';

这将确保在捕获快照之前最大化窗口。然后,您应该获得更高分辨率的图像。

如果这不起作用,另一种选择是使用 print 将每个图像保存到磁盘,您可以在其中明确指定分辨率:

print('-dpng','-r200',filename)

但是您必须在后续步骤中合并电影中的所有文件。