问题描述
所以,我在 Linux 集群上运行,有很多计算节点可供选择。我得到了节点的独占使用权。批量提交。我遇到了限制线程数的问题。我应该提到我有一个 parfor 循环。当我使用 -singleCompThread 选项启动 matlab 时,它似乎不起作用。
我提交到一个有 2 个内核的节点,使用了提到的单线程选项,当我检查提交的作业时,它开始以 32 个线程运行。一旦到达 parfor 循环,它就有超过 600 个线程。
我还想运行特定数量的多线程,而不是单个线程。所以,我使用函数 maxnumCompThreads(32);限制为 32 个线程。我把这个函数放在文件的开头,也放在 parfor 循环中。然后,我将作业提交给具有 32 个内核的节点。它使用了超过 32 个线程。
有什么指导吗?我不知道。
解决方法
您很可能看到 MATLAB 正在使用非计算线程。您可以尝试以 -nojvm
模式启动 MATLAB - 这将进一步减少启动的非计算线程的数量。不幸的是,该模式与 parfor
不兼容。另外,您使用的是哪个版本的 MATLAB? (旧版本曾经存在问题,会在更高核心数的机器中产生大量 JVM 垃圾收集线程)