Some tests failed when with OpenMP
Closed this issue · 8 comments
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.
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.48632335787074Other 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
#3, or mute the thread
https://github.com/notifications/unsubscribe/AAskEZhXajw6Eiqy51010zLapqIowXYkks5qF_gMgaJpZM4IpBiy
.
Could you report the compiler version you use?
$ 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.
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
I see. I as well encountered some strange behaviors before using Intel OpenMP. Thanks.
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.
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?
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.