IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Convolution rapide en C/C++


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par d�faut Convolution rapide en C/C++
    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

  2. #2
    Membre chevronn� Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par d�faut
    Je ne comprend pas exactement, une convolution est bien differant pour moi d'une FFT ( http://docs.gimp.org/fr/plug-in-convmatrix.html ). Pour ce qui est de cod� cela en C, c'est assez simple est tr�s rapide. De plus de nombreuse lib de T.I. basic l'impl�mente. Pour avoir des temps de rendu encore plus rapide il est possible d'am�liorer les algo de parcours d'image, ou descendre en ASM.

  3. #3
    Invit�(e)
    Invit�(e)
    Par d�faut
    Citation Envoy� par themadmax Voir le message
    Je ne comprend pas exactement, une convolution est bien differant pour moi d'une FFT
    Une convolution dans l'espace image correspond � une multiplication dans l'espace fr�quentiel.

  4. #4
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    A priori, m�me si un programme �crit en langage matlab n'est pas tr�s optimis�, les fonctions qui sont appel�es par ces programmes le sont assez bien.

    Pour ce qui est la version Intel, aucune id�e, je n'ai pas essay�, mais �a me semblerait une option � tenter.
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    2 155
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 2 155
    Par d�faut
    En effet, Matlab utilise LAPACK derri�re. Pour tout ce qui est calcul matriciel, Matlab, �a carbure. Ce sont des fonctions C tr�s bien optimis� derri�re !
    Par contre, d�s qu'il y a des grosses boucles � la main, attention l'escargot !

    Il est en effet fort probable que Matlab utilise la FTT, c'est plus rapide sur les grosses matrices. Matlab est vraiment beaucoup plus rapide que FFTW ?

  6. #6
    Invit�
    Invit�(e)
    Par d�faut
    Si le filtre est d'une longueur nettement plus faible que l'�chantillon, des m�thodes de type overlap-save ou overlap-add vont g�n�ralement aller plus vite que la FFT directe de l'�chantillon complet.

    Par ailleurs, il n'y a pas que la transform�e de Fourier qui acc�l�re la convolution. J'ai souvenir d'une transformation voisine �vitant les complexes (et donc pas mal de calculs en plus), due � Nussbaumer (je crois me souvenir qu'elle est d�crite dans un exercice du Knuth (chap 4.3.3.C).

    Un excellent livre r�cent sur le sujet est Modern Computer Algebra, de von zur Gathen et Gerhard. Tu devrais y trouver ton bonheur au chapitre 8.



    Themadmax, l'utilisation de la tranform�e de Fourier est un "truc" math�matique. En fait, si "*" note la convolution de deux fonctions, "x" leur produit, et TF leur transform�e de Fourier, on a

    TF(f*g)=TF(f)xTF(g)

    En appelant ITF la transform�e inverse de fourier, on a donc

    f*g = ITF( TF(f)xTF(g) )

    Le "truc" consiste � remarquer que le calcul direct de f*g est quadratique (O(n^2) pour des matrices de taille n), et que la Transform�e de Fourier et son inverse sont O(n Log n) (et le produit O(n)). Au global, le calcul via les Transform�es va donc �tre O(n log n), pour de grandes valeurs de n, passer par la FFT ira plus vite.

    Francois
    Derni�re modification par Invit� ; 01/07/2009 � 10h11.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 82
    Par d�faut
    Merci aux auteurs des r�ponses.
    Je ne savais pas Matlab s'appuyait sur LAPACK, c'est bon � savoir.
    Pour la diff�rence entre la fft Matlab et fftw, il doit y avoir un rapport 2 � 3 donc je ne sais pas sur quoi s'appuie FFT2 de Matlab...

    Sinon, je pense que FFT (et non FFT2) de Matlab utilise la multiplication polynomiale.

    En ce qui concerne les m�thodes de type overlap-save, c'est une piste int�ressante � �tudier. Je vais voir �a �tant donn� la grande taille des matrices utilis�es. L'id�e serait d'adapter la m�thode dite overlap-save en calculant uniquement des morceaux de FFT avec FFTW?

    Merci,
    Adrien

  8. #8
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par amarion Voir le message
    En ce qui concerne les m�thodes de type overlap-save, c'est une piste int�ressante � �tudier. Je vais voir �a �tant donn� la grande taille des matrices utilis�es. L'id�e serait d'adapter la m�thode dite overlap-save en calculant uniquement des morceaux de FFT avec FFTW?
    Oui, l'id�e g�n�rale des m�thodes overlap (save ou add) c'est que quand tu fait une convolution avec un filtre plus petit que tes donn�es, des parties "�loign�es" du r�sultat vont �tre ind�pendantes.

    Donc tu fais plusieurs calcul de convolution sur des segments r�duits de ton image d'entr�e (qui se recoupent, d'o� le terme d'overlap), et r�assemble les r�sultats pour avoir le r�sultat final (en les additionnant dans le cas de la m�thode add, en les supprimant partiellement dans le cas de la m�thode save).

    Ceci dit, je suis pr�t � parier que Matlab utilise cela dans sa fonction de convolution, et comme ses fonctions bas niveau sont du C bien cod�, il va �tre difficile � battre.

    Francois

  9. #9
    R�dacteur/Mod�rateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance m�catronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Freelance m�catronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par d�faut
    Citation Envoy� par poukill Voir le message
    Il est en effet fort probable que Matlab utilise la FTT, c'est plus rapide sur les grosses matrices. Matlab est vraiment beaucoup plus rapide que FFTW ?
    Je ne suis pas un sp�cialiste de ces questions... mais je me d�brouille assez bien avec la doc de MATLAB

    Pour la fonction CONV2 :
    conv2 uses a straightforward formal implementation of the two-dimensional convolution equation in spatial form
    Voir la section algorithme ici : http://www.mathworks.com/access/help...ref/conv2.html

    Pour FFT2 :

    fft2(X) can be simply computed as

    fft(fft(X).').'
    Voir encore une fois la section algorithme ici : http://www.mathworks.com/access/help.../ref/fft2.html

    Et pour FFTW... cette biblioth�que est bien int�gr�e dans MATLAB.

    On peut d'ailleur lire dans la documentation de la fonction FFT :
    The FFT functions (fft, fft2, fftn, ifft, ifft2, ifftn) are based on a library called FFTW
    La boucle est boucl�e

Discussions similaires

  1. Comment recevoir rapidement une r�ponse � votre question ?
    Par Community Management dans le forum Windows
    R�ponses: 3
    Dernier message: 17/08/2014, 02h28
  2. Calcul rapide de percentiles
    Par benj63 dans le forum Algorithmes et structures de donn�es
    R�ponses: 6
    Dernier message: 08/12/2006, 14h50
  3. LES TECHNIQUES DES SGBDR / MySQL rapide ???
    Par SQLpro dans le forum Langage SQL
    R�ponses: 1
    Dernier message: 12/09/2003, 11h16
  4. Acc�s rapide aux propri�t�s d'un Objet
    Par Alacazam dans le forum C++Builder
    R�ponses: 4
    Dernier message: 28/11/2002, 21h56
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invit� dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 24/10/2002, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo