cudaGetDeviceProperties
cudaError_t cudaGetDeviceProperties(cudaDeviceProp* prop, int device);
La función acepta dos parámetros:
- prop: un puntero a la estructura cudaDeviceProp, que se utiliza para almacenar la información de propiedad obtenida del dispositivo GPU.
- dispositivo: el índice del dispositivo GPU que se va a consultar, generalmente a partir de 0.
Los siguientes son algunos miembros comúnmente utilizados de la estructura cudaDeviceProp:
- name: nombre del dispositivo, almacenado como una cadena.
- principal: el número de versión principal del número de versión de capacidad informática principal del dispositivo.
- menor: el número de versión menor del número de versión de la capacidad informática principal del dispositivo.
- totalGlobalMem: el tamaño total de la memoria global del dispositivo (bytes).
- sharedMemPerBlock: el tamaño de memoria compartida (bytes) disponible por bloque de subprocesos.
- maxThreadsPerBlock: el número máximo de subprocesos que puede contener cada bloque de subprocesos.
- maxThreadsDim: una matriz de tres valores enteros que representan las dimensiones máximas de cada bloque de subprocesos.
- maxGridSize: una matriz de tres valores enteros que representan la dimensión máxima de cada cuadrícula.
ejemplo:
#include<cuda_runtime.h>
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
std::cout << "Device name: " << prop.name << std::endl;
std::cout << "Compute capability: " << prop.major << "." << prop.minor << std::endl;
cudaDeviceGetAttribute
cudaError_t cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device);
La función acepta tres parámetros:
- valor: Un puntero a un entero, usado para
存储查询的属性值
. - attr:
要查询
El atributo del dispositivo, que es un valor de enumeración, utilizado para especificar el tipo de atributo a obtener. - dispositivo: el índice del dispositivo GPU que se va a consultar, generalmente a partir de 0.
Los siguientes son algunos dispositivos de uso común (cudaDeviceAttr):
- cudaDevAttrMaxThreadsPerBlock: el número máximo de subprocesos que puede contener cada bloque de subprocesos.
- cudaDevAttrMaxSharedMemoryPerBlock: tamaño de memoria compartida (bytes) disponible por bloque de subprocesos.
- cudaDevAttrMaxGridSize: la dimensión máxima de cada cuadrícula.
- cudaDevAttrComputeCapabilityMajor: el número de versión principal de la capacidad informática del dispositivo.
- cudaDevAttrComputeCapabilityMinor: número de versión menor de la capacidad de cómputo del dispositivo.
ejemplo:
cudaDeviceGetAttribute(&fp16_support, cudaDevAttrComputeCapabilityMajor, 0);
if (fp16_support >= 7) {
std::cout << "GPU Device supports FP16 computation" << std::endl;
} else {
std::cout << "GPU Device does not support FP16 computation" << std::endl;
}
cudaMemGetInfo
cudaError_t cudaMemGetInfo(size_t* free, size_t*
Acepta dos parámetros free y total, ambos punteros al tipo size_t. Después de llamar a esta función, almacenará el tamaño en el dispositivo actual 可用内存
de forma gratuita y 总内存
el tamaño en total
size_t free_byte;
size_t total_byte;
cudaMemGetInfo(&free_byte, &total_byte);
double free_db = (double)free_byte;
double total_db = (double)total_byte;
double free_db_g = free_db / 1024.0 / 1024.0 / 1024.0;
double total_db_g = total_db / 1024.0 / 1024.0 / 1024.0;
std::cout << "Total global memory: " << total_db_g << "G" << std::endl;
std::cout << "Total available memory: " << free_db_g << "G" << std::endl;
Dividimos por 1024,0 tres veces porque normalmente expresamos el tamaño de la memoria en bytes. Aquí, divida por 1024.0 tres veces para convertir bytes a gigabytes (GB)