【发布时间】:2017-01-18 18:21:17
【问题描述】:
我想使用来自main 的 mpi 运行一些功能,但我不知道应该如何。它看起来像:
#define MAXSIZE 100
int main (int argc, char **argv) {
int i;
float matrixA[MAXSIZE][MAXSIZE], matrixB[MAXSIZE][MAXSIZE], matrixC[MAXSIZE][MAXSIZE];
for(i=0;i<10;i++){
multiply(matrixA, matrixB, matrixC);
}
}
void multiply(float matrixA[MAXSIZE][MAXSIZE], float matrixB[MAXSIZE][MAXSIZE], float matrixC[MAXSIZE][MAXSIZE]) {
int rank; //process rank
int size; //number of processes
MPI_Init(&argc, &argv); //initialize MPI operations
MPI_Comm_rank(MPI_COMM_WORLD, &rank); //get the rank
MPI_Comm_size(MPI_COMM_WORLD, &size); //get number of processes
...someoperation...
MPI_Finalize();
}
我知道如何在不使用其他功能的情况下运行基本的 MPI,但我需要这种结构。
【问题讨论】:
-
MPI 是分布式内存系统,因此数据通常不会对所有处理器都可用,因此您决定您的逻辑应该是什么。通常,针对不同系统(OpenMP、mpi 和 cuda)编写不同的并行编程算法。因此,使用朴素算法加快速度几乎是不可能的,尤其是在 mpi 和 cuda 情况下。
-
为此,您必须将矩阵分散到其他处理器,并决定策略(最终数组的哪一部分将由哪个处理器计算),然后在一个处理器上收集这些计算数据。