【cuda】cudaGetDeviceProperties,cudaDeviceGetAttribute,cudaMemGetInfo

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)

おすすめ

転載: blog.csdn.net/weixin_50862344/article/details/131160975