我正在群集上运行matlab。当我从群集上的交互式matlab会话运行我的.m脚本时,我的结果是可重现的。但是当我从qsub命令运行相同的脚本时,作为阵列工作的一部分,远离我的注视,我得到了可信但不可复制的结果。 .m文件完全相同,包括将结果保存为.mat文件。
任何人都知道为什么以一种方式运行脚本可以获得可重现的结果,并以另一种方式运行它们变得不可重现?
这只是一个重复性问题,还是表明结果不准确?
%%%%% 感谢spuder提供了有用的答案。万一有人偶然发现这个并且感兴趣,这里有一些进一步的信息。 如果在Matlab作业中使用多个线程,则可能会导致从其他作业中窃取资源,从而对结果造成严重破坏。所以你有两个选择: 1.选择对节点的独占访问权限。我正在使用的集群当前不允许并行阵列作业,所以这样做对我来说非常浪费 - 我占用了整个节点但是在串行中使用它。 2.让matlab在singleCompThread上运行。这可能会使您的脚本需要更长的时间才能完成,但它可以更快地通过队列获得作业。
答案 0 :(得分:1)
有很多变数在起作用。排除网络性能和负载等瞬态问题有两种可能的解释:
当您使用qsub运行交互式作业时,您将被分配一组不同的节点。
我见过一些网站为运行交互式作业的节点分配“独占”策略,并向运行排队“qsub”作业的节点“共享”。如果是这种情况,那么您几乎总能在独占节点上看到更好的性能。
另一个答案可能是交互式作业被分配给网络拥塞较少的节点。
此外,如果您正在请求多个节点,并且您碰巧落在遍历多个跃点的节点上,那么您可能会看到显着的网络速度下降。解决方案是集群管理员设置节点集。
您是否正在使用多个节点进行工作?你是如何申请资源的?