총계를 계산하고 합계의 최소값을 찾아야합니다. 순차적으로 처리 할 수 있지만 mpi를 사용하여 병렬화하는 데 어려움을 겪고 있습니다. 직렬, 나는 특정 금액을 계산하고 그래서 최소를 찾습니다하지 포함병렬 처리에 문제가있는 경우
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
.
.
.
x = (size)/numprocs;
low = myid * x;
high = low + x;
for(i =low; i < high; i++){
for(j = low; j < high; j++){
for(k = low; k < high; k+=gap){
for(m = low; m < high; m+=gap){
c1 = calculation1(i,j,k,m);
if(c1 > cutoff){
sum += calculation2(modifier1[k][m], modifier2[k][m]);
}
}
}
MPI_Reduce(&sum, &result, 1, MPI_FLOAT, MPI_SUM, 0, MPI_COMM_WORLD);
sum = 0;
}
}
MPI_Reduce(&result, &minimum, 1, MPI_FLOAT, MPI_MIN, 0, MPI_COMM_WORLD);
if(0 == myid)
printf("The min is: %f", minimum);
MPI_Finalize();
내가 해봤 다른 변화 : 이것은 현재 MPI를 사용하여 병렬 버전이 무엇
for(i = 0; i < size; i++){
for(j = 0; j < size; j++){
for(k = 0; k < size; k+=gap){
for(m = 0; m < size; m+=gap){
c1 = calculation1(i,j,k,m);
if(c1 > cutoff){
sum += calculation2(modifier1[k][m], modifier2[k][m]);
}
}
}
if(sum < min){
min = sum;
}
sum = 0;
}
}
MPI_Min 인수와 함께 MPI_Reduce를 사용하고 최소한 내 자신의 메서드를 사용하여 직렬 버전과 같은 대답을 얻지는 못합니다. 내 잘못 행동이 여기에있는 것에 대한 통찰력은 인정 될 것입니다.