gpt4 book ai didi

c - MPI 向其他处理器广播动态二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:57 25 4
gpt4 key购买 nike

我已经搜索了很多解释,但我想我无法弄清楚我该如何处理这种情况。我想做这样的事情:使用主处理器,我正在创建一个动态二维数组。那我想;

1- 将这个数组发送给其他处理器。每个处理器打印这个二维数组 2- 将此数组的一部分发送给其他人。每个处理器将它们的部分打印到屏幕上。

例如;我有 2D 阵列 11*11 和 4 个处理器。等级 0 是大师。其他人是奴隶。对于第一种情况,我想将所有数组发送到 rank 1、rank 2 和 rank 3。对于第二种情况,我想将行共享给从属。 11/3 = 3。因此排名 1 占 3 行,排名 2 占 3 行,排名 3 占 5 行。

这是我的代码:

int processorID;  
int numberOfProcessors;


int main(int argc, char* argv[]){

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD ,&numberOfProcessors);
MPI_Comm_rank(MPI_COMM_WORLD ,&processorID);

double **array;

if(MASTER){
array = (double**) malloc(11*sizeof(double *));
for(i=0; i<11; i++){
array[i] = (double *) malloc(11*sizeof(double));
}

for(i=0; i<11; i++){
for(j=0; j<11; j++){
array[i][j] = i*j;
}

}
}
MPI_Bcast(array, 11*11, MPI_DOUBLE, 0, MPI_COMM_WORLD);
if(SLAVE){
for(i=0; i<11; i++){
for(j=0; j<11; j++){
printf("%f ", array[i][j]);
}

}
}

MPI_Finalize();
return 0;
}

根据这些链接; MPI_Bcast a dynamic 2d array ;我需要将我的数组创建为;

if (MASTER){

array = (double**) malloc(121*sizeof(double))

for(i=0; i<11; i++){
for(j=0; j<11; j++){
array[i][j] = i*j; // this is not working.
}
}
}

但如果我这样做,我就无法初始化数组中的每个成员。内部 for 循环不起作用。我找不到任何解决方法。

对于我的第二个问题,我点击了此链接 sending blocks of 2D array in C using MPI .我想我需要改变 if(SLAVE) 的内部。我应该为每个从属处理器创建 2D 子数组。我需要使用 MPI_Scatterv。但是完全看不懂。

int main() {

...
...

MPI_Scatterv() // what must be here?
if(SLAVE){
if(processorID = numberOfProcessor-1){
subArray = (double**) malloc(5*sizeof(double *)); // beacuse number of row for last processor is 5
for(i=0; i<11; i++){
array[i] = (double *) malloc(11*sizeof(double));
}
}
else {
subArray = (double**) malloc(3*sizeof(double *));
for(i=0; i<11; i++){
array[i] = (double *) malloc(11*sizeof(double));
}
}
}
}

最佳答案

C 并没有真正的多维数组。我建议将您的值存储在常规的一维缓冲区中,然后根据一维值计算正确的索引。像这样:

double* data = (double*)malloc(sizeof(double)*11*11);

// Now, to access data[i][j], simply do:
data[j + i*11] = ...; // this "maps" 2D indices into 1D

这将使您免除分层 malloc 的所有麻烦,并且可以轻松将其传递给 MPI API。

关于c - MPI 向其他处理器广播动态二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com