device管理

NVIDIA提供了集中凡是来查询和管理GPU device,掌握GPU信息查询很重要,因为这可以帮助你设置kernel的执行配置。

本博文将主要介绍下面两方面内容:

  • CUDA runtime API function
  • NVIDIA系统管理命令行

使用runtime API来查询GPU信息

你可以使用下面的function来查询所有关于GPU device 的信息:

cudaError_t cudaGetDeviceProperties(cudaDeviceProp *prop, int device);

GPU的信息放在cudaDeviceProp这个结构体中。

代码

#include <cuda_runtime.h>#include <stdio.h>int main(int argc, char **argv) {      printf("%s Starting...\n", argv[0]);int deviceCount = 0;cudaError_t error_id = cudaGetDeviceCount(&deviceCount);if (error_id != cudaSuccess) {printf("cudaGetDeviceCount returned %d\n-> %s\n",(int)error_id, cudaGetErrorString(error_id));printf("Result = FAIL\n");exit(EXIT_FAILURE);}if (deviceCount == 0) {printf("There are no available device(s) that support CUDA\n");} else {printf("Detected %d CUDA Capable device(s)\n", deviceCount);}int dev, driverVersion = 0, runtimeVersion = 0;dev =0;cudaSetDevice(dev);cudaDeviceProp deviceProp;cudaGetDeviceProperties(&deviceProp, dev);printf("Device %d: \"%s\"\n", dev, deviceProp.name);cudaDriverGetVersion(&driverVersion);cudaRuntimeGetVersion(&runtimeVersion);printf(" CUDA Driver Version / Runtime Version %d.%d / %d.%d\n",driverVersion/1000, (driverVersion%100)/10,runtimeVersion/1000, (runtimeVersion%100)/10);printf(" CUDA Capability Major/Minor version number: %d.%d\n",deviceProp.major, deviceProp.minor);printf(" Total amount of global memory: %.2f MBytes (%llu bytes)\n",(float)deviceProp.totalGlobalMem/(pow(1024.0,3)),(unsigned long long) deviceProp.totalGlobalMem);printf(" GPU Clock rate: %.0f MHz (%0.2f GHz)\n",deviceProp.clockRate * 1e-3f, deviceProp.clockRate * 1e-6f);printf(" Memory Clock rate: %.0f Mhz\n",deviceProp.memoryClockRate * 1e-3f);printf(" Memory Bus Width: %d-bit\n",deviceProp.memoryBusWidth);if (deviceProp.l2CacheSize) {printf(" L2 Cache Size: %d bytes\n",deviceProp.l2CacheSize);}printf(" Max Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d,%d), 3D=(%d,%d,%d)\n",deviceProp.maxTexture1D , deviceProp.maxTexture2D[0],deviceProp.maxTexture2D[1],deviceProp.maxTexture3D[0], deviceProp.maxTexture3D[1],deviceProp.maxTexture3D[2]);printf(" Max Layered Texture Size (dim) x layers 1D=(%d) x %d, 2D=(%d,%d) x %d\n",deviceProp.maxTexture1DLayered[0], deviceProp.maxTexture1DLayered[1],deviceProp.maxTexture2DLayered[0], deviceProp.maxTexture2DLayered[1],deviceProp.maxTexture2DLayered[2]);printf(" Total amount of constant memory: %lu bytes\n",deviceProp.totalConstMem);printf(" Total amount of shared memory per block: %lu bytes\n",deviceProp.sharedMemPerBlock);printf(" Total number of registers available per block: %d\n",deviceProp.regsPerBlock);printf(" Warp size: %d\n", deviceProp.warpSize);printf(" Maximum number of threads per multiprocessor: %d\n",deviceProp.maxThreadsPerMultiProcessor);printf(" Maximum number of threads per block: %d\n",deviceProp.maxThreadsPerBlock);printf(" Maximum sizes of each dimension of a block: %d x %d x %d\n",deviceProp.maxThreadsDim[0],deviceProp.maxThreadsDim[1],deviceProp.maxThreadsDim[2]);printf(" Maximum sizes of each dimension of a grid: %d x %d x %d\n",deviceProp.maxGridSize[0],deviceProp.maxGridSize[1],deviceProp.maxGridSize[2]);printf(" Maximum memory pitch: %lu bytes\n", deviceProp.memPitch);exit(EXIT_SUCCESS);
}                

编译运行:

$ nvcc checkDeviceInfor.cu -o checkDeviceInfor
$ ./checkDeviceInfor

输出:

./checkDeviceInfor Starting...
Detected 2 CUDA Capable device(s)
Device 0: "Tesla M2070"
CUDA Driver Version / Runtime Version 5.5 / 5.5
CUDA Capability Major/Minor version number: 2.0
Total amount of global memory: 5.25 MBytes (5636554752 bytes)
GPU Clock rate: 1147 MHz (1.15 GHz)
Memory Clock rate: 1566 Mhz
Memory Bus Width: 384-bit
L2 Cache Size: 786432 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 1536
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes

决定最佳GPU

对于支持多GPU的系统,是需要从中选择一个来作为我们的device的,抉择出最佳计算性能GPU的一种方法就是由其拥有的处理器数量决定,可以用下面的代码来选择最佳GPU。

int numDevices = 0;
cudaGetDeviceCount(&numDevices);
if (numDevices > 1) {int maxMultiprocessors = 0, maxDevice = 0;for (int device=0; device<numDevices; device++) {cudaDeviceProp props;cudaGetDeviceProperties(&props, device);if (maxMultiprocessors < props.multiProcessorCount) {maxMultiprocessors = props.multiProcessorCount;maxDevice = device;}}cudaSetDevice(maxDevice);
}    

使用nvidia-smi来查询GPU信息

nvidia-smi是一个命令行工具,可以帮助你管理操作GPU device,并且允许你查询和更改device状态。

nvidia-smi用处很多,比如,下面的指令:

$ nvidia-smi -L
GPU 0: Tesla M2070 (UUID: GPU-68df8aec-e85c-9934-2b81-0c9e689a43a7)
GPU 1: Tesla M2070 (UUID: GPU-382f23c1-5160-01e2-3291-ff9628930b70)

然后可以使用下面的命令来查询GPU 0 的详细信息:

$nvidia-smi –q –i 0

下面是该命令的一些参数,可以精简nvidia-smi的显示信息:

MEMORY

UTILIZATION

ECC

TEMPERATURE

POWER

CLOCK

COMPUTE

PIDS

PERFORMANCE

SUPPORTED_CLOCKS

PAGE_RETIREMENT

ACCOUNTING

比如,显示只device memory的信息:

$nvidia-smi –q –i 0 –d    MEMORY | tail –n 5
Memory Usage
Total : 5375 MB
Used : 9 MB
Free : 5366 MB

设置device

对于多GPU系统,使用nvidia-smi可以查看各GPU属性,每个GPU从0开始依次标注,使用环境变量CUDA_VISIBLE_DEVICES可以指定GPU而不用修改application。

可以设置环境变量CUDA_VISIBLE_DEVICES-2来屏蔽其他GPU,这样只有GPU2能被使用。当然也可以使用CUDA_VISIBLE_DEVICES-2,3来设置多个GPU,他们的device ID分别为0和1.

代码下载:CodeSamples.zip

转载于:https://www.cnblogs.com/1024incn/p/4539697.html

CUDA ---- device管理相关推荐

  1. 【GPU】Nvidia CUDA 编程基础教程——利用基本的 CUDA 内存管理技术来优化加速应用程序

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G ...

  2. CUDA虚拟内存管理

    虚拟内存管理 文章目录 虚拟内存管理 E.1. Introduction E.2. Query for support E.3. Allocating Physical Memory E.3.1. S ...

  3. Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False

    Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False 此时改为: torch ...

  4. PyTorch笔记: GPU上训练的模型加载到CPU/错误处理Attempting to deserialize object on a CUDA device but torch.cuda.is_a

    我之前在GPU上训练了一个模型,同时把模型的参数记录在resnet18_ultimate.pkl上 在本地的CPU上,我想把参数加载,于是一开始我是这么写代码的: import torch impor ...

  5. 【错误处理】RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count

    RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count 1 项目场景 2 ...

  6. Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False.

    记录一下遇到的问题. 最近在搭环境时出现了这个错误,网上找了许多方案都没法解决,说的大概都是cuda版本和pytorch版本不兼容,我按照pytorch官网的指令安装了许多次都没用. 我的cuda版本 ...

  7. RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count() is 1.

    成功解决 RuntimeError: Attempting to deserialize object on CUDA device 1 but torch.cuda.device_count() i ...

  8. RuntimeError: Attempting to deserialize object on CUDA device 3 but torch.cuda.device_count() is 1.

    问题描述: 运行测试程序的时候,报错"RuntimeError: Attempting to deserialize object on CUDA device 3 but torch.cu ...

  9. RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 2.

    解决报错RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is ...

最新文章

  1. 周围剃光头顶留长发型_为什么很多秃头的人,宁愿周围留一圈头发,也不愿剃成光头?...
  2. python模拟地面网管接收数据
  3. div超出不换行_一日一技:XPath不包含应该怎么写?
  4. 机器人语言特性探索2-正在发生的趋势
  5. 关于他们回答的 怎样在桌面建一个python GUI的快捷方式 这个问题
  6. C++实现的队列queue
  7. selenium之 chromedriver与chrome版本映射表(更新至v2.43)
  8. openstack 官方文档配置 Open vSwitch
  9. Java Mail 相关资料
  10. css各种字体英文名称
  11. python5.2、输出格式控制 - 摄氏-华氏温度换算
  12. 不规则图形数格子的方法_最强大脑第四季不规则数独规则介绍 数独技巧口诀带图解析...
  13. matlab 光斑质心算法,高精度光斑中心定位算法
  14. 嵌入式Linux学习经历 学前小结
  15. Mac 系统下java端口占用
  16. 如何让U盘拷贝4G以上的大文件
  17. Word处理控件Aspose.Words功能演示:在C#中的Word文档中添加或删除水印
  18. Matlab中 的@(x)——处理匿名函数
  19. 爬虫(二):用python爬取亚马逊所有家具种类前100名的商品信息(下)
  20. C语言 字符串与整数的相互转换(atoi/atol/sprintf函数简解)

热门文章

  1. android 8.0手机无法更新版本,安卓手机升级安卓8.0后 系统以后可能都无法回退
  2. 双风扇安装图解_汽车灯光标志图解,汽车灯光标志大全图解
  3. Sentinel-Go 集成 Nacos 实现外部动态数据源
  4. 记录一次 Arthas 使用
  5. Serverless 微服务实践-移动应用包分发服务
  6. __clone class php_PHP中__clone()方法详解
  7. (二)深度学习数据处理-----图片数据处理
  8. oracle 如何显示 比例,Oracle中如何兼得比例和时间
  9. 华为手机拍照后图库里无照片_华为图库中上千张照片,如何快速找到想要的照片?...
  10. idea springboot 发布webservice 发布服务_太赞了:Spring boot+redis实现消息发布与订阅...