:Mpi recv : 신호 분할 오류를 사용하려고하면 오류가 발생합니다.
mpi 프로그램과 관련하여 불안한 질문이 있습니다. 아이디어는 다음과 같습니다 : 각 프로세스 (슬레이브)가 만델 브로 프랙털을 계산하기 위해 마스터에게 데이터를 보냅니다.
먼저, 각 슬레이브는 포인트와 작업자를 보냈습니다. 그 다음 그들은 선을 보내었다.
하지만 이제는 블록 줄을 보내려고합니다. (5 행, 하위 행을 가정 해 봅시다).
제 아이디어는이 다섯 줄을 한 줄로 만드는 것입니다. 마스터는 첫 번째 "새로운"행을 받지만 다른 행은 O_o가 아닙니다. 나는 방해 받았다. 신호 세그먼트 오류 신호 코드 : 내가 다른 사람 (> 1)에 대한 수신
ADRESS
에 실패 ADRESS이 매핑되지 도와주세요! 장시간이기 때문에, i'have는 :(
시 찾고 : 내가
//the whole table to be used in a master
//int table[NX*NY];
//int count =0;
if (rank == 0) {
int res;
int line[MAXY+MAXY+1];
int block[5*(MAXY+MAXY+1)];
int count = 0;
/* Begin User Program - the master */
//MPI_Recv(&line, MAXY+MAXY+1, MPI_INT,MPI_ANY_SOURCE, DATATAG, MPI_COMM_WORLD, &status);
MPI_Recv(&block, 5*(MAXY+MAXY+1), MPI_INT,MPI_ANY_SOURCE, DATATAG, MPI_COMM_WORLD, &status);
printf("sizeof of datablock received is = %d \n",sizeof(block)/sizeof(block[0]));
recvd = status.MPI_SOURCE;
printf("i have received blockdata from %d \n",recvd);
/* remplissage du case */
for(i = -MAXX; i <= MAXX; i++) {
for(j = -MAXY; j <= MAXY; j++) {
cases[i + MAXX][j + MAXY] = block[count%(MAXY+MAXY+1)];
//printf("j'ai fait un bloc[count], pas credible\n");
count++;
}
}
dump_ppm("mandel.ppm", cases);
printf("Fini.\n");
}
else {
/* On est l'un des fils */
/* for the block;let's suppose each son send 5 rows*/
double x, y;
int i, j, res, rc, rank,count;
//int line[MAXY + MAXY + 1];
int block[5*(MAXY+MAXY+1)];
count = 0;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
for(i = -MAXX; i <= MAXX; i++) {
for(j = -MAXY; j <= MAXY; j++) {
x = 2 * i/(double)MAXX;
y = 1.5 * j/(double)MAXY;
res = mandel(x, y);
//line[j+MAXY] = res;
block[count] =res;
if (count % (5*(MAXY+MAXY+1)) == 0){ //we send each five rows
MPI_Send(&block,5*(MAXY+MAXY+1), MPI_INT, 0, DATATAG, MPI_COMM_WORLD);
printf("me slave %d, have sent datablock to master\n",rank);
printf("sizeof of datablock sent is = %d\n",sizeof(block)/sizeof(block[0]));
}
count++;
}
//MPI_Send(&line, MAXY+MAXY+1 , MPI_INT, 0, DATATAG, MPI_COMM_WORLD);
}
}
MPI_Finalize();
return 0;
}