【问题标题】:Initializing MPI outside of main in java在java中的main之外初始化MPI
【发布时间】:2020-01-05 02:16:36
【问题描述】:

我试图在 java 中创建一个分布式 MPI 类,它将为我做一些计算。不幸的是, MPI.Init 似乎需要主类中的 argv,argc。有没有办法在这个类中初始化 MPI?

public class distributed {

    public distributed(int mat[][],int n,int m) throws MPIException {

        MPI.Init(argv); // issue is here,i dont have "argv" to initialize with,causing null pointer exceptions in variables like "myrank"

        final int myrank = MPI.COMM_WORLD.Rank();
        final int size = MPI.COMM_WORLD.Size();

        final int rows = n;
        final int rowChunk = (rows+size-1)/size;

        final int startRow = myrank *rowChunk;
        int endRow = (myrank+1)*rowChunk;

        int[] newRow = new int[m];
           }
}

【问题讨论】:

    标签: java mpi mpj-express


    【解决方案1】:

    为什么不在 main 方法中初始化 myranksize。然后将它们作为Distributed 类构造函数的参数传递?

    public class Distributed {
    
        public Distributed(int mat[][],int n,int m, int myrank, int size) {
            // These two variables are now parameters of the constructor
            // final int myrank = MPI.COMM_WORLD.Rank();
            // final int size = MPI.COMM_WORLD.Size();
    
            final int rows = n;
            final int rowChunk = (rows+size-1)/size;
    
            final int startRow = myrank *rowChunk;
            int endRow = (myrank+1)*rowChunk;
    
            int[] newRow = new int[m];
        }
    
        public static void main (String [] args) {
            MPI.Init(args, args.length); 
            final int myrank = MPI.COMM_WORLD.Rank();
            final int size = MPI.COMM_WORLD.Size();
    
            Distributed d = new Distributed (..., myrank, size);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2020-11-17
      • 2015-03-18
      • 2012-08-25
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多