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

Threads & Processus C++ Discussion :

Thread et optimisation en fonction du systeme


Sujet :

Threads & Processus C++

  1. #1
    Membre �m�rite
    Avatar de Ange_blond
    Homme Profil pro
    Ing�nieur d�veloppement en 3D temps r�el
    Inscrit en
    Mars 2007
    Messages
    902
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement en 3D temps r�el
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par d�faut Thread et optimisation en fonction du systeme
    Bonjour,

    Voil�, pour mon application c++ que je suis en train de passer en multi-thread pour des gains de temps, j'ai cr�� mon pool de thread.
    Pour dimensionner ce pool efficacement, j'aimerais connaitre le nombre de core/processeurs disponibles sur la machine qui va executer le code.

    Pour des soucis de stats et de perfs aussi, j'aimerais connaitre l'�tat de la m�moire (savoir si je peux encore allouer ou si je dois stopper au lieu de d�clencher un out of memory)

    Merci.

    Ange_blond.

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par Ange_blond Voir le message
    Bonjour,
    Salut,
    Je vais r�pondre � c�t�.
    J'ai le sentiment que ce ne sont pas de bonnes questions :
    Citation Envoy� par Ange_blond Voir le message
    Voil�, pour mon application c++ que je suis en train de passer en multi-thread pour des gains de temps, j'ai cr�� mon pool de thread.
    Pour dimensionner ce pool efficacement, j'aimerais connaitre le nombre de core/processeurs disponibles sur la machine qui va executer le code.
    Le multithreading n'a pas pour objectif de faire des gains de perfs mais permettre l'ex�cution concurrente de fil. Pour des gains de perfs, il faut descendre 'plus bas' avec du parall�lisme (type OpenMP) ou GPGPU

    Citation Envoy� par Ange_blond Voir le message
    Pour des soucis de stats et de perfs aussi, j'aimerais connaitre l'�tat de la m�moire (savoir si je peux encore allouer ou si je dois stopper au lieu de d�clencher un out of memory)
    Imagine le sc�nario suivant :
    Thread 1 : est-ce que je peux allouer ? -> r�ponse oui
    Thead 2 prend la main : est-ce que je peux allouer ? -> r�ponse oui. Thread 2 alloue.
    Thread 1 reprend la main : alloue mais se prend une exception car la r�ponse pr�c�dente n'est plus d'actualit�.

    J'aurais tendance � conclure de ne pas chercher � faire ce genre de chose.

  3. #3
    Membre �m�rite
    Avatar de Ange_blond
    Homme Profil pro
    Ing�nieur d�veloppement en 3D temps r�el
    Inscrit en
    Mars 2007
    Messages
    902
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement en 3D temps r�el
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par d�faut
    Salut,

    Je prend bien en compte tes remarques, et je me suis peu etre mal exprim�, mais je reste malgr� tout s�r de ma demande.
    Pour dimentionner efficacement un pool de threads, j'aimerais savoir combien de core la machine possede.
    Pour la m�moire, il s'agit plus d'un simple warning qui sera donn� en disant que la m�moire devient limite, ou qu'il devient risqu� au programme de continuer.

    Je suis au fait des GPGPU mais ce n'est pas mon objectif pour le moment...

    Merci pour tes remarques, cependant je r�itere ma demande.

    Ange_blond

  4. #4
    screetch
    Invit�(e)
    Par d�faut
    quelle plate forme ?

  5. #5
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Citation Envoy� par Ange_blond Voir le message
    Pour dimentionner efficacement un pool de threads, j'aimerais savoir combien de core la machine possede.
    Pour la m�moire, il s'agit plus d'un simple warning qui sera donn� en disant que la m�moire devient limite, ou qu'il devient risqu� au programme de continuer.
    Quel OS ?

    Pour Microsoft, il y a GetSystemInfo() qui retourne d�j� pas mal d'information dont le nombre de processeurs/coeurs
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  6. #6
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

  7. #7
    Membre �m�rite
    Avatar de Ange_blond
    Homme Profil pro
    Ing�nieur d�veloppement en 3D temps r�el
    Inscrit en
    Mars 2007
    Messages
    902
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement en 3D temps r�el
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par d�faut
    Whaa vous etes efficaces de ce cot� ci du forum ^^

    Je vais jetter un oeil � tout �a mais niveau processeur y'a de quoi faire visiblement.

    Pour r�pondre quand meme : je d�veloppe sous MS, mais il se peux que l'application soit port�e sous Linux aussi.

    Et j'en profite pour relancer la question sur la gestion m�moire ... connaissez vous un moyen de r�cuperer la m�moire restante dispo sur le systeme ?

    Merci.

  8. #8
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Citation Envoy� par Ange_blond Voir le message
    Et j'en profite pour relancer la question sur la gestion m�moire ... connaissez vous un moyen de r�cuperer la m�moire restante dispo sur le systeme ?
    GlobalMemoryStatusEx() ?
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  10. #10
    Membre �m�rite
    Avatar de Ange_blond
    Homme Profil pro
    Ing�nieur d�veloppement en 3D temps r�el
    Inscrit en
    Mars 2007
    Messages
    902
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement en 3D temps r�el
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par d�faut
    Merci tout plein, j'ai ce qu'il me faut.

    A tout hasard, vous connaitriez les equivalents sous linux ?

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    �quivalents de quelle(s) fonction(s) Windows exactement ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  12. #12
    Membre �m�rite
    Avatar de Ange_blond
    Homme Profil pro
    Ing�nieur d�veloppement en 3D temps r�el
    Inscrit en
    Mars 2007
    Messages
    902
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement en 3D temps r�el
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par d�faut
    De celles qui permettent de r�cuperer l'�tat de la m�moire du systeme et le nombre de core :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    GetSystemInfo()
    GlobalMemoryStatusEx()
    Merci.

  13. #13
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Ouch, peux pas t'aider sur ce coup... Vaudrait peut-�tre mieux poser la question sur le forum Programmation Linux ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par d�faut
    Je viens de voir qu'un lien avait �t� fait vers ma r�ponse au sujet des techniques pour analyser les processeurs 0x86.
    J'ai fait depuis quelques modifs pour prendre en compte les processeurs � 4 coeurs, et leur cache L3.
    Voice les sources; A la suite, y'a un petit exemple d'utilisation.

    Par contre je ne sais toujours pas comment connaitre le nombre total de processeurs autrement que par un appel � l'API de l'OS. (et je ne connais pas la fonction correspondante pour Linux, j'ai pas cherch�)

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    #ifndef CPUID_H
    #define CPUID_H
     
    #include <string.h>
     
     
    struct cpuid_reg { unsigned int eax,ebx,ecx,edx; };
     
    #if (defined(__ICL) || defined(_MSC_VER)) && defined(WIN32)
     
    inline cpuid_reg _cpuid(unsigned int a, unsigned int c=0)
    {
      cpuid_reg r;
      //__try 
      //{
        _asm  
        {
          mov eax, a
          mov ecx, c
          cpuid
          mov r.eax, eax
          mov r.ebx, ebx
          mov r.ecx, ecx
          mov r.edx, edx
        }
      //} __except (EXCEPTION_EXECUTE_HANDLER) { r.eax=r.ebx=r.ecx=r.edx=0; }
      return r;
    }
    #elif defined(__GNUC__) && (defined(i386)||defined(__x86_64__))
    inline cpuid_reg _cpuid(unsigned int a, unsigned int c=0)
    {
      cpuid_reg r;
      __asm__("cpuid":"=a"(r.eax),"=b"(r.ebx),"=c"(r.ecx),"=d"(r.edx):"a"(a),"c"(c));
      return r;
    }
    #else
    inline cpuid_reg _cpuid(unsigned int a, unsigned int c=0)
    {
      cpuid_reg r={0,0,0,0};
      return r;
    }
    #endif
     
    inline cpuid_reg cpuid(unsigned int a, unsigned int c=0)
    {
      if (a<=_cpuid(0).eax) return _cpuid(a,c);
      cpuid_reg r={0,0,0,0};
      return r;
    }
     
    inline cpuid_reg cpuid_ext(unsigned int a, unsigned int c=0)
    {
      a|=0x80000000;
      if (a<=_cpuid(0x80000000).eax) return _cpuid(a,c);
      cpuid_reg r={0,0,0,0};
      return r;
    }
     
    static char _cpu_vendor[13];
    static char _cpu_name[48];
    inline char *cpu_vendor() { unsigned int *p=(unsigned int *)_cpu_vendor; cpuid_reg reg=cpuid(0); p[0]=reg.ebx; p[1]=reg.edx; p[2]=reg.ecx; _cpu_vendor[12]='\0'; return _cpu_vendor; }
    inline char *cpu_name  () { unsigned int *p=(unsigned int *)_cpu_name; cpuid_reg reg; reg=cpuid_ext(2); p[0]=reg.eax; p[1]=reg.ebx; p[2]=reg.ecx;  p[3]=reg.edx; reg=cpuid_ext(3); p[4]=reg.eax; p[5]=reg.ebx; p[6]=reg.ecx;  p[7]=reg.edx; reg=cpuid_ext(4); p[8]=reg.eax; p[9]=reg.ebx; p[10]=reg.ecx;  p[11]=reg.edx; for (int i=0; i<48; ++i) if (_cpu_name[i]!=' ') return &_cpu_name[i]; return NULL; }
    inline bool intel_cpu () { cpuid_reg reg=cpuid(0); return reg.ebx==0x756E6547;  }
    inline bool amd_cpu   () { cpuid_reg reg=cpuid(0); return reg.ebx==0x68747541; }
     
    inline bool mmx_cpu   () { return (cpuid(1).edx&0x00800000)!=0; }
    inline bool fxsr_cpu  () { return (cpuid(1).edx&0x01000000)!=0; }
    inline bool sse_cpu   () { return (cpuid(1).edx&0x02000000)!=0; }
    inline bool sse2_cpu  () { return (cpuid(1).edx&0x04000000)!=0; }
    inline bool htt_cpu   () { return (cpuid(1).edx&0x10000000)!=0; }
     
    inline bool sse3_cpu  () { return (cpuid(1).ecx&0x00000001)!=0; }
    inline bool vmx_cpu   () { return (cpuid(1).ecx&0x00000020)!=0; }
    inline bool eist_cpu  () { return (cpuid(1).ecx&0x00000080)!=0; }
    inline bool tm2_cpu   () { return (cpuid(1).ecx&0x00000100)!=0; }
    inline bool ssse3_cpu () { return (cpuid(1).ecx&0x00000200)!=0; }
    inline bool ia64_cpu  () { return (cpuid(1).ecx&0x40000000)!=0; }
    inline bool sse41_cpu () { return (cpuid(1).ecx&0x00080000)!=0; }
    inline bool sse42_cpu () { return (cpuid(1).ecx&0x00100000)!=0; }
     
    inline bool amdlegacy_cpu() { return (cpuid_ext(1).ecx&0x00000002)!=0; }
    inline bool sse5_cpu     () { return (cpuid_ext(1).ecx&0x00000800)!=0; }
    inline bool amdmmx_cpu() { return (cpuid_ext(1).edx&0x00400000)!=0; }
    inline bool amd64_cpu () { return (cpuid_ext(1).edx&0x20000000)!=0; }
    inline bool amd3dnowext_cpu() { return (cpuid_ext(1).edx&0x40000000)!=0; }
    inline bool amd3dnow_cpu   () { return (cpuid_ext(1).edx&0x80000000)!=0; }
     
    inline bool x64_cpu() { return ia64_cpu() || amd64_cpu(); }
    inline bool ht_cpu () { return (intel_cpu()) ? ((cpuid(1).ebx>>16)&0xFF)>1 : false; } 
    //inline unsigned int cpu_threads () { if (intel_cpu()) return (((cpuid(4).eax>>26)&0x03F)+1)*((cpuid(1).ebx>>16)&0xFF); if (!htt_cpu()) return 1; if (amdlegacy_cpu()) return (cpuid(1).ebx>>16)&0xFF; return (cpuid_ext(8).ecx&0xFF)+1; }
    inline unsigned int cpu_threads  () { return (intel_cpu()) ? (cpuid(1).ebx>>16)&0xFF : 1; if (!htt_cpu()) return 1; if (amdlegacy_cpu()) return (cpuid(1).ebx>>16)&0xFF; return (cpuid_ext(8).ecx&0xFF)+1; }
    inline unsigned int cpu_cores    () { if (intel_cpu()) return ((cpuid(4).eax>>26)&0x03F)+1; if (!htt_cpu()) return 1; if (amdlegacy_cpu()) return (cpuid(1).ebx>>16)&0xFF; return (cpuid_ext(8).ecx&0xFF)+1; }
    inline unsigned int core_threads () { return cpu_threads()/cpu_cores(); }
    inline unsigned int l1_threads   () { return ((cpuid(4,1).eax>>14)&0xFFF)+1; }
    inline unsigned int l2_threads   () { return ((cpuid(4,2).eax>>14)&0xFFF)+1; }
    inline unsigned int l3_threads   () { return ((cpuid(4,3).eax>>14)&0xFFF)+1; }
    inline unsigned int l1_size     () { if (intel_cpu()) { cpuid_reg reg=cpuid(4,1); return (((reg.ebx>>22)&0x3FF)+1)*(((reg.ebx>>12)&0x3FF)+1)*((reg.ebx&0xFFF)+1)*(reg.ecx+1); } return 1024*(cpuid_ext(5).ecx>>24); }
    inline unsigned int l2_size     () { if (intel_cpu()) { cpuid_reg reg=cpuid(4,2); return (((reg.ebx>>22)&0x3FF)+1)*(((reg.ebx>>12)&0x3FF)+1)*((reg.ebx&0xFFF)+1)*(reg.ecx+1); } return 1024*(cpuid_ext(6).ecx>>16); }
    inline unsigned int l3_size     () { if (intel_cpu()) { cpuid_reg reg=cpuid(4,3); return (((reg.ebx>>22)&0x3FF)+1)*(((reg.ebx>>12)&0x3FF)+1)*((reg.ebx&0xFFF)+1)*(reg.ecx+1); } return  512*(cpuid_ext(6).edx>>18); }
     
     
     
    #if (defined(__ICL) || defined(_MSC_VER)) && defined(WIN32)
     
      #ifndef _WIN32_WINNT
        #define _WIN32_WINNT 0x0403
      #endif
      #include <windows.h>
      #undef min
      #undef max
     
      inline int os_threads()
      {
        SYSTEM_INFO info;
        ::GetSystemInfo(&info);
        return info.dwNumberOfProcessors;
      }
    #elif (defined(__MACOSX__) || defined(__APPLE__))
      #include <Multiprocessing.h>
      inline int os_threads() { return MPProcessorsScheduled(); }
    #else
      inline int os_threads() { return cpu_threads(); }
    #endif
     
    inline int os_cores() { return os_threads()/core_threads(); }
     
    #endif
     
     
    //#include "cpuid.h"
    //#include <string>
    //#include <iostream>
    //#include <fstream>
    //using namespace std;
    //int main()
    //{
    //  ofstream fout((string(cpu_name())+".txt").c_str());
    //  
    //  cout << "Name  \t" << cpu_name  () << endl;
    //  cout << "Vendor\t" << cpu_vendor() << endl;
    //  cout << "Intel \t" << intel_cpu() << endl;
    //  cout << "Amd   \t" << amd_cpu  () << endl;
    //  cout << "X64   \t" << x64_cpu  () << endl;
    //  cout << endl;
    //  cout << "MMX    \t" << mmx_cpu        () << endl;
    //  cout << "SSE    \t" << sse_cpu        () << endl;
    //  cout << "SSE2   \t" << sse2_cpu       () << endl;
    //  cout << "SSE3   \t" << sse3_cpu       () << endl;
    //  cout << "SSSE3  \t" << ssse3_cpu      () << endl;
    //  cout << "SSE4.1 \t" << sse41_cpu      () << endl;
    //  cout << "SSE4.2 \t" << sse42_cpu      () << endl;
    //  cout << "MMX+   \t" << amdmmx_cpu     () << endl;
    //  cout << "3DNow! \t" << amd3dnow_cpu   () << endl;
    //  cout << "3DNow!+\t" << amd3dnowext_cpu() << endl;
    //  cout << endl;
    //  cout << "L1 size\t" << l1_size() << endl;
    //  cout << "L2 size\t" << l2_size() << endl;
    //  cout << "L3 size\t" << l3_size() << endl;
    //  cout << endl;
    //  cout << "Threads serviced by L1 \t" << l1_threads      () << endl;
    //  cout << "Threads serviced by L2 \t" << l2_threads      () << endl;
    //  cout << "Threads serviced by L3 \t" << l3_threads      () << endl;
    //  cout << endl;
    //  cout << "Cores per cpu        \t" << cpu_cores     () << endl;
    //  cout << "Cores from OS        \t" << os_cores      () << endl;  
    //  cout << "Threads per cpu      \t" << cpu_threads   () << endl;
    //  cout << "Threads from OS      \t" << os_threads    () << endl;  
    //}

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par Charlemagne Voir le message
    Par contre je ne sais toujours pas comment connaitre le nombre total de processeurs autrement que par un appel � l'API de l'OS. (et je ne connais pas la fonction correspondante pour Linux, j'ai pas cherch�)
    Le nombre total de CPU, c'est bien �a ? Pas le nombre de c�urs d'un CPU donn� ?

    C'est normal : ton code s'ex�cute sur un seul processeur, donc forc�ment, il n'a pas "conscience" explicitement du nombre d'autres processeurs pr�sents sur le syst�me... Tout au plus, tu dois pouvoir savoir s'il est en mode SP, DP ou MP (resp. un seul, deux, ou N CPU), mais c'est tout. Seul point positif : en mode SP, tu sais d'avance qu'il n'y a qu'un seul CPU, et en DP, que le deuxi�me est tr�s exactement identique au premier. En mode MP, c'est plus complexe bien entendu...

    Pour savoir �a, il faudrait taper dans le chipset de la carte-m�re je pense, qui lui doit avoir ce genre d'informations. Autant taper dans l'OS, ce sera nettement plus portable...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par d�faut
    Citation Envoy� par Mac LAK Voir le message
    Tout au plus, tu dois pouvoir savoir s'il est en mode SP, DP ou MP (resp. un seul, deux, ou N CPU), mais c'est tout. Seul point positif : en mode SP, tu sais d'avance qu'il n'y a qu'un seul CPU, et en DP, que le deuxi�me est tr�s exactement identique au premier. En mode MP, c'est plus complexe bien entendu...
    je connaissais pas les modes SP,DP,MP: tu sais ou r�cup�rer cette info?

  17. #17
    zul
    zul est d�connect�
    Membre chevronn� Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par d�faut
    Sous Linux (et un certain nombre d'Unixoide), tu dois pouvoir lire /proc/cpuinfo, /proc/meminfo voir /proc/vminfo pour r�cup�rer les informations dont tu as besoin. Pas d'API standardis� que je connaisse � ce sujet.

  18. #18
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par Charlemagne Voir le message
    je connaissais pas les modes SP,DP,MP: tu sais ou r�cup�rer cette info?
    Je ne sais m�me pas si c'est possible sur les processeurs qui ne sont pas des Xeon, et m�me dans ce cas, je ne connais pas l'opcode ad�quat (enfin, je ne l'ai jamais cherch� non plus je dois dire). D'un autre c�t�, seuls les Xeon sont th�oriquement capables d'�tre en mode DP/MP*, donc �a limite un peu la casse aussi.
    Faudrait peut-�tre faire un tour sur le site Intel pour �a : il doit s�rement y avoir une datasheet quelque part indiquant comment r�cup�rer le mode du processeur...


    * A v�rifier toutefois, �a a peut-�tre chang� depuis...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. probleme d'optimisation de fonction
    Par franc82 dans le forum C++
    R�ponses: 3
    Dernier message: 31/10/2006, 09h45
  2. R�ponses: 1
    Dernier message: 09/08/2006, 16h04
  3. Optimisation de fonction
    Par Elendhil dans le forum Assembleur
    R�ponses: 2
    Dernier message: 19/06/2006, 15h03
  4. Optimisation de fonction ...
    Par dark_vidor dans le forum Langage
    R�ponses: 10
    Dernier message: 02/01/2006, 11h50
  5. [Threads] Sortir d'une fonction bloquante
    Par guejo dans le forum MFC
    R�ponses: 19
    Dernier message: 17/08/2004, 14h12

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