DOCUMENTATION

Cuda est une extension du langage C++ permettant d’accéder aux GPUs Nvidia du mésocentre.

Pour l'utiliser, vous devez charger un module cuda :

module load cuda/cuda-11.6

/!\Les cartes K20, K40 et K80 ne peuvent pas utiliser la version 11.6 de Cuda à cause d'une incompatibilité de driver. Si vous souhaitez utiliser ces cartes il faudra utiliser une version <= 11.4/!\

Vous pouvez compiler vos propres codes avec le compilateur nvcc.

Voici un simple code Cuda qui additionne 2 tableaux entre eux, ainsi que la marche à suivre pour le lancer sur les machines dédiées du mésocentre :

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 1024
#define THREADS_PER_BLOCK 256

__global__ void add(int *d_a, int *d_b, int *d_c)
{
    int ind = threadIdx.x + blockIdx.x *blockDim.x;

    if (ind<N) d_c[ind] = d_a[ind] + d_b[ind];
}

int main(int argc,char *argv[])
{
    int *a,*b,*c;
    int size = N*sizeof(int);

    cudaMallocManaged(&a,size);
    cudaMallocManaged(&b,size);
    cudaMallocManaged(&c,size);

    srand(time(NULL));

    for (int ii=0; ii<N; ii++){
        a[ii] = 1+rand()%1000;
        b[ii] = 1+rand()%1000;
    }

    add<<<N/THREADS_PER_BLOCK,THREADS_PER_BLOCK>>>(a,b,c);
    cudaDeviceSynchronize();

    for (int ii=0; ii<N; ii++) printf("%d + %d = %d\n",a[ii],b[ii],c[ii]);

    cudaFree(a);
    cudaFree(b);
    cudaFree(c);

    return 0;
}

Compilation :

nvcc add.cu -o add

Script de soumission :

#! /bin/bash
#SBATCH -p publicgpu       # File d'attente GPU
#SBATCH -n 1
#SBATCH --gres=gpu:1       # Pour réserver une machine avec 1 GPU libre

module load cuda/cuda-11.6

./add

VERSIONS ET SCRIPTS D'INSTALLATION


TAGS