33# See file LICENSE for terms.
44#
55
6+ NVCC_CUDA_MIN_REQUIRED_MAJOR=10
7+ NVCC_CUDA_MIN_REQUIRED_MINOR=2
8+
9+ ARCH9_CODE="-gencode=arch=compute_70,code=sm_70"
10+ ARCH10_CODE="-gencode=arch=compute_75,code=sm_75"
11+ ARCH110_CODE="-gencode=arch=compute_80,code=sm_80"
12+ ARCH111_CODE="-gencode=arch=compute_86,code=sm_86"
13+ ARCH120_CODE="-gencode=arch=compute_90,code=sm_90"
14+ ARCH124_CODE="-gencode=arch=compute_89,code=sm_89"
15+ ARCH128_CODE="-gencode=arch=compute_100,code=sm_100 -gencode=arch=compute_120,code=sm_120"
16+ ARCH130_CODE="-gencode=arch=compute_110,code=sm_110"
17+
18+
19+ ARCH9_PTX="-gencode=arch=compute_70,code=compute_70"
20+ ARCH10_PTX=""
21+ ARCH110_PTX="-gencode=arch=compute_80,code=compute_80"
22+ ARCH111_PTX="-gencode=arch=compute_86,code=compute_86"
23+ ARCH120_PTX="-gencode=arch=compute_90,code=compute_90"
24+ ARCH124_PTX="-gencode=arch=compute_90,code=compute_90"
25+ ARCH128_PTX="-gencode=arch=compute_120,code=compute_120"
26+ ARCH130_PTX="-gencode=arch=compute_120,code=compute_120"
27+
628# Define CUDA language
729AC_LANG_DEFINE([ CUDA] , [ cuda] , [ NVCC] , [ NVCC] , [ C++] , [
830 ac_ext=cu
@@ -13,11 +35,6 @@ AC_LANG_DEFINE([CUDA], [cuda], [NVCC], [NVCC], [C++], [
1335
1436# Define CUDA language compiler
1537AC_DEFUN ( [ AC_LANG_COMPILER(CUDA)] , [
16- AC_ARG_WITH ( [ nvcc-gencode] ,
17- [ AS_HELP_STRING ( [ --with-nvcc-gencode=(OPTS)] , [ Build for specific GPU architectures] ) ] ,
18- [ ] ,
19- [ with_nvcc_gencode="-gencode=arch=compute_80,code=sm_80"] )
20-
2138 AC_ARG_VAR ( [ NVCC] , [ nvcc compiler path] )
2239 AC_ARG_VAR ( [ NVCCFLAGS] , [ nvcc compiler flags] )
2340 BASE_NVCCFLAGS="$BASE_NVCCFLAGS -g $with_nvcc_gencode"
@@ -31,30 +48,69 @@ AC_DEFUN([AC_LANG_COMPILER(CUDA)], [
3148# Check for nvcc compiler support
3249AC_DEFUN ( [ UCX_CUDA_CHECK_NVCC] , [
3350 AS_IF ( [ test "x$NVCC" != "x"] , [
34- AC_MSG_CHECKING ( [ $NVCC needs explicit c++11 option] )
35- AC_LANG_PUSH ( [ CUDA] )
36- AC_COMPILE_IFELSE ( [ AC_LANG_SOURCE ( [ [
37- #if __cplusplus < 201103L
38- #error missing C++11
39- #endif
40- ] ] ) ] ,
41- [ AC_MSG_RESULT ( [ no] ) ] ,
42- [ AC_MSG_RESULT ( [ yes] )
43- BASE_NVCCFLAGS="$BASE_NVCCFLAGS -std=c++11"] )
44- AC_LANG_POP
45-
46- AC_MSG_CHECKING ( [ $NVCC can compile] )
47- AC_LANG_PUSH ( [ CUDA] )
48- AC_COMPILE_IFELSE ( [ AC_LANG_SOURCE ( [ [
49- #include <cuda_runtime.h>
50- __global__ void my_kernel(void) {}
51- int main(void) { my_kernel<<<1, 1>>>(); return 0; }
52- ] ] ) ] ,
53- [ AC_MSG_RESULT ( [ yes] ) ] ,
54- [ AC_MSG_RESULT ( [ no] )
55- NVCC=""] )
56- AC_LANG_POP
57- ] )
51+ CUDA_MAJOR_VERSION=`$NVCC --version | grep release | sed 's/.*release //' | sed 's/\,.*//' | cut -d "." -f 1`
52+ CUDA_MINOR_VERSION=`$NVCC --version | grep release | sed 's/.*release //' | sed 's/\,.*//' | cut -d "." -f 2`
53+ AC_MSG_RESULT ( [ Detected CUDA version: $CUDA_MAJOR_VERSION.$CUDA_MINOR_VERSION] )
54+ AS_IF ( [ test $CUDA_MAJOR_VERSION -lt $NVCC_CUDA_MIN_REQUIRED_MAJOR -o \( $CUDA_MAJOR_VERSION -eq $NVCC_CUDA_MIN_REQUIRED_MAJOR -a $CUDA_MINOR_VERSION -lt $NVCC_CUDA_MIN_REQUIRED_MINOR \)] ,
55+ [ AC_MSG_WARN ( [ Minimum required CUDA version for device code: $NVCC_CUDA_MIN_REQUIRED_MAJOR.$NVCC_CUDA_MIN_REQUIRED_MINOR] )
56+ NVCC=""
57+ ] )
58+
59+ AS_IF ( [ test "x$NVCC" != "x"] , [
60+ AC_ARG_WITH ( [ nvcc-gencode] ,
61+ [ AS_HELP_STRING ( [ --with-nvcc-gencode=(OPTS)] , [ Build for specific GPU architectures] ) ] ,
62+ [ ] ,
63+ [ with_nvcc_gencode=default] )
64+
65+ AS_IF ( [ test "x$with_nvcc_gencode" = "xdefault"] ,
66+ [ AS_CASE ( [ $CUDA_MAJOR_VERSION] ,
67+ [ 13] ,
68+ [ # offline compilation support for architectures before '<compute/sm/lto>_75' is discontinued
69+ NVCC_ARCH="${ARCH10_CODE} ${ARCH110_CODE} ${ARCH111_CODE} ${ARCH120_CODE} ${ARCH124_CODE} ${ARCH128_CODE} ${ARCH130_CODE} ${ARCH130_PTX}"] ,
70+ [ 12] ,
71+ [ AS_CASE ( [ $CUDA_MINOR_VERSION] ,
72+ [ 0|1|2|3] ,
73+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH10_CODE} ${ARCH110_CODE} ${ARCH111_CODE} ${ARCH120_CODE} ${ARCH120_PTX}"] ,
74+ [ 4|5|6|7] ,
75+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH10_CODE} ${ARCH110_CODE} ${ARCH111_CODE} ${ARCH120_CODE} ${ARCH124_CODE} ${ARCH124_PTX}"] ,
76+ [ *] ,
77+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH10_CODE} ${ARCH110_CODE} ${ARCH111_CODE} ${ARCH120_CODE} ${ARCH124_CODE} ${ARCH128_CODE} ${ARCH128_PTX}"] ) ] ,
78+
79+ [ 11] ,
80+ [ AS_CASE ( [ $CUDA_MINOR_VERSION] ,
81+ [ 0] ,
82+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH10_CODE} ${ARCH110_CODE} ${ARCH110_PTX}"] ,
83+ [ *] ,
84+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH10_CODE} ${ARCH110_CODE} ${ARCH111_CODE} ${ARCH111_PTX}"] ) ] ,
85+ [ *] ,
86+ [ NVCC_ARCH="${ARCH9_CODE} ${ARCH9_PTX}"] ) ] ,
87+ [ NVCC_ARCH="$with_nvcc_gencode"] )
88+ BASE_NVCCFLAGS="$BASE_NVCCFLAGS $NVCC_ARCH"
89+ AC_MSG_CHECKING ( [ $NVCC needs explicit c++11 option] )
90+ AC_LANG_PUSH ( [ CUDA] )
91+ AC_COMPILE_IFELSE ( [ AC_LANG_SOURCE ( [ [
92+ #if __cplusplus < 201103L
93+ #error missing C++11
94+ #endif
95+ ] ] ) ] ,
96+ [ AC_MSG_RESULT ( [ no] ) ] ,
97+ [ AC_MSG_RESULT ( [ yes] )
98+ BASE_NVCCFLAGS="$BASE_NVCCFLAGS -std=c++11"] )
99+ AC_LANG_POP
100+
101+ AC_MSG_CHECKING ( [ $NVCC can compile] )
102+ AC_LANG_PUSH ( [ CUDA] )
103+ AC_COMPILE_IFELSE ( [ AC_LANG_SOURCE ( [ [
104+ #include <cuda_runtime.h>
105+ __global__ void my_kernel(void) {}
106+ int main(void) { my_kernel<<<1, 1>>>(); return 0; }
107+ ] ] ) ] ,
108+ [ AC_MSG_RESULT ( [ yes] ) ] ,
109+ [ AC_MSG_RESULT ( [ no] )
110+ NVCC=""] )
111+ AC_LANG_POP
112+ ] )
113+ ] )
58114
59115 AM_CONDITIONAL([ HAVE_NVCC] , [ test "x$NVCC" != x] )
60116] )
0 commit comments