FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 66, dernière mise à jour : 14 juin 2021
CuFFT est une implémentation de la transformée rapide de Fourier. Une transformation de Fourier permet de décomposer un signal continu en une somme de sinusoïdes. La FFT (Fast Fourier Transform) est une version rapide pour calculer cette transformée. Cette version a été mise au point par Cooley et Tukey.
CuFFT se base sur une autre librairie de transformée rapide de Fourier, FFTW. Ces deux librairies utilisent des plans pour configurer la transformée. Ce système de plans permet, avant de connaître les données, de choisir le meilleur algorithme pour calculer la transformée.
CuFFT peut utiliser deux types de valeurs : des flottants et des complexes. Depuis CUDA 2.3, il peut même utiliser les versions à double précision sur les périphériques qui le supportent.
Les transformées possibles sont : complexe vers complexe, complexe vers réel, réel vers complexe.
CuFFT ne supporte pas des plages de données infinies : à une dimension, il est limité à 8 millions d'éléments ; à deux ou trois, il est limité à 16384 éléments.
CuFFT est officiellement supportée par NVIDIA.
Lien : La transformée de Fourier rapide
Lien : FFTW
Un plan est une configuration de l'algorithme à employer pour traiter les données. Ceci permet d'optimiser le calcul, vu que l'on en connaît la substance avant de devoir l'exécuter : cela laisse le temps de trouver l'algorithme le plus approprié.
Voici les fonctions utilisées pour construire des plans.
cufftResult cufftPlan1d (
cufftHandle *
plan, int
nx, cufftType type, int
batch ) ;
cufftResult cufftPlan3d (
cufftHandle *
plan, int
nx, int
ny, cufftType type ) ;
cufftResult cufftPlan2d (
cufftHandle *
plan, int
nx, int
ny, int
nz, cufftType type ) ;
Le plan créé sera pointé par plan. Il traitera nx éléments à une dimension, un tableau de nx éléments sur ny à deux dimensions, un tableau de nx éléments sur ny sur nz à trois dimensions. Un plan à une dimension peut demander à effectuer batch transformées sur les données fournies. Le type de transformation peut être l'un des suivants.
- CUFFT_C2C : complexe vers complexe ;
- CUFFT_C2R : complexe vers réel ;
- CUFFT_R2C : réel vers complexe.
Un plan peut être détruit grâce à cufftResult cufftDestroy ( cufftHandle plan ) ;.
Il existe trois fonctions permettant d'effectuer la transformation, correspondant aux trois valeurs possibles de type pour les fonctions de création de plan.
cufftResult cufftExecC2C (
cufftHandle plan, cufftComplex *
idata, cufftComplex *
odata, int
direction ) ;
cufftResult cufftExecR2C (
cufftHandle plan, cufftReal *
idata, cufftComplex *
odata ) ;
cufftResult cufftExecC2R (
cufftHandle plan, cufftComplex *
idata, cufftReal *
odata ) ;
idata est un pointeur vers les données à traiter, odata est un pointeur vers l'emplacement où les valeurs traitées seront stockées.
direction spécifie la direction de l'algorithme : soit vers l'avant (CUFFT_FORWARD), soit vers l'arrière (CUFFT_BACKWARD).
CuFFT n'utilise pas une fonction spécifique pour récupérer les erreurs : chaque fonction renvoie donc un cufftResult, qui peut avoir une de ces valeurs.
- CUFFT_SUCCESS : opération effectuée correctement ;
- CUFFT_INVALID_PLAN : plan passé en argument invalide ;
- CUFFT_ALLOC_FAILED : erreur lors de l'allocation de la mémoire ;
- CUFFT_INVALID_TYPE : type demandé non supporté ;
- CUFFT_INVALID_VALUE : mauvais pointeur mémoire ;
- CUFFT_INTERNAL_ERROR : erreur interne ;
- CUFFT_EXEC_FAILED : erreur d'exécution de la transformée sur le GPU ;
- CUFFT_SETUP_FAILED : erreur d'initialisation de la librairie ;
- CUFFT_SHUTDOWN_FAILED : erreur de fermeture de la librairie ;
- CUFFT_INVALID_SIZE : taille de plan non supportée.