2 if [ -z "$REAL_NVCC" ]; then
3 echo "nvcc is not available"
4 elif [ -z "$REAL_CUOBJDUMP" ]; then
5 echo "cuobjdump is not available"
10 # Test code using only c++ (option --x c++). Faster than compiling cuda.
11 cat <<EOF > test_cpp.cu
17 for (int i = 0; i < NUM; ++i);
21 # Option files to modify the define.
29 # Test code using cuda.
30 cat <<EOF >test_cuda.cu
36 void add(int *a, int *b) {
44 add<<<NUM, 1>>>(NULL,NULL);
50 # Reference file testing was not successful due to different "fatbin" data.
51 # Another source of differences are the temporary files created by nvcc;
52 # that can be avoided by using the options "--keep --keep-dir ./keep". So
53 # instead of comparing the binary object files, we compare the dumps of
54 # "cuobjdump -all -elf -symbols -ptx -sass test1.o".
55 nvcc_opts_cpp="-Wno-deprecated-gpu-targets -c --x c++"
56 nvcc_opts_cuda="-Wno-deprecated-gpu-targets -c"
57 nvcc_opts_gpu1="--generate-code arch=compute_50,code=compute_50"
58 nvcc_opts_gpu2="--generate-code arch=compute_52,code=sm_52"
59 ccache_nvcc_cpp="$CCACHE $REAL_NVCC $nvcc_opts_cpp"
60 ccache_nvcc_cuda="$CCACHE $REAL_NVCC $nvcc_opts_cuda"
61 cuobjdump="$REAL_CUOBJDUMP -all -elf -symbols -ptx -sass"
63 # -------------------------------------------------------------------------
66 $REAL_NVCC $nvcc_opts_cpp -o reference_test1.o test_cpp.cu
69 $ccache_nvcc_cpp test_cpp.cu
70 expect_stat 'cache hit (preprocessed)' 0
71 expect_stat 'cache miss' 1
72 expect_stat 'files in cache' 1
73 expect_equal_files reference_test1.o test_cpp.o
75 $ccache_nvcc_cpp test_cpp.cu
76 expect_stat 'cache hit (preprocessed)' 1
77 expect_stat 'cache miss' 1
78 expect_stat 'files in cache' 1
79 expect_equal_files reference_test1.o test_cpp.o
81 # -------------------------------------------------------------------------
82 TEST "Different GPU architectures"
84 $REAL_NVCC $nvcc_opts_cuda -o reference_test1.o test_cuda.cu
85 $REAL_NVCC $nvcc_opts_cuda $nvcc_opts_gpu1 -o reference_test2.o test_cuda.cu
86 $REAL_NVCC $nvcc_opts_cuda $nvcc_opts_gpu2 -o reference_test3.o test_cuda.cu
87 $cuobjdump reference_test1.o > reference_test1.dump
88 $cuobjdump reference_test2.o > reference_test2.dump
89 $cuobjdump reference_test3.o > reference_test3.dump
90 expect_different_files reference_test1.dump reference_test2.dump
91 expect_different_files reference_test1.dump reference_test3.dump
92 expect_different_files reference_test2.dump reference_test3.dump
94 $ccache_nvcc_cuda test_cuda.cu
95 expect_stat 'cache hit (preprocessed)' 0
96 expect_stat 'cache miss' 1
97 expect_stat 'files in cache' 1
98 $cuobjdump test_cuda.o > test1.dump
99 expect_equal_files reference_test1.dump test1.dump
102 $ccache_nvcc_cuda $nvcc_opts_gpu1 test_cuda.cu
103 expect_stat 'cache hit (preprocessed)' 0
104 expect_stat 'cache miss' 2
105 expect_stat 'files in cache' 2
106 $cuobjdump test_cuda.o > test1.dump
107 expect_equal_files reference_test2.dump test1.dump
109 $ccache_nvcc_cuda $nvcc_opts_gpu1 test_cuda.cu
110 expect_stat 'cache hit (preprocessed)' 1
111 expect_stat 'cache miss' 2
112 expect_stat 'files in cache' 2
113 $cuobjdump test_cuda.o > test1.dump
114 expect_equal_files reference_test2.dump test1.dump
117 $ccache_nvcc_cuda $nvcc_opts_gpu2 test_cuda.cu
118 expect_stat 'cache hit (preprocessed)' 1
119 expect_stat 'cache miss' 3
120 expect_stat 'files in cache' 3
121 $cuobjdump test_cuda.o > test1.dump
122 expect_equal_files reference_test3.dump test1.dump
124 $ccache_nvcc_cuda $nvcc_opts_gpu2 test_cuda.cu
125 expect_stat 'cache hit (preprocessed)' 2
126 expect_stat 'cache miss' 3
127 expect_stat 'files in cache' 3
128 $cuobjdump test_cuda.o > test1.dump
129 expect_equal_files reference_test3.dump test1.dump
131 # -------------------------------------------------------------------------
132 TEST "Different defines"
134 $REAL_NVCC $nvcc_opts_cpp -o reference_test1.o test_cpp.cu
135 $REAL_NVCC $nvcc_opts_cpp -DNUM=10 -o reference_test2.o test_cpp.cu
136 expect_different_files reference_test1.o reference_test2.o
138 $ccache_nvcc_cpp test_cpp.cu
139 expect_stat 'cache hit (preprocessed)' 0
140 expect_stat 'cache miss' 1
141 expect_stat 'files in cache' 1
142 expect_equal_files reference_test1.o test_cpp.o
144 # Specified define, but unused. Can only be found by preprocessed mode.
145 $ccache_nvcc_cpp -DDUMMYENV=1 test_cpp.cu
146 expect_stat "cache hit (preprocessed)" 1
147 expect_stat 'cache miss' 1
148 expect_stat 'files in cache' 1
149 expect_equal_files reference_test1.o test_cpp.o
151 # Specified used define.
152 $ccache_nvcc_cpp -DNUM=10 test_cpp.cu
153 expect_stat "cache hit (preprocessed)" 1
154 expect_stat 'cache miss' 2
155 expect_stat 'files in cache' 2
156 expect_equal_files reference_test2.o test_cpp.o
158 $ccache_nvcc_cpp -DNUM=10 test_cpp.cu
159 expect_stat 'cache hit (preprocessed)' 2
160 expect_stat 'cache miss' 2
161 expect_stat 'files in cache' 2
162 expect_equal_files reference_test2.o test_cpp.o
164 # -------------------------------------------------------------------------
167 $REAL_NVCC $nvcc_opts_cpp -optf test1.optf -o reference_test1.o test_cpp.cu
168 $REAL_NVCC $nvcc_opts_cpp -optf test2.optf -o reference_test2.o test_cpp.cu
169 expect_different_files reference_test1.o reference_test2.o
171 $ccache_nvcc_cpp -optf test1.optf test_cpp.cu
172 expect_stat 'cache hit (preprocessed)' 0
173 expect_stat 'cache miss' 1
174 expect_stat 'files in cache' 1
175 expect_equal_files reference_test1.o test_cpp.o
177 $ccache_nvcc_cpp -optf test1.optf test_cpp.cu
178 expect_stat 'cache hit (preprocessed)' 1
179 expect_stat 'cache miss' 1
180 expect_stat 'files in cache' 1
181 expect_equal_files reference_test1.o test_cpp.o
183 $ccache_nvcc_cpp -optf test2.optf test_cpp.cu
184 expect_stat 'cache hit (preprocessed)' 1
185 expect_stat 'cache miss' 2
186 expect_stat 'files in cache' 2
187 expect_equal_files reference_test2.o test_cpp.o
189 $ccache_nvcc_cpp -optf test2.optf test_cpp.cu
190 expect_stat 'cache hit (preprocessed)' 2
191 expect_stat 'cache miss' 2
192 expect_stat 'files in cache' 2
193 expect_equal_files reference_test2.o test_cpp.o
195 # -------------------------------------------------------------------------
196 TEST "Option --compiler-bindir"
198 $REAL_NVCC $nvcc_opts_cpp --compiler-bindir $REAL_COMPILER_BIN \
199 -o reference_test1.o test_cpp.cu
202 $ccache_nvcc_cpp --compiler-bindir $REAL_COMPILER_BIN test_cpp.cu
203 expect_stat 'cache hit (preprocessed)' 0
204 expect_stat 'cache miss' 1
205 expect_stat 'files in cache' 1
206 expect_equal_files reference_test1.o test_cpp.o
208 $ccache_nvcc_cpp --compiler-bindir $REAL_COMPILER_BIN test_cpp.cu
209 expect_stat 'cache hit (preprocessed)' 1
210 expect_stat 'cache miss' 1
211 expect_stat 'files in cache' 1
212 expect_equal_files reference_test1.o test_cpp.o
214 # -------------------------------------------------------------------------
217 $REAL_NVCC $nvcc_opts_cpp -ccbin $REAL_COMPILER_BIN \
218 -o reference_test1.o test_cpp.cu
221 $ccache_nvcc_cpp -ccbin $REAL_COMPILER_BIN test_cpp.cu
222 expect_stat 'cache hit (preprocessed)' 0
223 expect_stat 'cache miss' 1
224 expect_stat 'files in cache' 1
225 expect_equal_files reference_test1.o test_cpp.o
227 $ccache_nvcc_cpp -ccbin $REAL_COMPILER_BIN test_cpp.cu
228 expect_stat 'cache hit (preprocessed)' 1
229 expect_stat 'cache miss' 1
230 expect_stat 'files in cache' 1
231 expect_equal_files reference_test1.o test_cpp.o
233 # -------------------------------------------------------------------------
234 TEST "Option --output-directory"
236 $REAL_NVCC $nvcc_opts_cpp --output-directory . \
237 -o reference_test1.o test_cpp.cu
240 $ccache_nvcc_cpp --output-directory . test_cpp.cu
241 expect_stat 'cache hit (preprocessed)' 0
242 expect_stat 'cache miss' 1
243 expect_stat 'files in cache' 1
244 expect_equal_files reference_test1.o test_cpp.o
246 $ccache_nvcc_cpp --output-directory . test_cpp.cu
247 expect_stat 'cache hit (preprocessed)' 1
248 expect_stat 'cache miss' 1
249 expect_stat 'files in cache' 1
250 expect_equal_files reference_test1.o test_cpp.o
252 # -------------------------------------------------------------------------
255 $REAL_NVCC $nvcc_opts_cpp -odir . -o reference_test1.o test_cpp.cu
258 $ccache_nvcc_cpp -odir . test_cpp.cu
259 expect_stat 'cache hit (preprocessed)' 0
260 expect_stat 'cache miss' 1
261 expect_stat 'files in cache' 1
262 expect_equal_files reference_test1.o test_cpp.o
264 $ccache_nvcc_cpp -odir . test_cpp.cu
265 expect_stat 'cache hit (preprocessed)' 1
266 expect_stat 'cache miss' 1
267 expect_stat 'files in cache' 1
268 expect_equal_files reference_test1.o test_cpp.o