Bonjour à tous,
J'ai besoin d'optimiser un morceau d'algorithme faisant une convolution.
Codé en Matlab, la convolution (conv2) d'une matrice de taille 4000*1600 par un noyau de taille 105*81 est de l'ordre de 6s sur un P4 standard.
A priori, on ne sait pas comment Matlab convolue avec conv2. Je pense qu'il utilise la FFT.
J'aimerais réduire ce temps en passant en C ou C++. Je me penche donc sur l'utilisation de la FFT. En utilisant FFTW, on arrive à une quinzaine de seconde pour effectuer les FFT et IFFT sur une image de 4096*2048. On remarque également que la fonction FFT2 de Matlab mets à peur près 2 à 3 fois moins de temps que la librairie C FFTW.
Quelqu'un a-t-il une idée à proposer pour accélérer le processus de convolution? Je reste surpris de ne pas réussir à faire mieux en C.
J'ai vu rapidement les librairies MKL de chez Intel où une FFT est codée. Des idées quant à son efficacité?
Pensez-vous qu'il soit possible de réduire le temps de convolution par FFT (ou pas d'ailleurs) à 1 seconde environ pour les tailles données en début de post?
Merci d'avance pour vos avis,
Adrien
Partager