Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Tests / CudaOnly / DeviceLTO / main.cu
1 #include <iostream>
2
3 #include "cuda.h"
4
5 #ifdef _WIN32
6 #  define IMPORT __declspec(dllimport)
7 #else
8 #  define IMPORT
9 #endif
10
11 IMPORT int launch_kernel(int x);
12
13 int choose_cuda_device()
14 {
15   int nDevices = 0;
16   cudaError_t err = cudaGetDeviceCount(&nDevices);
17   if (err != cudaSuccess) {
18     std::cerr << "Failed to retrieve the number of CUDA enabled devices"
19               << std::endl;
20     return 1;
21   }
22   for (int i = 0; i < nDevices; ++i) {
23     cudaDeviceProp prop;
24     cudaError_t err = cudaGetDeviceProperties(&prop, i);
25     if (err != cudaSuccess) {
26       std::cerr << "Could not retrieve properties from CUDA device " << i
27                 << std::endl;
28       return 1;
29     }
30     std::cout << "prop.major: " << prop.major << std::endl;
31     err = cudaSetDevice(i);
32     if (err != cudaSuccess) {
33       std::cout << "Could not select CUDA device " << i << std::endl;
34     } else {
35       return 0;
36     }
37   }
38
39   std::cout << "Could not find a CUDA enabled card" << std::endl;
40
41   return 1;
42 }
43
44 int main()
45 {
46   int ret = choose_cuda_device();
47   if (ret) {
48     return 0;
49   }
50
51   cudaError_t err;
52   launch_kernel(1);
53   err = cudaGetLastError();
54   if (err != cudaSuccess) {
55     std::cerr << "launch_kernel: kernel launch should have passed.\n "
56                  "Error message: "
57               << cudaGetErrorString(err) << std::endl;
58     return 1;
59   }
60
61   return 0;
62 }