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 :

Temps de calcul C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Par défaut Temps de calcul C
    Bonjour,
    J'ai une fonction codé en C qui permet de générer un tableau 3D. Cette fonction génère le grand pourcentage du temps de l'exécution de tout le programme.
    La même fonction a été codé sous Matlab et le temps de calcul est beaucoup moins inférieur, malgré que normalement le C est plus rapide que Matlab.
    Est-ce que vous pensez que normale ou bien je n’ai pas bien codé la fonction?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    void matrice_F(float ***F,int M,int N, int O)
    {
    	   float ***Mt=alloue_tableau(vs,vs,s);
            matrice_Mt(Mt,vs,vs,s);
     
     
         float **P=alloue_mtrice(vs,vs);
         matrice_Mr(P,vs,vs);
     
     
        int i,j,k;   
           for (k = 0; k < O; k++)
     
        {
            for (i = 0; i < M; i++)
            {
    			for (j = 0; j < N; j++)
                 {   
     
    				 if (k<dv)
                       {
    		   flash[i][j][k]=0;
    	               }
    	             else
    	               {
     
            F[i][j][k]=(2*Q)/(E*sqrt(pow(M_PI,3)*Mt[i][j][k]))*(1/(pow(R,2)+8*D*Mt[i][j][k]))*exp((-2*pow(P[i][j],2))/(pow(R,2)+8*D*Mt[i][j][k]));
     
    	               }
                }
           }
       }
       	libre_tab(Mt,vs,vs);
       	libre_matrice(P);
    }
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    On t'a déjà dit à plusieurs reprises que ton truc est un gouffre à perf.
    En plus que l'utilisation de tableau à 3 dimensions est une hérésie.
    Sans compter les 2 matrices temporaires sûrement dispensables, du mauvais C ne sera pas plus rapide que Matlab.

    https://c.developpez.com/faq/?page=L...a-2-dimensions
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par conanran Voir le message
    La même fonction a été codé sous Matlab et le temps de calcul est beaucoup moins inférieur, malgré que normalement le C est plus rapide que Matlab.
    Sachant que Matlab est écrit en partie en C et C++
    Et donc que les calculs mathématique sur Matlab sont sûrement bien optimisé et écrit en C ou C++ derrière

    Sinon ton code est vachement horrible à lire , et les triples pointeur c'est le truc que personnellement j'éviterai (enfaîte je n’ai jamais utilisé de triple pointeur pour dire ) , un vrai nid a bug ces machins là !

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Certains t'ont déjà fait des remarques dans tes autres topics concernant l'utilisation de tableaux3D dupliqués et redupliqués, remarques que tu ne prends visiblement pas en compte. De mon côté je rajoute que je t'ai déjà parlé des avantages d'écrire du code bien indenté qui permet de le lire facilement et je vois que tu n'en tiens là aussi pas non plus compte avec ce code et son indentation de merde.
    Donc visiblement tu n'aimes pas le C donc tu nous excuseras si de notre côté nous n'avons pas envie d'investir du temps et des efforts pour rien.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Par défaut
    Merci Sve@r pour tes conseils et tes remarques pertinentes

    Par ailleurs, ce n’est pas question que je n’aime pas le C, mais la réalité que j’ai commencée il y a deux semaines à coder avec le C et je le trouve très difficile et d'ailleurs parfois je ne comprends même pas tes remarques, pref j’applique ce que je comprends.
    Je comprends aussi que vous n’avez pas envie d'investir du temps et des efforts pour les débutants.
    Merci encore…

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 494
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Si tu as commencé le C il y a 2 semaines, alors clairement attaquer des tableaux à 3 dimensions est un sujet bien trop difficile pour toi. Ca fait 10 ans que j'ai appris le C (aïe ça pique d'écrire ça !) et clairement ce genre de choses me fait peur, comme Kannagi. Es-tu obligé de devoir utiliser le C pour résoudre ce problème ? Est-ce un exercice ? Un TP ? Un projet ? Un stage ?

    Je comprends aussi que vous n’avez pas envie d'investir du temps et des efforts pour les débutants.
    Et pourtant ces 3 personnes ont déjà investi du temps pour toi et on encore une fois pris le temps de te répondre

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 195
    Par défaut
    @Bktero
    j'ai dit merci pour toutes et tous (même les personnes qui n'ont pas répondues ). Oui, effectivement je travaille sur un projet que doit le faire avec C., dans l'habitude j'utilise que Matlab. Et malheureusement il y a beaucoup de tableaux
    Merci

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par conanran Voir le message
    mais la réalité que j’ai commencée il y a deux semaines à coder avec le C et je le trouve très difficile
    Et ça t'empêche de bien l'écrire ??? C'est donc si difficile que ça de remplacer cet immonde
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void matrice_F(float ***F,int M,int N, int O)
    {
    	   float ***Mt=alloue_tableau(vs,vs,s);
            matrice_Mt(Mt,vs,vs,s);
     
     
         float **P=alloue_mtrice(vs,vs);
         matrice_Mr(P,vs,vs);
     
     
        int i,j,k;   
           for (k = 0; k < O; k++)
     
        {
            for (i = 0; i < M; i++)
            {
    			for (j = 0; j < N; j++)
                 {   
     
    				 if (k<dv)
                       {
    		   flash[i][j][k]=0;
    	               }
    	             else
    	               {
     
            F[i][j][k]=(2*Q)/(E*sqrt(pow(M_PI,3)*Mt[i][j][k]))*(1/(pow(R,2)+8*D*Mt[i][j][k]))*exp((-2*pow(P[i][j],2))/(pow(R,2)+8*D*Mt[i][j][k]));
     
    	               }
                }
           }
       }
       	libre_tab(Mt,vs,vs);
       	libre_matrice(P);
    }

    Par un élégant
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    void matrice_F(float ***F,int M,int N, int O)
    {
    	float ***Mt=alloue_tableau(vs,vs,s);
    	matrice_Mt(Mt,vs,vs,s);
    	float **P=alloue_mtrice(vs,vs);
    	matrice_Mr(P,vs,vs);
     	int i,j,k;   
     
    	for (k = 0; k < O; k++)
    	{
    		for (i = 0; i < M; i++)
    		{
    			for (j = 0; j < N; j++)
    			{
    				if (k<dv)
    				{
    					flash[i][j][k]=0;
    				}
    				else
    				{
    					F[i][j][k]=(2*Q)/(E*sqrt(pow(M_PI,3)*Mt[i][j][k]))*(1/(pow(R,2)+8*D*Mt[i][j][k]))*exp((-2*pow(P[i][j],2))/(pow(R,2)+8*D*Mt[i][j][k]));
    				}
    			}
    		}
    	}
       	libre_tab(Mt,vs,vs);
       	libre_matrice(P);
    }
    ??? Et encore je dis "remplacer" mais ça ne devrait même être le cas puisque (en théorie) ce code indenté devrait venir naturellement dès son écriture. Et là, je remarque alors du premier coup d'oeuil que la variable "flash" n'existe pas.

    Citation Envoyé par conanran Voir le message
    et d'ailleurs parfois je ne comprends même pas tes remarques
    T'as le droit de dire "je n'ai pas compris tel ou tel truc"

    Citation Envoyé par conanran Voir le message
    bref j’applique ce que je comprends.
    Ben non. Ou alors tu n'as pas compris ce que signifie "indenter son code".

    Citation Envoyé par conanran Voir le message
    Je comprends aussi que vous n’avez pas envie d'investir du temps et des efforts pour les débutants.
    Très bel exemple de sophisme. Je n'ai pas envie d'aider un débutant qui montre qu'il n'a que faire des aides qu'on lui apporte donc je n'ai pas envie d'aider les débutants en général.
    On est là pour aider mais aider ceux qui s'investissent, c'est à dire qui déjà appliquent les premières remarques de base. On (ou du moins moi) en revanche je ne vais pas investir du temps sur quelqu'un qui visiblement n'en a rien à faire (donc fatalement à perte).
    Accessoirement tu as une sous-branche "débutant" du forum spécialement dédiée aux débutants et tu verras qu'il y a beaucoup de réponses.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 300
    Par défaut
    Pour commencer comprends ce qu'est indenter le code ?
    Au cas ou la réponse est non, il s'agit de l'organiser en décalant les lignes par des tabulations de façon à voir les différentes structures imbriqués. Et dès que le code commence à prendre de l'ampleur, ça devient quasi obligatoire.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    if (condition)
    {
       for (boucle;boucle<10;++boucle)
      {
          for (boucle_deux;boucle_deux<10;++boucle_deux)
          {
             ...
          }
      }
    }
    else
    {
      ...
    }
    Tu vois tout de suite l’intérêt pour la relecture et la compréhension.
    Et surtout que le moindre EDI le fait tout seul.

    Ensuite une ligne comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    F[i][j][k]=(2*Q)/(E*sqrt(pow(M_PI,3)*Mt[i][j][k]))*(1/(pow(R,2)+8*D*Mt[i][j][k]))*exp((-2*pow(P[i][j],2))/(pow(R,2)+8*D*Mt[i][j][k]));
    C'est imbitable. Nomme correctement tes variables avec un nom explicite au lieu de i,j,k. Surtout si ton code doit être relu par d'autres.

    Et je te garantie que tu seras content de l'avoir fait dans 2 ans si tu dois relire le code.
    Par ailleurs, une ligne comme ça je l'aurais fait en plusieurs lignes pour la clarté. décomposes. Ce n'est pas parce que tu mets l'équivalent de ce code sur plusieurs lignes que ce sera plus long, c'est au compilateur d'optimiser. Mais il n'optimisera pas ton algorithme.
    Je ne sais pas ce que tu cherches à faire comme calcul, mais saches qu'il existe des bibliothèques spécialisées pour plein de choses. Ça évites de réinventer la roue, ça évite les erreurs, et c'est peut-être plus optimisé que ce que tu feras.
    Bien que le faire toi même, c'est bien pour apprendre.

    La solution t'a été donnée lors du 1er post (de Bousk).

    Et gardes à l'esprit qu'en temps que débutant, faire un code qui marche est le 1er objectif à atteindre. Le rendre plus efficace, c'est après.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. temps de calcul RSA
    Par othland dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 13/03/2006, 11h16
  2. Temps de calcul d'un algo
    Par Rémiz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 23/12/2005, 13h52
  3. temps de calcul sius VC++ !!
    Par Axiome dans le forum MFC
    Réponses: 16
    Dernier message: 13/12/2005, 09h57
  4. Temps de calcul avec deux écrans
    Par Shaga dans le forum OpenGL
    Réponses: 2
    Dernier message: 14/11/2005, 09h24
  5. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12

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