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 :

Nombre de processeurs


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Nombre de processeurs
    Bonjour,

    J'ai un bi processeur, mais quand j'utilise le code suivant proposé par windows je ne trouve pas mon second processeur (voir image)

    Nom : taches.png
Affichages : 604
Taille : 53,7 Ko

    Alors que le code mode donne:

    GetLogicalProcessorInformation results:
    Number of NUMA nodes: 1
    Number of physical processor sockets: 1
    Number of processor cores: 20
    Number of logical processors: 40
    Number of processor L1/L2/L3 caches: 40/20/1

    Merci d'avance de votre aide

    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
     
    typedef BOOL (WINAPI *LPFN_GLPI)(
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
        PDWORD);
     
     
    // Helper function to count set bits in the processor mask.
    DWORD CountSetBits(ULONG_PTR bitMask)
    {
        DWORD LSHIFT = sizeof(ULONG_PTR)*8 - 1;
        DWORD bitSetCount = 0;
        ULONG_PTR bitTest = (ULONG_PTR)1 << LSHIFT;
        DWORD i;
     
        for (i = 0; i <= LSHIFT; ++i)
        {
            bitSetCount += ((bitMask & bitTest)?1:0);
            bitTest/=2;
        }
     
        return bitSetCount;
    }
     
    int _tmain ()
    {
        LPFN_GLPI glpi;
        BOOL done = FALSE;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
        PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
        DWORD returnLength = 0;
        DWORD logicalProcessorCount = 0;
        DWORD numaNodeCount = 0;
        DWORD processorCoreCount = 0;
        DWORD processorL1CacheCount = 0;
        DWORD processorL2CacheCount = 0;
        DWORD processorL3CacheCount = 0;
        DWORD processorPackageCount = 0;
        DWORD byteOffset = 0;
        PCACHE_DESCRIPTOR Cache;
     
        glpi = (LPFN_GLPI) GetProcAddress(
                                GetModuleHandle(TEXT("kernel32")),
                                "GetLogicalProcessorInformation");
        if (NULL == glpi)
        {
            printf("\nGetLogicalProcessorInformation is not supported.\n");
            return (1);
        }
     
        while (!done)
        {
            DWORD rc = glpi(buffer, &returnLength);
     
            if (FALSE == rc)
            {
                if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
                {
                    if (buffer)
                        free(buffer);
     
                    buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
                            returnLength);
     
                    if (NULL == buffer)
                    {
                        printf("\nError: Allocation failure\n");
                        return (2);
                    }
                }
                else
                {
                    printf("\nError %d\n", GetLastError());
                    return (3);
                }
            }
            else
            {
                done = TRUE;
            }
        }
     
        ptr = buffer;
     
        while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength)
        {
            switch (ptr->Relationship)
            {
            case RelationNumaNode:
                // Non-NUMA systems report a single record of this type.
                numaNodeCount++;
                break;
     
            case RelationProcessorCore:
                processorCoreCount++;
     
                // A hyperthreaded core supplies more than one logical processor.
                logicalProcessorCount += CountSetBits(ptr->ProcessorMask);
                break;
     
            case RelationCache:
                // Cache data is in ptr->Cache, one CACHE_DESCRIPTOR structure for each cache.
                Cache = &ptr->Cache;
                if (Cache->Level == 1)
                {
                    processorL1CacheCount++;
                }
                else if (Cache->Level == 2)
                {
                    processorL2CacheCount++;
                }
                else if (Cache->Level == 3)
                {
                    processorL3CacheCount++;
                }
                break;
     
            case RelationProcessorPackage:
                // Logical processors share a physical package.
                processorPackageCount++;
                break;
     
            default:
                printf("\nError: Unsupported LOGICAL_PROCESSOR_RELATIONSHIP value.\n");
                break;
            }
            byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
            ptr++;
        }
     
        printf("\nGetLogicalProcessorInformation results:\n");
        printf("Number of NUMA nodes: %d\n",
                numaNodeCount);
        printf("Number of physical processor sockets: %d\n",
                processorPackageCount);
        printf("Number of processor cores: %d\n",
                processorCoreCount);
        printf("Number of logical processors: %d\n",
                logicalProcessorCount);
        printf("Number of processor L1/L2/L3 caches: %d/%d/%d\n",
                processorL1CacheCount,
                processorL2CacheCount,
                processorL3CacheCount);
     
        free(buffer);
     
        return 0;
    }

  2. #2
    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 : 36
    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
    Quel rapport avec le C++ ?
    (et même ton code , c'est du C et non du C++ ).

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    J'ai travaillé sur un code identique il y a quelques jours mais sans multiprocessor. Je m'attendrais à ce que ce soit le truc Numa qui donne le nombre de processeurs ?
    Sinon je ne sais pas quel API fournirait ça, et Google est assez avare en information...
    Par contre oui l'exemple fourni est en C et franchement médiocre.
    Tu peux appeler directement GetLogicalProcessorInformationEx, pas besoin de getprocaddress etc.
    Pour le buffer, un std::vector<uint8_t> fait l'affaire et remplace très bien le malloc.

    Peut-être qu'avec GetLogicalProcessorInformationEx et RelationAll tu auras de meilleurs résultats.
    https://devblogs.microsoft.com/oldne...028-00/?p=2823
    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.

  4. #4
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    Merci de votre suggestion, malheureusement visiblement mon compilateur GCC (4.7.1) est visiblement trop vieux parce qu'il ne reconnait par GetLogicalProcessorInformationEX.

    Mon Qt (5.4.1) doit l'être aussi parce que la fonction QThread::idealThreadCount() répond 40 au lieu des 80 attendus

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Pour compter le nombre de coeurs logiques, j'utilise ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    uint32_t getCoreCount()
    {
    	SYSTEM_INFO sysinfo = { 0 };
    	::GetSystemInfo( &sysinfo );
    	return uint32_t( sysinfo.dwNumberOfProcessors );
    }
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    Oui essayé ca aussi sans plus de résultats probants

  7. #7
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Merci de votre suggestion, malheureusement visiblement mon compilateur GCC (4.7.1) est visiblement trop vieux parce qu'il ne reconnait par GetLogicalProcessorInformationEX.
    Je pense qu'il est vivement préférable d'utiliser la dernière version de Visual Studio.
    Après si ces API windows sont compliquées à utiliser avec Qt faire une dll à part qui appelle ces API windows

  8. #8
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,
    Je n'utilise pas du tout visual studio et je préfère poursuivre avec GNU gcc. Cela dit, les API Windows ne sont absolument pas compliquées à utiliser avec Q, ce n'est pas le souci. Je suis tout de même surpris qu'il n'existe pas de méthode même avec un gcc ancien de détecter le nombre de processeur. Les machine bi-pro existe depuis des décennies.

  9. #9
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Sans aller jusqu'à utiliser msvc, tu peux quand même mettre à jour gcc, on en est à la version 11.2...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui probablement qu'il faudrait, mais c'est une tache trop énorme pour que je me lance dans une telle démarche pour le moment.

  11. #11
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,
    Citation Envoyé par uriotcea Voir le message
    Oui probablement qu'il faudrait, mais c'est une tache trop énorme pour que je me lance dans une telle démarche pour le moment.
    "Trop énorme"!!! Il n'est pas question de le compiler toi-même (car ca, c'est effectivement pas forcément simple), mais simplement de le télécharger "tout fait", et de remplacer l'ancienne version par la nouvelle sur ton disque dur.

    Une distribution que j'apprécie particulièrement, entre autres, parce qu'elle a le bon gout d'y ajouter un certain nombre de bibliothèques tierces intéressantes quand on en a besoin, est celle de nuwen, actuellement basée sur la version 11.2.0 de Gcc

    Le exe n'est en fait qu'une archive auto extractable de type 7zip, et les scripts de création sont à discrétion, pour le cas où tu craindrait pour la sécurité de ton système

    Il n'y a au final que si tu souhaite utiliser Qt que tu devras peut-être envisager de compiler Qt, car, a ma connaissance, ils utilisent le compilateur MinGW qu l'on trouve sur le site officiel, et qui n'est pas toujours la dernière version disponible
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci pour le lien, mais quand je parlais d' "Enorme" je pensais pas à l'installation de gcc, mais bien a la recompilation des Qt que j'utilise sur mac, linux, Windows, sans parler du gap de version sur Qt qui va me demander encore plus de boulot.
    Rien n'est infaisable, c'est juste une question de priorité.

    En tout cas, merci de votre aide

  13. #13
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    sans parler du gap de version sur Qt qui va me demander encore plus de boulot.
    bonsoir y-a-t-il tant de différences que ça entre les versions demandant plus de travail ?

  14. #14
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    Oui pour moi upgrader Qt et toutes les librairies associées que j'utilise le tout en version commercial et static sur les 3 OS est toujours quelque chose de compliquée me demandant vraiment beaucoup de travail. Je galére vraiment beaucoup sur MacOS en particulier.
    A savoir que je ne suis pas informaticien de formation. Ceci explique cela

  15. #15
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    merci pour la réponse uriotcea

  16. #16
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 186
    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 186
    Par défaut
    Je vois pas en quoi changer de compilateur va jouer sur l'utilisation d'une fonction système à savoir GetLogicalProcessorInformation.
    Je ne fais pas de C, donc quelque chose peut m'échapper, dans ce cas une explication sera appréciée.

    Le nom de la fonction fait penser qu'elle sert à obtenir des infos sur le CPU (en cours d'utilisation), pas forcément le nombre de CPU présent dans la machine.

    Et dans le cas d'une utilisation multiplateforme (Windows, Linux, MacOS), ce ne sera utilisable que sous Windows. Tu peux toujours faire de la compilation conditionnelle et utiliser une autre fonction selon la plateforme.

    J'ai pensé à un truc, selon la version de Windows/licence, tu n'as pas de limite dans le nombre de CPU ?
    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

  17. #17
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    Je suis absolument d'accord avec ta remarque, c'est un peu l'objet de mon post initiale. Cela dit, un compilateur comme gcc utilise de librairies systèmes propres, ce qui pourrait expliquer mon problème. Sauf que les bi-pro existe et devaient être correctement gérer depuis des décennies. D'où mon étonnement.
    Sur les autres OS que Windows, j'utilise bien la même version de gcc et évidement, j'utilise des directives de programmation pour faire la différence pour les commandes système. Mais là je peux pas vraiment comparé, parce que je n'ai là pas de bi-pro pour le faire.

  18. #18
    Membre chevronné
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2015
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Septembre 2015
    Messages : 213
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je vois pas en quoi changer de compilateur va jouer sur l'utilisation d'une fonction système à savoir GetLogicalProcessorInformation.
    Je ne fais pas de C, donc quelque chose peut m'échapper, dans ce cas une explication sera appréciée.
    Le compilateur a besoin des fichiers .h et .a/.lib pour appeler les fonctions des dll.

    s'il ne les a pas, il faut passer par GetProcAddress, en supposant connaître le nom de la méthode, les paramètres d'appels et de retours.


    pour GetLogicalProcessorInformation, c'est défini dans "sysinfoapi.h" (avec Windows 7 minimum sur le poste où tu compiles : _WIN32_WINNT >= 0x0601)

    j'ai regardé sur un vieux gcc (version 4.3.2), il n'a pas de "sysinfoapi.h" : donc tu ne peux pas faire d'appel direct à GetLogicalProcessorInformation
    donc passage par GetProcAddress

    sur les versions récentes de gcc, "sysinfoapi.h" est présent : donc tu peux faire un appel direct à GetLogicalProcessorInformation (sans passer par GetProcAddress)

  19. #19
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    C'est bien exactement ce qui est fait dans le code source de mon post initial !

  20. #20
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Tu peux essayer d'aller chercher l'information dans les variables d'environnement:
    Sur Windows tu as la variable : NUMBER_OF_PROCESSORS (nombre de processeurs logiques)

    Pour ce faire tu peux peut-être utiliser:
    cf: https://en.cppreference.com/w/cpp/ut...program/getenv
    ou
    la fonction GetEnvironmentVariableA (en espérant qu'elle soit présente sur Mingw et sur ta version)
    https://docs.microsoft.com/fr-fr/win...ectedfrom=MSDN

    Sinon tu peux peut être inclure une DLL avec du code extern C qui fait le boulot. Cette dll serait compiler avec un compilateur plus récent possédant GetLogicalProcessorInformationEX. (C'est pas jolie, mais ça fonctionnera.)


    Tu peux aussi exécuter une commande où tu récupéras dans le flux de sorti ou le code de retour le nombre de processeurs:

    Genre sur linux ça serait:
    Si ça peut aider:
    https://en.cppreference.com/w/cpp/ut...program/system

    Ou au lieu de lancer une commande bash tu peut exécuter un script et là aussi récupérer la sortie ou le code d'erreur:
    Exemple en python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def thread_count():
        # https://docs.python.org/3/library/multiprocessing.html#multiprocessing.cpu_count
        # https://stackoverflow.com/questions/1006289/how-to-find-out-the-number-of-cpus-using-python
        if sys.platform.startswith('linux') or sys.platform.startswith('aix'):
            return len(os.sched_getaffinity(0))
        elif sys.platform.startswith('win32') or sys.platform.startswith('cygwin'):
            return len(psutil.Process().cpu_affinity())
        elif sys.platform.startswith('darwin'):
            return os.cpu_count()
        else:
            assert False, "La plateforme «" + sys.platform + "» n'est pas encore gérée."
    Sur Windows tu peux aussi lancer la commande
    dxdiag /x D:\toto.txt

    Puis parser le fichier résultant avec un regex ou pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Processor>11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz (16 CPUs), ~2.3GHz</Processor>
    Ces solutions ne sont pas vraiment belles, mais au moins ça peut te sauver la mise vue que tu ne peux pas mettre à jour facilement ton compilateur.

Discussions similaires

  1. connaitre le nombre de processeur utilisés
    Par manue85 dans le forum AIX
    Réponses: 2
    Dernier message: 05/03/2008, 14h54
  2. Réponses: 4
    Dernier message: 01/05/2007, 10h37
  3. récupérer le nombre de processeur
    Par salseropom dans le forum C
    Réponses: 6
    Dernier message: 27/04/2007, 10h06
  4. Limite du nombre de processeurs & SQL 2005 Standard
    Par kingrvb dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2006, 15h26

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