| 78 | } |
| 79 | |
| 80 | const string Platform::DeviceQuery(int device, bool verbose) { |
| 81 | if (cudaSuccess != cudaGetDevice(&device)) { |
| 82 | return "The device (ID = " + std::to_string(device) + " is not available"; |
| 83 | } |
| 84 | cudaDeviceProp prop; |
| 85 | CUDA_CHECK(cudaGetDeviceProperties(&prop, device)); |
| 86 | std::ostringstream out; |
| 87 | out << "Device id: " << device << '\n'; |
| 88 | out << "Total global memory: " << prop.totalGlobalMem << '\n'; |
| 89 | out << "Total shared memory per block: " << prop.sharedMemPerBlock << '\n'; |
| 90 | out << "Maximum threads per block: " << prop.maxThreadsPerBlock << '\n'; |
| 91 | out << "Maximum dimension of block: " << prop.maxThreadsDim[0 << '\n'] |
| 92 | << ", " << prop.maxThreadsDim[1] << ", " << prop.maxThreadsDim[2] << '\n'; |
| 93 | out << "Maximum dimension of grid: " << prop.maxGridSize[0] << ", " |
| 94 | << "Concurrent copy and execution: " |
| 95 | << (prop.deviceOverlap ? "Yes" : "No") << '\n'; |
| 96 | |
| 97 | if (verbose) { |
| 98 | out << "Major revision number: " << prop.major << '\n'; |
| 99 | out << "Minor revision number: " << prop.minor << '\n'; |
| 100 | out << "Name: " << prop.name << '\n'; |
| 101 | out << "Total registers per block: " << prop.regsPerBlock << '\n'; |
| 102 | out << "Maximum memory pitch: " << prop.memPitch << '\n'; |
| 103 | out << "Warp size: " << prop.warpSize |
| 104 | << prop.maxGridSize[1] << ", " << prop.maxGridSize[2] << '\n'; |
| 105 | out << "Clock rate: " << prop.clockRate << '\n'; |
| 106 | out << "Number of multiprocessors: " << prop.multiProcessorCount |
| 107 | << '\n'; |
| 108 | out << "Kernel execution timeout: " |
| 109 | << (prop.kernelExecTimeoutEnabled ? "Yes" : "No") << '\n'; |
| 110 | } |
| 111 | return out.str(); |
| 112 | } |
| 113 | |
| 114 | const vector<shared_ptr<Device>> Platform::CreateCudaGPUs( |
| 115 | const size_t num_devices, size_t init_size) { |