LadaF / PoisFFT

Free parallel fast Poisson solver. Requires FFTW3 and optionally PFFT.
Other
55 stars 18 forks source link

Some tests failed when with OpenMP #3

Closed jacobmogic closed 7 years ago

jacobmogic commented 8 years ago

Compiled the library using

scons comp=intel openmp=yes

then the tests

scons comp=intel openmp=yes test

And these tests failed

$ ./c_testpoisson 
FAIL, residuum 2.815387

$ ./cc_testpoisson 
FAIL, residuum2.81539

$ ./testpoisson
 ----
 3D  |Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular|
 Spectral FAIL
 Spectral residuum:  0.141491213006055     
 FD2 FAIL
 Finite difference 2 residuum:   1.92554165807776     

 ----
 3D  |Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|
 Spectral FAIL
 Spectral residuum:  0.132820078333749     
 FD2 FAIL
 Finite difference 2 residuum:   1.95833611599937     

 ----
 3D  |Neumann regular|Neumann regular|Neumann regular|Neumann regular|Neumann regular|Neumann regular|
 FD2 FAIL
 Finite difference 2 residuum:   2.52419027322218     

 ----
 3D  |Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered|
 FD2 FAIL
 Finite difference 2 residuum:   2.48632335787074  

Other tests in testpoisson were passed.

Recompiled the tests, but not the library, without OpenMP

scons comp=intel openmp=no test

And then all tests were passed, for all three interfaces.

LadaF commented 8 years ago

Thank you, I will have a look. Dne 28. 5. 2016 9:08 napsal uživatel "Praxist" notifications@github.com:

Compiled the library using

scons comp=intel openmp=yes

then the tests

scons comp=intel openmp=yes test

And these tests failed

$ ./c_testpoisson FAIL, residuum 2.815387

$ ./cc_testpoisson FAIL, residuum2.81539

$ ./testpoisson


3D |Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular|Dirichlet regular| Spectral FAIL Spectral residuum: 0.141491213006055 FD2 FAIL Finite difference 2 residuum: 1.92554165807776


3D |Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered|Dirichlet staggered| Spectral FAIL Spectral residuum: 0.132820078333749 FD2 FAIL Finite difference 2 residuum: 1.95833611599937


3D |Neumann regular|Neumann regular|Neumann regular|Neumann regular|Neumann regular|Neumann regular| FD2 FAIL Finite difference 2 residuum: 2.52419027322218


3D |Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered|Neumann staggered| FD2 FAIL Finite difference 2 residuum: 2.48632335787074

Other tests in testpoisson were passed.

Recompiled the tests, but not the library, without OpenMP

scons comp=intel openmp=no test

And then all tests were passed, for all three interfaces.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/LadaF/PoisFFT/issues/3, or mute the thread https://github.com/notifications/unsubscribe/AAskEZhXajw6Eiqy51010zLapqIowXYkks5qF_gMgaJpZM4IpBiy .

LadaF commented 8 years ago

Could you report the compiler version you use?

jacobmogic commented 8 years ago
$ ifort -v
ifort version 16.0.2

I tried gcc with OpenMP just now. And it worked. So I guess it is a compiler problem.

LadaF commented 8 years ago

There was a serious bug in Intel v. 15 which prevented even a successful compilation. I will try to have a look with v. 16, but it can be again a compiler bug. There are other OpenMP bugs in Intel compilers and they don't seem to be interested in fixing them https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/509671

jacobmogic commented 8 years ago

I see. I as well encountered some strange behaviors before using Intel OpenMP. Thanks.

LadaF commented 8 years ago

I suspect it is a clash of OpenMP in the Intel compiler and GCC OpenMP used in your FFTW3 library. You may try to use FFTW compiled for Intel compilers and see. When the program is run with OMP_NUM_THREADS=1 the result is correct.

jacobmogic commented 8 years ago

No luck. make check for FFTW3 ran successfully. But PoisFFT tests still failed. However, I don't think I really need OpenMP feature for now. In my case, there are many independent poisson equations. It should be more efficient distributing them among cores than solving them one by one, right?

LadaF commented 8 years ago

I believe the point is in the incompatibility between FFTW compiled by GCC and PoisFFT compiled by Intel. If you have a problem and your FFTW is compiled with Intel, please report it.

Yes, I think if you have multiple transforms it is better to distribute them. You should be able to re-use a common PoisFFT object. Pass nthreads=1 to be sure.