| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <stdio.h> |
| | #include <nvml.h> |
| |
|
| | static const char * convertToComputeModeString(nvmlComputeMode_t mode) |
| | { |
| | switch (mode) |
| | { |
| | case NVML_COMPUTEMODE_DEFAULT: |
| | return "Default"; |
| | case NVML_COMPUTEMODE_EXCLUSIVE_THREAD: |
| | return "Exclusive_Thread"; |
| | case NVML_COMPUTEMODE_PROHIBITED: |
| | return "Prohibited"; |
| | case NVML_COMPUTEMODE_EXCLUSIVE_PROCESS: |
| | return "Exclusive Process"; |
| | default: |
| | return "Unknown"; |
| | } |
| | } |
| |
|
| | int main(void) |
| | { |
| | nvmlReturn_t result; |
| | unsigned int device_count, i; |
| |
|
| | |
| | result = nvmlInit(); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to initialize NVML: %s\n", nvmlErrorString(result)); |
| |
|
| | printf("Press ENTER to continue...\n"); |
| | getchar(); |
| | return 1; |
| | } |
| |
|
| | result = nvmlDeviceGetCount(&device_count); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to query device count: %s\n", nvmlErrorString(result)); |
| | goto Error; |
| | } |
| | printf("Found %u device%s\n\n", device_count, device_count != 1 ? "s" : ""); |
| |
|
| | printf("Listing devices:\n"); |
| | for (i = 0; i < device_count; i++) |
| | { |
| | nvmlDevice_t device; |
| | char name[NVML_DEVICE_NAME_BUFFER_SIZE]; |
| | nvmlPciInfo_t pci; |
| | nvmlComputeMode_t compute_mode; |
| |
|
| | |
| | |
| | |
| | |
| | result = nvmlDeviceGetHandleByIndex(i, &device); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to get handle for device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| |
|
| | result = nvmlDeviceGetName(device, name, NVML_DEVICE_NAME_BUFFER_SIZE); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to get name of device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| | |
| | |
| | |
| | result = nvmlDeviceGetPciInfo(device, &pci); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to get pci info for device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| |
|
| | printf("%u. %s [%s]\n", i, name, pci.busId); |
| |
|
| | |
| | result = nvmlDeviceGetComputeMode(device, &compute_mode); |
| | if (NVML_ERROR_NOT_SUPPORTED == result) |
| | printf("\t This is not CUDA capable device\n"); |
| | else if (NVML_SUCCESS != result) |
| | { |
| | printf("Failed to get compute mode for device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| | else |
| | { |
| | |
| | printf("\t Changing device's compute mode from '%s' to '%s'\n", |
| | convertToComputeModeString(compute_mode), |
| | convertToComputeModeString(NVML_COMPUTEMODE_PROHIBITED)); |
| |
|
| | result = nvmlDeviceSetComputeMode(device, NVML_COMPUTEMODE_PROHIBITED); |
| | if (NVML_ERROR_NO_PERMISSION == result) |
| | printf("\t\t Need root privileges to do that: %s\n", nvmlErrorString(result)); |
| | else if (NVML_ERROR_NOT_SUPPORTED == result) |
| | printf("\t\t Compute mode prohibited not supported. You might be running on\n" |
| | "\t\t windows in WDDM driver model or on non-CUDA capable GPU\n"); |
| | else if (NVML_SUCCESS != result) |
| | { |
| | printf("\t\t Failed to set compute mode for device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| | else |
| | { |
| | printf("\t Restoring device's compute mode back to '%s'\n", |
| | convertToComputeModeString(compute_mode)); |
| | result = nvmlDeviceSetComputeMode(device, compute_mode); |
| | if (NVML_SUCCESS != result) |
| | { |
| | printf("\t\t Failed to restore compute mode for device %u: %s\n", i, nvmlErrorString(result)); |
| | goto Error; |
| | } |
| | } |
| | } |
| | } |
| |
|
| | result = nvmlShutdown(); |
| | if (NVML_SUCCESS != result) |
| | printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result)); |
| |
|
| | printf("All done.\n"); |
| |
|
| | printf("Press ENTER to continue...\n"); |
| | getchar(); |
| | return 0; |
| |
|
| | Error: |
| | result = nvmlShutdown(); |
| | if (NVML_SUCCESS != result) |
| | printf("Failed to shutdown NVML: %s\n", nvmlErrorString(result)); |
| |
|
| | printf("Press ENTER to continue...\n"); |
| | getchar(); |
| | return 1; |
| | } |
| |
|