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

MATLAB Discussion :

MATLAB vs Fortran, C, C++ : MATLAB trop rapide ?


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Par défaut MATLAB vs Fortran, C, C++ : MATLAB trop rapide ?
    Bonjour à tous,
    Je voudrais poser ici une question qui me turlupine depuis un bon moment déjà... MATLAB est extrêment rapide pour tout calcul lié à l'algèbre linéaire (produit, inversion, étude du spectre, ...) et semble utiliser des librairies écrites en FORTRAN comme BLAS et LAPACK pour toutes ces implémentations (cf documentation de MATLAB). Alors j'ai tenté par curiosité d'installer BLAS et LAPACK ainsi qu'un wrapper pour le C++ nommé CPPLAPACK et de faire un simple produite matriciel en double précision de 2 matrices 1000*1000... et là le résultat m'étonne : à peu près 2.8 secondes sur le programme C (je précise que je n'utilise dans ce code que les fonctionnalités de bases de CPPLAPACK, aucun code personnel) et seulement 0.8 seconde pour MATLAB sur un calcul semblable (à la différence des initialisations près...) - près de 4 fois plus rapide !!! Quelqu'un pourrait-il me dire comment fait MATLAB pour être si rapide ? pourquoi les libraires sur lesquelles il est basé ne me permettent pas d'être aussi rapide en C ou C++ alors qu'elles le permettent sous MATLAB ?? J'ai regardé les implémentations des produits matriciels finalement assez basiques (je m'attendais à du Strassen ou du Coppersmith...) et je ne trouve pas les raisons de ces différences... Si quelqu'un a une idée je suis preneur !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Normalement, ce sont des fonctions C(++) qui sont utilisées par Matlab, justement LAPACK, sans doute optimisées selon ton processeur.
    Tu as regardé aussi du côté de Python avec les wrappers Lapack ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Par défaut
    Pourquoi un wrapper Python "irait-il plus vite" qu'un wrapper C++ ???

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'était par rapport au développement, je connais des gens qui se détournent de MAtlab à cause de ses limitations pour se tounrer vers un meilleur langage, qui a suffisemment de bibliothèques pour être un vrai concurrent de Matlab -> Python.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par rulianf
    Bonjour à tous,
    Je voudrais poser ici une question qui me turlupine depuis un bon moment déjà... MATLAB est extrêment rapide pour tout calcul lié à l'algèbre linéaire (produit, inversion, étude du spectre, ...)
    regarde ici http://www.developpez.net/forums/sho...d.php?t=252514
    j'ai fait un calcul de m^2 où m est une matrice. C'est plus rapide en C qu'en matlab (et mon prgm C est on ne peut plus basique).
    Je ne suis pas sûr que Matlab soit très rapide... Matlab est très bien pour programmer rapidemment. Si tu cherches un gain de temps lors de l'exécution d'un code, oublie Matlab et passe au C ou au Fortran.

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Calculer un temps, il suffit d'encadrer les lignes à chronométrer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tic;
    % Les lignes
    toc;
    Ensuite, la vitesse du code dépend de l'implémentation, et de la version de Matlab.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Par défaut
    Je tiens à répondre au bienommé Salseropom !! J'ai moi-même fait ce test avec un code très semblable il y a 1 semaine sous la dernière version de MATLAB (sous linux)... et mes résultats étaient très différents des tiens !! MATLAB allait nettement plus vite (surtout sur des produits de grosses matrices) que le code (à mon avis de référence en termes de vitesse et d'optimisation) de BLAS et LAPACK (écrits à la base en FORTRAN et encapsulé en C++)... Donc je suis quelques peu surpris par ta réponse mais peut-être as-tu une botte secrète a me révéler ?? Moi j'ai entendu parlé de BLAS 3 qui semblerait implémenter Strassen (qui réduit la complexité d'un produit matriciel et notamment le nombre de multiplications) pour le produit de grosses matrices... je me demande donc si là ne serait pas le point crucial !
    PS : Et pour le morceau de code que tu proposes sous MATLAB... Il m'a semblé que tu utilisais une boucle dans ton code MATLAB (un code MATLAB optimal ne devrait pas, en théorie, contenir de boucles, très lentes dans ce langage interprété... le produit de tes N matrices peut certainement être fait via la définition d'une grande matrice, N fois plus grandes que la petite que tu utilises auquel cas des algos tels que Strassen pourraient optimiser le calcul du produit, j'imagine... de plus il est toujours possible d'utiliser des variables globales pour éviter le passage d'argument par recopie...)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Par défaut
    Ah et au fait dernière chose, je viens de faire le test : m^2 est près de 2 fois plus lent que m*m sous MATLAB !

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par rulianf
    Ah et au fait dernière chose, je viens de faire le test : m^2 est près de 2 fois plus lent que m*m sous MATLAB !
    OK, je regarderai ça dès que j'aurai retrouvé matlab. Je te tiendrai au courant.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par rulianf
    mais peut-être as-tu une botte secrète a me révéler ??
    salut, non non il n'y a pas de botte secrète. J'ai posté mes codes tels que je les ai lancés.

Discussions similaires

  1. Communication Fortran(.exe) et Matlab
    Par L'hermine dans le forum Fortran
    Réponses: 5
    Dernier message: 23/01/2011, 08h51
  2. Communication Fortran(.exe) et MATLAB
    Par L'hermine dans le forum MATLAB
    Réponses: 0
    Dernier message: 29/12/2010, 13h43
  3. Fonction équivalente à fmincon sous MATLAB et Fortran
    Par stagiaire2010 dans le forum MATLAB
    Réponses: 0
    Dernier message: 13/08/2010, 15h25
  4. Convertir Matlab en Fortran 90
    Par driss80 dans le forum Fortran
    Réponses: 12
    Dernier message: 30/10/2007, 20h15
  5. Compte à rebours trop rapide
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2005, 20h57

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