我正在使用MPI在java中编写程序以在HPC上运行,但我有这种感觉因为open-mpi的工作方式而浪费资源。我实际上根本不确定它是如何工作的,但我认为mpirun -n 10 java myProgram.java
在不同的节点/核心/等上启动10倍myProgram。 (每次都取决于绑定)。这也意味着,就我对JVM的理解而言,10个JVM正在运行。
在使用我的程序进行一些测试运行后,使用默认设置(绑定到核心并在1个节点上尽可能地打包所有内容),我意识到内存使用非常差并且得出结论我将不得不做关于JVM的多样性的一些事情。我试图放松从核心到节点的绑定,但后来我没有使用所有可能的处理能力。我已经尝试使用多线程来解决这个问题,但是我读到了(somew)here这也不是最好的想法之一(但我仍然试图找到解决方法)。
所以我的问题是:
是否存在使用open-mpi链接每个节点只有一个JVM的方法?
替代:如何更好地利用内存?
提前致谢
答案 0 :(得分:0)
在评论中已经提到Hristo Iliev,混合方法解决了我的问题。为了避免使用MPI_THREAD_MULTIPLE
,我静态地分发了工作。然后可以使用mpirun --map-by ppr:1:node --bind-to board java <java-program>
运行该程序,以限制在一个节点上运行的进程数。