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 :

fortran vs C


Sujet :

C

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Par défaut
    Souviron34 pourra peut-etre confirmer (cela fait 20 ans que j'ai plus fait de Fortran...). En Fortran j'aurais inverse les boucles sur i et j (en Fortran les elements d'un tableau bi-dimentionel avec la seconde dimention constante sont consecutif en memoire, en C ce sont les elements avec la premiere dimention constante qui le sont).
    Tout à fait, c'est ce que je fais habituellement, même si le compilo se charge de ce genre d'optimisation. Ici, ce n'est pas le cas car j'ai repris le bout de code C que j'ai adapté.

    Je ne suis pas sur que ce soit la bonne solution. Ce n'est pas si complique que cela d'avoir du Fortran qui appelle du C et inversement.
    C'est vrai mais si les perf fortran sont meilleures, je ferais dans ce cas des appels à des routines graphiques C, ce qui nécessite de traduire les arguments (appel par valeur->par adresse) ça alourdit pas mal le code, sauf si je fais une interface ... à réfléchir aussi

    Merci de cet avis, ça me fais 2 pistes de réflexion.

  2. #22
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Souviron34 pourra peut-etre confirmer (cela fait 20 ans que j'ai plus fait de Fortran...). En Fortran j'aurais inverse les boucles sur i et j (en Fortran les elements d'un tableau bi-dimentionel avec la seconde dimention constante sont consecutif en memoire, en C ce sont les elements avec la premiere dimention constante qui le sont). C'est plus gentil pour les caches.



    Je ne suis pas sur que ce soit la bonne solution. Ce n'est pas si complique que cela d'avoir du Fortran qui appelle du C et inversement.

    Entièrement d'accord... Mes souvenirs de Fortran sont également lointains, mais maintenant que tu le dis ( ) oui c'est bien ça je pense... : il y a inversion dans l'ordre des dimensions.

    Et entièrement d'accord aussi avec ta 2ième partie.. Pourquoi s'embêter avec des fichiers (sauf si vraiment on a besoin des calculs intermédiaires) alors que le passage n'est pas si compliqué que ça.. En fait il est principalement compliqué à cause 1) de la sensibilité aux majuscules/minuscules du C vs Fortran, et 2) des chaînes de caractères et tableaux où, si mes souvenirs sont bons, en Fortran les dimensions sont ajoutées automatiquement en paramètres cachés à la fin de l'appel.

    Mais un p'tit tour sur le forum Fortran devrait régler la question (traitée à moult reprises..).

    Ceci dit, c'est pour ça que je mentionnais "pas pour débutants" dans mon post précédent.... Il faut maîtriser un tant soit peu les concepts des 2 côtés...

  3. #23
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Consulter la discussion parue sur le forum C++
    http://www.developpez.net/forums/sho...d.php?t=330639

    C'est vrai que l'ordre du traitement peut influer sur le temps de calcul à cause de ces problèmes de cache pour de grosses matrices. Le code utilisé est transcrit du Fortran sans tenir compte de l'ordonnancement différent des tableaux en C.
    J'ai vérifié en effet que si au lieu de calculer les éléments de la matrice résultat dans cet ordre (disons ligne après ligne) on les calcule colonnes après colonnes et si je copie localement chaque colonne de la deuxième matrice pour calculer une colonne du résultat, le temps de calcul est divisé par 3.
    Ce facteur 3 n'existe pas pour de petites matrices (< 200*200 sur ma machine) et les temps sont comparables.

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    En effet je viens de tester en créant une matrice temporaire qui correspont à la transposé de B et apres je fais la multiplication ligne à ligne et au final j'ai un temps de calcul qui est de 2.3s contre 12.5s avec le meme langage

  5. #25
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par diogene
    Ce facteur 3 n'existe pas pour de petites matrices (< 200*200 sur ma machine) et les temps sont comparables.
    Je pense que cela provient uniquement de la taille du "chunk" de mémoire alloué à un programme par défaut par le loader...

Discussions similaires

  1. Problème en interfacant C et Fortran
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 23/05/2006, 16h10
  2. Compilateur Fortran
    Par badrou dans le forum Fortran
    Réponses: 3
    Dernier message: 28/11/2004, 20h39
  3. accès fortran à une base / utilisation des "bytea"
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/11/2004, 08h31
  4. Simulateur fortran
    Par kaczmarek dans le forum Linux
    Réponses: 1
    Dernier message: 28/07/2004, 17h55
  5. [TP]Portage d'un encodeur MP3 Fortran en pur Pascal...
    Par Christophe Fantoni dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 04/07/2003, 17h34

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