利用CUDA查看每张显卡上的可用显存大小和总的显存大小,参考了博文1,博文2,主要使用的函数是cudaMemGetInfo(),cudaGetDeviceCount()和cudaSetDevice()
#include <cuda.h>
#include <stdio.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
int main()
{
size_t avail;
size_t total;
int deviceCount=0;
cudaGetDeviceCount(&deviceCount); // 用deviceCount获取显卡总数量
for(int i_dev=0;i_dev<deviceCount;i_dev++)
{
cudaSetDevice(i_dev); // 使用第i_dev张显卡作为使用的显卡
cudaMemGetInfo(&avail, &total); // 获取可用和总显存大小
printf("Device %d Memeory:\n",i_dev);
printf("Avaliable Memery = %dm Total Memory = %dm\n", int(avail/1024/1024), int(total / 1024 / 1024));
printf("\n");
}
}
博文2中使用的是 cuInit(),cuMemGetInfo()函数,在linux下编译的时候需要加上 -lcuda 不然会报错,这篇博文的代码好像有点问题,就是第一个cuMemGetInfo()获取的数据都为0。
size_t 获取的显卡内存单位是字节(B),数据大小以及超过int的范围了,要么用long long型接收显存大小的数据,要么先处理转换成兆字节(MB)