diff --git a/gpucublas/compute/CMakeLists.txt b/gpucublas/compute/CMakeLists.txt index 1691581e744da88cf6cc0e631937e2bf94f7ef29..5f2987d984f4953d479665b25b494c1d2cf6a213 100644 --- a/gpucublas/compute/CMakeLists.txt +++ b/gpucublas/compute/CMakeLists.txt @@ -69,196 +69,7 @@ else() endif() if (CUDAToolkit_FOUND) - set(CMAKE_CUDA_STANDARD 11) - - # Define the architectures (inspired from the MAGMA project) - set( CHAMELEON_CUDA_TARGETS "Kepler Maxwell Pascal Volta Ampere" CACHE STRING "CUDA architectures to compile for; one or more of Fermi, Kepler, Maxwell, Pascal, Volta, Turing, Ampere, Hopper, or valid sm_[0-9][0-9]" ) - - # NVCC options for the different cards - # sm_xx is binary, compute_xx is PTX for forward compatibility - # MIN_ARCH is the lowest requested version - - if(WIN32) - # Disable separable compilation on Windows because object linking list - # becomes too long when building multiple archs and MSVC throws errors - set(CUDA_SEPARABLE_COMPILATION OFF) - else() - set(CUDA_SEPARABLE_COMPILATION ON) - endif() - - set(__cuda_architectures) - - # Architectures by names - # ---------------------- - if (CHAMELEON_CUDA_TARGETS MATCHES Fermi) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_20" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Kepler) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_30 sm_35 sm_37" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Maxwell) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_50" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Pascal) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_60" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Volta) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_70" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Turing) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_75" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Ampere) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_80" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES Hopper) - set( CHAMELEON_CUDA_TARGETS "${CHAMELEON_CUDA_TARGETS} sm_90" ) - endif() - - # Architectures versions - # ---------------------- - if ( (CHAMELEON_CUDA_TARGETS MATCHES sm_20) AND (CUDA_VERSION VERSION_LESS "8.0") ) - if (NOT MIN_ARCH) - set( MIN_ARCH 200 ) - endif() - list(APPEND __cuda_architectures 20) - message( STATUS " compile for CUDA arch 2.0 (Fermi)" ) - endif() - - if ( (CHAMELEON_CUDA_TARGETS MATCHES sm_30) AND (CUDA_VERSION VERSION_LESS "10.0") ) - if (NOT MIN_ARCH) - set( MIN_ARCH 300 ) - endif() - list(APPEND __cuda_architectures 30) - message( STATUS " compile for CUDA arch 3.0 (Kepler)" ) - endif() - - if ( (CHAMELEON_CUDA_TARGETS MATCHES sm_35) AND (CUDA_VERSION VERSION_LESS "11.0") ) - if (NOT MIN_ARCH) - set( MIN_ARCH 300 ) - endif() - list(APPEND __cuda_architectures 35) - message( STATUS " compile for CUDA arch 3.5 (Kepler)" ) - endif() - - if ( (CHAMELEON_CUDA_TARGETS MATCHES sm_50) AND (CUDA_VERSION VERSION_LESS "11.0") ) - if (NOT MIN_ARCH) - set( MIN_ARCH 500 ) - endif() - list(APPEND __cuda_architectures 50) - message( STATUS " compile for CUDA arch 5.0 (Maxwell)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_52) - if (NOT MIN_ARCH) - set( MIN_ARCH 520 ) - endif() - list(APPEND __cuda_architectures 52) - message( STATUS " compile for CUDA arch 5.2 (Maxwell)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_53) - if (NOT MIN_ARCH) - set( MIN_ARCH 530 ) - endif() - list(APPEND __cuda_architectures 53) - message( STATUS " compile for CUDA arch 5.3 (Maxwell)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_60) - if (NOT MIN_ARCH) - set( MIN_ARCH 600 ) - endif() - list(APPEND __cuda_architectures 60) - message( STATUS " compile for CUDA arch 6.0 (Pascal)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_61) - if (NOT MIN_ARCH) - set( MIN_ARCH 610 ) - endif() - list(APPEND __cuda_architectures 61) - message( STATUS " compile for CUDA arch 6.1 (Pascal)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_62) - if (NOT MIN_ARCH) - set( MIN_ARCH 620 ) - endif() - list(APPEND __cuda_architectures 62) - message( STATUS " compile for CUDA arch 6.2 (Pascal)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_70) - if (NOT MIN_ARCH) - set( MIN_ARCH 700 ) - endif() - list(APPEND __cuda_architectures 70) - message( STATUS " compile for CUDA arch 7.0 (Volta)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_71) - if (NOT MIN_ARCH) - set( MIN_ARCH 710 ) - endif() - list(APPEND __cuda_architectures 71) - message( STATUS " compile for CUDA arch 7.1 (Volta)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_75) - if (NOT MIN_ARCH) - set( MIN_ARCH 750 ) - endif() - list(APPEND __cuda_architectures 75) - message( STATUS " compile for CUDA arch 7.5 (Turing)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_80) - if (NOT MIN_ARCH) - set( MIN_ARCH 800 ) - endif() - list(APPEND __cuda_architectures 80) - message( STATUS " compile for CUDA arch 8.0 (Ampere)" ) - endif() - - if (CHAMELEON_CUDA_TARGETS MATCHES sm_90) - if (NOT MIN_ARCH) - set( MIN_ARCH 900 ) - endif() - list(APPEND __cuda_architectures 90) - message( STATUS " compile for CUDA arch 9.0 (Hopper)" ) - endif() - - if (NOT MIN_ARCH) - message( FATAL_ERROR "CHAMELEON_CUDA_TARGETS must contain one or more of Fermi, Kepler, Maxwell, Pascal, Volta, Turing, Ampere, or valid sm_[0-9][0-9]" ) - endif() - - # Remove extra - # ------------ - if(CUDA_VERSION VERSION_GREATER_EQUAL "8.0") - list(REMOVE_ITEM __cuda_architectures "20" "21") - endif() - - if(CUDA_VERSION VERSION_GREATER_EQUAL "9.0") - list(REMOVE_ITEM __cuda_architectures "20" "21") - endif() - - if(CUDA_VERSION VERSION_GREATER_EQUAL "10.0") - list(REMOVE_ITEM __cuda_architectures "30" "32") - endif() - - if(CUDA_VERSION VERSION_GREATER_EQUAL "11.0") - list(REMOVE_ITEM __cuda_architectures "35" "50") - endif() - - set(CMAKE_CUDA_ARCHITECTURES "${__cuda_architectures}") + include(SetCMakeCudaArchitectures) set(ZSRC ${ZSRC}