Skip to content

Commit

Permalink
Enable CUDA detection in CMake script
Browse files Browse the repository at this point in the history
  • Loading branch information
suemni authored and nicolasbock committed Apr 5, 2018
1 parent 1e6a699 commit a6ab342
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 20 deletions.
38 changes: 37 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,43 @@ if(BML_MPI)
add_definitions(-DDO_MPI)
endif()

set(BML_CUDA FALSE CACHE BOOL "Whether to compile with CUDA support")
option(BML_GPU "Compile with OpenMP GPU Offload support" FALSE)
if(BML_GPU)
message(STATUS "Will build with OpenMP GPU Offload support")
add_definitions(-DDO_GPU)

find_package(OpenMP 4.5 REQUIRED)

include(CheckCXXCompilerFlag)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(OpenMP_CXX_OFFLOAD_FLAG "-foffload='-lm'")
elseif(MAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(OpenMP_CXX_OFFLOAD_FLAG "-foffload='-lm'")
elseif(MAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(OpenMP_CXX_OFFLOAD_FLAG "-fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
endif()

check_cxx_compiler_flag("${OpenMP_CXX_OFFLOAD_FLAG}" OFFLOAD_CXX_FOUND)
if(OFFLOAD_CXX_FOUND)
message(STATUS "Found GPU offload flags")
set(OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS} ${OpenMP_CXX_OFFLOAD_FLAG}")
set(OpenMP_C_FLAGS "${OpenMP_C_FLAGS} ${OpenMP_CXX_OFFLOAD_FLAG}")
set(OpenMP_Fortran_FLAGS "${OpenMP_Fortran_FLAGS} ${OpenMP_CXX_OFFLOAD_FLAG}")
endif()

# list(APPEND LANGUAGES CUDA)

set(CUDA_FIND_REQUIRED TRUE)
include(FindCUDA)

set(GPU_ARCH "sm_60" CACHE STRING "LAMMPS GPU CUDA SM architecture")
set_property(CACHE GPU_ARCH PROPERTY STRINGS sm_30 sm_50 sm_60 sm_70)

message("CUDA libraries: ${CUDA_LIBRARIES}")
message("CUDA CUBLAS libraries: ${CUDA_CUBLAS_LIBRARIES}")
endif()

option(BML_CUDA "Whether to compile with CUDA support" FALSE)
if(BML_CUDA)
include(FindCUDA)
endif()
Expand Down
47 changes: 28 additions & 19 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,28 @@ step and the build:
EOF
set_defaults
echo "CMAKE_BUILD_TYPE {Release,Debug} (default is ${CMAKE_BUILD_TYPE})"
echo "BUILD_SHARED_LIBS Build a shared library (default is ${BUILD_SHARED_LIBS})"
echo "CC Path to C compiler (default is ${CC})"
echo "CXX Path to C++ compiler (default is ${CXX})"
echo "FC Path to Fortran compiler (default is ${FC})"
echo "BML_OPENMP {yes,no} (default is ${BML_OPENMP})"
echo "BML_MPI {yes,no} (default is ${BML_MPI})"
echo "BML_TESTING {yes,no} (default is ${BML_TESTING})"
echo "BUILD_DIR Path to build dir (default is ${BUILD_DIR})"
echo "BLAS_VENDOR {,Intel,MKL,ACML,GNU,Auto} (default is '${BLAS_VENDOR}')"
echo "BML_INTERNAL_BLAS {yes,no} (default is ${BML_INTERNAL_BLAS})"
echo "PARALLEL_TEST_JOBS The number of test jobs (default is ${PARALLEL_TEST_JOBS})"
echo "INSTALL_DIR Path to install dir (default is ${INSTALL_DIR})"
echo "CMAKE_C_FLAGS Set C compiler flags (default is '${CMAKE_C_FLAGS}')"
echo "CMAKE_CXX_FLAGS Set C++ compiler flags (default is '${CMAKE_CXX_FLAGS}')"
echo "CMAKE_Fortran_FLAGS Set Fortran compiler flags (default is '${CMAKE_Fortran_FLAGS}')"
echo "EXTRA_CFLAGS Extra C flags (default is '${EXTRA_CFLAGS}')"
echo "EXTRA_FFLAGS Extra fortran flags (default is '${EXTRA_FFLAGS}')"
echo "EXTRA_LINK_FLAGS Add extra link flags (default is '${EXTRA_LINK_FLAGS}')"
echo "CMAKE_BUILD_TYPE {Release,Debug} (default is ${CMAKE_BUILD_TYPE})"
echo "BUILD_SHARED_LIBS Build a shared library (default is ${BUILD_SHARED_LIBS})"
echo "CC Path to C compiler (default is ${CC})"
echo "CXX Path to C++ compiler (default is ${CXX})"
echo "FC Path to Fortran compiler (default is ${FC})"
echo "BML_OPENMP {yes,no} (default is ${BML_OPENMP})"
echo "BML_MPI {yes,no} (default is ${BML_MPI})"
echo "BML_TESTING {yes,no} (default is ${BML_TESTING})"
echo "BUILD_DIR Path to build dir (default is ${BUILD_DIR})"
echo "BLAS_VENDOR {,Intel,MKL,ACML,GNU,Auto} (default is '${BLAS_VENDOR}')"
echo "BML_INTERNAL_BLAS {yes,no} (default is ${BML_INTERNAL_BLAS})"
echo "PARALLEL_TEST_JOBS The number of test jobs (default is ${PARALLEL_TEST_JOBS})"
echo "INSTALL_DIR Path to install dir (default is ${INSTALL_DIR})"
echo "CMAKE_C_FLAGS Set C compiler flags (default is '${CMAKE_C_FLAGS}')"
echo "CMAKE_CXX_FLAGS Set C++ compiler flags (default is '${CMAKE_CXX_FLAGS}')"
echo "CMAKE_Fortran_FLAGS Set Fortran compiler flags (default is '${CMAKE_Fortran_FLAGS}')"
echo "EXTRA_CFLAGS Extra C flags (default is '${EXTRA_CFLAGS}')"
echo "EXTRA_FFLAGS Extra fortran flags (default is '${EXTRA_FFLAGS}')"
echo "EXTRA_LINK_FLAGS Add extra link flags (default is '${EXTRA_LINK_FLAGS}')"
echo "BML_GPU {yes,no} (default is ${BML_GPU})"
echo "GPU_ARCH GPU architecture (default is ${GPU_ARCH})"
echo "CUDA_TOOLKIT_ROOT_DIR Path to CUDA dir (default is ${CUDA_TOOLKIT_ROOT_DIR})"
}

set_defaults() {
Expand All @@ -79,6 +82,9 @@ set_defaults() {
: ${BML_TESTING:=yes}
: ${FORTRAN_FLAGS:=}
: ${EXTRA_LINK_FLAGS:=}
: ${BML_GPU:=no}
: ${GPU_ARCH:=}
: ${CUDA_TOOLKIT_ROOT_DIR:=}
}

die() {
Expand Down Expand Up @@ -142,6 +148,9 @@ configure() {
${EXTRA_FFLAGS:+-DEXTRA_FFLAGS="${EXTRA_FFLAGS}"} \
${EXTRA_LINK_FLAGS:+-DBML_LINK_FLAGS="${EXTRA_LINK_FLAGS}"} \
-DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \
-DBML_GPU="${BML_GPU}" \
-DGPU_ARCH="${GPU_ARCH}" \
-DCUDA_TOOLKIT_ROOT_DIR="${CUDA_TOOLKIT_ROOT_DIR}" \
| tee -a "${LOG_FILE}"
check_pipe_error
cd "${TOP_DIR}"
Expand Down
22 changes: 22 additions & 0 deletions makeBuild.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
rm -r build install

# No MPI, yes GPU
CC=gcc FC=gfortran \
BML_GPU=yes GPU_ARCH=sm_60 \
CUDA_TOOLKIT_ROOT_DIR=/projects/opt/centos7/cuda/9.0 \
BLAS_VENDOR=Intel CMAKE_BUILD_TYPE=Release \
BML_OPENMP=yes \
CMAKE_INSTALL_PREFIX=/home/smm/bml/bml/install \
./build.sh configure

# No MPI
#CC=gcc FC=gfortran BLAS_VENDOR=Intel CMAKE_BUILD_TYPE=Release BML_OPENMP=yes CMAKE_INSTALL_PREFIX=/home/smm/bml/bml/install ./build.sh configure

# With MPI Release
#CC=mpicc FC=mpif90 BLAS_VENDOR=Intel CMAKE_BUILD_TYPE=Release BML_OPENMP=yes BML_MPI=yes CMAKE_INSTALL_PREFIX=/home/smm/bml/bml/install ./build.sh configure

# With MPI Debug
#CC=mpicc FC=mpif90 BLAS_VENDOR=Intel CMAKE_BUILD_TYPE=Debug BML_OPENMP=yes BML_MPI=yes CMAKE_INSTALL_PREFIX=/home/smm/bml/bml/install ./build.sh configure

# With MPI Release setenv
#setenv CC mpicc;setenv FC mpif90;setenv BLAS_VENDOR Intel;setenv CMAKE_BUILD_Type Release;setenv BML_OPENMP yes;setenv BML_MPI yes;setenv CMAKE_INSTALL_PREFIX /usr/projects/infmodels/smm/qmd/bml/bml/install; setenv BML_TESTING yes; ./build.sh configure

0 comments on commit a6ab342

Please sign in to comment.