GOMC-WSU / GOMC

GOMC - GPU Optimized Monte Carlo is a parallel molecular simulation code designed for high-performance simulation of large systems
https://gomc-wsu.org
MIT License
75 stars 36 forks source link

Free Energy branch doesn't compile with Ubuntu 'gcc'. Requires Intel Compiler #140

Closed GregorySchwing closed 4 years ago

GregorySchwing commented 5 years ago

Describe the bug Free Energy branch doesn't build on gcc gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11) It does build with icc icc version 19.0.4.227 (gcc version 5.4.0 compatibility)

Expected behavior Build on gcc or add a REQUIRE(icc) to CMakeLists.txt

Please complete the following information:

Compiler feedback attached. errors.txt

GregorySchwing commented 5 years ago

Adding these lines immediately previous to "cmake .." in 'metamake.sh' will accomplish this, and it will prevent further loss of time when people try to compile it without Intel compiler.

if [[ $ICC_PATH = "" ]] then echo "Intel compiler is required https://software.intel.com/en-us/parallel-studio-xe/choose-download/" exit 1; fi

jpotoff commented 5 years ago

Adding these lines immediately previous to "cmake .." in 'metamake.sh' will accomplish this, and it will prevent further loss of time when people try to compile it without Intel compiler. if [[ $ICC_PATH = "" ]] then echo "Intel compiler is required https://software.intel.com/en-us/parallel-studio-xe/choose-download/" exit 1; fi

That will work as a temporary fix, but users do have a reasonable expectation that codes will compile with gcc. We should figure out what the issue is with gcc and resolve it, if possible.

msoroush commented 5 years ago

@go2432 @jpotoff @YounesN FreeEnergy branch has Multiparticle feature as well. In Multiparticle we use reduction operation on array for OpenMP parallelization. Older version of OpenMP does not support it but, OpenMP version 4.5 and newer supports it.

https://www.openmp.org/resources/openmp-compilers-tools/ From GCC 6.1, OpenMP 4.5 is fully supported for C and C++. From Intel version 17.0, 18.0, and 19.0, OpenMP 4.5 is supported for C/C++/Fortran .

The solution is to check OpenMP version either for GCC or Intel. If the version was older than 4.5, we should warn the user and disable the OpenMP flag.

GregorySchwing commented 4 years ago

@msoroush Just to follow up on this, Grid has by default gcc 7.3, GNU 4.8.5, and OpenMP 3.1. The way to compile on grid is to swap gnu7 for intel/2018. It is notable that intel/2019 won't compile on grid, but this isn't because of our code, but some security restrictions that university-level supercomputers pretty commonly implement. This should information should be included in the manual, especially since we recommend the intel compiler.

msoroush commented 4 years ago

@msoroush Just to follow up on this, Grid has by default gcc 7.3, GNU 4.8.5, and OpenMP 3.1. The way to compile on grid is to swap gnu7 for intel/2018. It is notable that intel/2019 won't compile on grid, but this isn't because of our code, but some security restrictions that university-level supercomputers pretty commonly implement. This should information should be included in the manual, especially since we recommend the intel compiler.

What security restriction? I used to compile with intel/2019. In manual we should just include the minimum requirement that is needed to compile the code for OpenMP or MPI.

GregorySchwing commented 4 years ago

@msoroush Just to follow up on this, Grid has by default gcc 7.3, GNU 4.8.5, and OpenMP 3.1. The way to compile on grid is to swap gnu7 for intel/2018. It is notable that intel/2019 won't compile on grid, but this isn't because of our code, but some security restrictions that university-level supercomputers pretty commonly implement. This should information should be included in the manual, especially since we recommend the intel compiler.

What security restriction? I used to compile with intel/2019. In manual we should just include the minimum requirement that is needed to compile the code for OpenMP or MPI.

It works now. It wasn't working at some point (it may have been when I was working on an openMP version of PT as opposed to MPI), and I found a page from some other university's grid stating the compiler error I was getting was due to a restriction they place for security purposes. tl;dr - I'm wrong, it works now.