我搜索了很多解釋,但我想我無法弄清楚我該如何做到這一點。我想要做這樣的事情: 使用主處理器,我創建了一個動態二維數組。然後我想;MPI向其他處理器廣播動態2D陣列
1-將此數組發送到其他處理器。並且每個處理器打印這個二維數組。012-2-將此數組的一部分發送給其他人。並且每個處理器將其部件打印到屏幕上。
例如;我有2D陣列11 * 11和4個處理器。等級0是主人。其他人是奴隸。對於第一種情況,我想將所有數組發送到1級,2級和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.
}
}
}
但如果我這樣做,我不能初始化數組中的每個成員。 Inner for循環不起作用。我找不到解決問題的辦法。
而對於我的第二個問題,我跟着這個鏈接sending blocks of 2D array in C using MPI。我想我需要改變if(從)的內部。我應該爲每個從處理器創建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));
}
}
}
}
什麼是您確切的編譯器錯誤信息? –