Resolving "no kernel image is available for execution on the device" CUDA Error

25 views Asked by At

i have nvidia geforce mx110

enter image description here

, and cuda 12.4

enter image description here

I encountered the "no kernel image is available for execution on the device" CUDA error while trying to execute a simple CUDA program just for test

is this about GPU Architecture Compatibility or CUDA Toolkit and Driver Compatibility ? the source code :

#include <iostream>
#include <cuda_runtime.h>

const int N = 10;  

__global__ void addVectors(int *a, int *b, int *result) {
    int idx = threadIdx.x;
    if (idx < N) {
        result[idx] = a[idx] + b[idx];
    }
}

int main() {
   
    int a[N], b[N], result[N];


    for (int i = 0; i < N; ++i) {
        a[i] = i;
        b[i] = 2 * i;
    }

 
    std::cout << "Vecteur a : ";
    for (int i = 0; i < N; ++i) {
        std::cout << a[i] << " ";
    }
    std::cout << std::endl;

    std::cout << "Vecteur b : ";
    for (int i = 0; i < N; ++i) {
        std::cout << b[i] << " ";
    }
    std::cout << std::endl;
    int *d_a, *d_b, *d_result;

    cudaMalloc((void**)&d_a, N * sizeof(int));
    cudaMalloc((void**)&d_b, N * sizeof(int));
    cudaMalloc((void**)&d_result, N * sizeof(int));

    cudaMemcpy(d_a, a, N * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(d_b, b, N * sizeof(int), cudaMemcpyHostToDevice);

    
    cudaError_t cudaStatus = cudaGetLastError();
    if (cudaStatus != cudaSuccess) {
        std::cerr << "Erreur CUDA lors de l'allocation de la mémoire ou de la copie des données vers le GPU: " << cudaGetErrorString(cudaStatus) << std::endl;
        return 1;
    }

  
    addVectors<<<1, N>>>(d_a, d_b, d_result);


 
    cudaDeviceSynchronize();


    cudaStatus = cudaGetLastError();
    if (cudaStatus != cudaSuccess) {
        std::cerr << "Erreur CUDA lors de l'exécution du kernel ou de la copie des données depuis le GPU: " << cudaGetErrorString(cudaStatus) << std::endl;
        return 1;
    }

    cudaMemcpy(result, d_result, N * sizeof(int), cudaMemcpyDeviceToHost);

  
    std::cout << "Résultat de l'addition des vecteurs :\n";
    for (int i = 0; i < N; ++i) {
        std::cout << result[i] << " ";
    }
    std::cout << std::endl;
    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_result);

    return 0;
}

the result :

Vecteur a : 0 1 2 3 4 5 6 7 8 9 
Vecteur b : 0 2 4 6 8 10 12 14 16 18 
Erreur CUDA lors de l'exécution du kernel ou de la copie des données depuis le GPU: no kernel image is available for execution on the device
0

There are 0 answers