java - 在java中的main之外初始化MPI
问题描述
我试图在 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];
}
}
解决方案
为什么不在您的主要方法中进行myrank
初始化。size
然后将它们作为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);
}
}
推荐阅读
- android - 如何改变不透明并使其变得强烈?
- keras - 在 Keras 中具有自定义加权 F1 分数的 NaN
- c++ - 从 GetProcAddress 获得的函数指针如果使用 stdlib 会导致程序崩溃
- sql - 从 XML 路径的结果中返回不匹配的值
- c# - C# EntityFramework .NETCore 2.0 多对多
- sql - 在 SQL 中使用外键从父表中删除行
- bigcommerce - 使用模板在本地开发主题
- python - Greenlet 未安装到 lib 目录
- amazon-web-services - 如何从 lambda@edge 访问云端起源?
- scheme - 带有盗窃 r7rs 的 Gensym 程序