es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo saber si un dispositivo CUDA tiene un tamaño fijo de banco de memoria compartida?

Algunos dispositivos CUDA admiten diferentes tamaños de bancos de memoria compartida (4 bytes, 8 bytes); otros admiten sólo uno (típicamente/siempre 4 bytes).

Como he llegado a darme cuenta, no obtendré un error al intentar establecer el tamaño del banco en un valor no admitido… eso simplemente será ignorado. Entonces, ¿cómo puedo saber, programáticamente, si mi dispositivo es del primer tipo o del segundo tipo?

No me importa usar las API de tiempo de ejecución o de controlador.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para determinar programáticamente si un dispositivo CUDA soporta diferentes tamaños de bancos de memoria compartida o sólo uno, se puede utilizar la API de consulta de dispositivos CUDA. Específicamente, se puede comprobar la propiedad deviceProperties.sharedMemBankSize en la estructura cudaDeviceProp, que representa el tamaño de cada banco de memoria compartida del dispositivo.

    Si deviceProperties.sharedMemBankSize es igual a cudaSharedmemBankSizeFourByte, entonces el dispositivo sólo admite un tamaño de banco de memoria compartida de 4 bytes. Por otro lado, si deviceProperties.sharedMemBankSize es igual a cudaSharedmemBankSizeEightByte, entonces el dispositivo soporta múltiples tamaños de bancos de memoria compartida, incluidos 4 y 8 bytes.

    Aquí hay un ejemplo de código que utiliza la API de tiempo de ejecución de CUDA para consultar el tamaño del banco de memoria compartida en el dispositivo actual:

    “`C
    #include <stdio.h>
    #include <cuda_runtime_api.h>

    int main()
    {
    int device;
    cudaDeviceProp deviceProperties;

    cudaGetDevice(&device);
    cudaGetDeviceProperties(&deviceProperties, device);

    if (deviceProperties.sharedMemBankSize == cudaSharedMemBankSizeFourByte) {
    printf(“El dispositivo solo admite bancos de memoria compartida de 4 bytes\n”);
    } else if (deviceProperties.sharedMemBankSize == cudaSharedMemBankSizeEightByte) {
    printf(“El dispositivo admite bancos de memoria compartida de 4 y 8 bytes\n”);
    } else {
    printf(“Tamaño de banco de memoria compartida desconocido\n”);
    }

    return 0;
    }
    “`</cuda_runtime_api.h></stdio.h>

Comments are closed.