Oscar Mojica
2017-01-16 13:28:05 UTC
Hello everybody
I'm having a problem with a parallel program written in fortran. I have a 3D array which is divided in two in the third dimension so thats two processes
perform some operations with a part of the cube, using a subroutine. Each process also has the complete cube. Before each process call the subroutine,
I compare its sub array with its corresponding part of the whole cube. These are the same. The subroutine simply performs point-to-point operations in a loop, i.e.
do k=k1,k2
do j=1,nhx
do it=1,nt
wave(it,j,k)= wave(it,j,k)*dt/(dx+dy)*(dhx+dhy)/(dx+dy)
end do
end do
enddo
where, wave is the 3D array and the other values are constants.
After leaving the subroutine I notice that there is a difference in the values calculated by process 1 compared to the values that I get if the whole cube is passed to the subroutine but that this only works on its part, i.e.
--- complete 2017-01-12 10:30:23.000000000 -0400
+++ half 2017-01-12 10:34:57.000000000 -0400
@@ -4132545,7 +4132545,7 @@
-2.5386049E-04
-2.9899486E-04
-3.4697619E-04
- -3.7867704E-04
+ -3.7867710E-04
0.0000000E+00
0.0000000E+00
0.0000000E+00
When I do this with more processes the same thing happens with all processes other than zero. I find it very strange. I am disabling the optimization when compiling.
In the end the results are visually the same, but not numerically. I am working with simple precision.
Any idea what may be going on? I do not know if this is related to MPI
Oscar Mojica
Geologist Ph.D. in Geophysics
SENAI CIMATEC Supercomputing Center
Lattes: http://lattes.cnpq.br/0796232840554652
I'm having a problem with a parallel program written in fortran. I have a 3D array which is divided in two in the third dimension so thats two processes
perform some operations with a part of the cube, using a subroutine. Each process also has the complete cube. Before each process call the subroutine,
I compare its sub array with its corresponding part of the whole cube. These are the same. The subroutine simply performs point-to-point operations in a loop, i.e.
do k=k1,k2
do j=1,nhx
do it=1,nt
wave(it,j,k)= wave(it,j,k)*dt/(dx+dy)*(dhx+dhy)/(dx+dy)
end do
end do
enddo
where, wave is the 3D array and the other values are constants.
After leaving the subroutine I notice that there is a difference in the values calculated by process 1 compared to the values that I get if the whole cube is passed to the subroutine but that this only works on its part, i.e.
--- complete 2017-01-12 10:30:23.000000000 -0400
+++ half 2017-01-12 10:34:57.000000000 -0400
@@ -4132545,7 +4132545,7 @@
-2.5386049E-04
-2.9899486E-04
-3.4697619E-04
- -3.7867704E-04
+ -3.7867710E-04
0.0000000E+00
0.0000000E+00
0.0000000E+00
When I do this with more processes the same thing happens with all processes other than zero. I find it very strange. I am disabling the optimization when compiling.
In the end the results are visually the same, but not numerically. I am working with simple precision.
Any idea what may be going on? I do not know if this is related to MPI
Oscar Mojica
Geologist Ph.D. in Geophysics
SENAI CIMATEC Supercomputing Center
Lattes: http://lattes.cnpq.br/0796232840554652