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

Apple Discussion :

[C] comment connaitre le nombre de processeurs sous Mac OS X ?


Sujet :

Apple

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut [C] comment connaitre le nombre de processeurs sous Mac OS X ?
    Bonjour, je suis en train de faire un prgm en C et j'aimerais faire une routine qui me renvoie le nombre de processeur du mac sur lequel je lance le prgm.
    Sous linux, je dois ouvrir le fichier /proc/cpuinfo et là, à l'aide d'un fgets, je peux récupérer le nombre de processeur. Mais sous mac, comment puis-je procéder ? Où est spécifié le nombre de processeur du mac ?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par salseropom
    Bonjour, je suis en train de faire un prgm en C et j'aimerais faire une routine qui me renvoie le nombre de processeur du mac sur lequel je lance le prgm.
    Sous linux, je dois ouvrir le fichier /proc/cpuinfo et là, à l'aide d'un fgets, je peux récupérer le nombre de processeur. Mais sous mac, comment puis-je procéder ? Où est spécifié le nombre de processeur du mac ?

    Merci.
    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
    int getNumCPUs(void)
    {
        processor_cpu_load_info_t		newCPUInfo;
        kern_return_t			kr;
        unsigned int			processor_count;
        mach_msg_type_number_t		load_count;
    
        kr = host_processor_info(mach_host_self(), 
                                 PROCESSOR_CPU_LOAD_INFO, 
                                 &processor_count, 
                                 (processor_info_array_t *)&newCPUInfo, 
                                 &load_count);
        if(kr != KERN_SUCCESS) {
            return 0;
        }
        else {
            vm_deallocate(mach_task_self(), 
                          (vm_address_t)newCPUInfo, 
                          (vm_size_t)(load_count * sizeof(*newCPUInfo)));
                          
            return (int)processor_count;
        }
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, merci de cette réponse !
    voilà ce que j'ai fait :

    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
    #include<stdlib.h>
    #include<stdio.h>
    
    static int getNumCPUs(void)
    {
        processor_cpu_load_info_t		newCPUInfo;
        kern_return_t			kr;
        unsigned int			processor_count;
        mach_msg_type_number_t		load_count;
    
        kr = host_processor_info(mach_host_self(), 
                                 PROCESSOR_CPU_LOAD_INFO, 
                                 &processor_count, 
                                 (processor_info_array_t *)&newCPUInfo, 
                                 &load_count);
        if(kr != KERN_SUCCESS) {
            return 0;
        }
        else {
            vm_deallocate(mach_task_self(), 
                          (vm_address_t)newCPUInfo, 
                          (vm_size_t)(load_count * sizeof(*newCPUInfo)));
                          
            return (int)processor_count;
        }
    }
    
    
    int main(void)
    {
      int d=getNumCPUs();
      printf("d = %d\n",d);
      return 0;
    }
    voici ma compil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -Wall -W nbproc.c -o out
    et voici les erreurs lors de la compilation :

    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
    nbproc.c: In function `getNumCPUs':
    nbproc.c:6: error: `processor_cpu_load_info_t' undeclared (first use in this function)
    nbproc.c:6: error: (Each undeclared identifier is reported only once
    nbproc.c:6: error: for each function it appears in.)
    nbproc.c:6: error: parse error before "newCPUInfo"
    nbproc.c:7: error: `kern_return_t' undeclared (first use in this function)
    nbproc.c:9: error: `mach_msg_type_number_t' undeclared (first use in this function)
    nbproc.c:9: error: parse error before "load_count"
    nbproc.c:11: error: `kr' undeclared (first use in this function)
    nbproc.c:11: warning: implicit declaration of function `host_processor_info'
    nbproc.c:11: warning: implicit declaration of function `mach_host_self'
    nbproc.c:12: error: `PROCESSOR_CPU_LOAD_INFO' undeclared (first use in this function)
    nbproc.c:14: error: `processor_info_array_t' undeclared (first use in this function)
    nbproc.c:14: error: parse error before ')' token
    nbproc.c:14: error: `newCPUInfo' undeclared (first use in this function)
    nbproc.c:15: error: `load_count' undeclared (first use in this function)
    nbproc.c:16: error: `KERN_SUCCESS' undeclared (first use in this function)
    nbproc.c:20: warning: implicit declaration of function `vm_deallocate'
    nbproc.c:20: warning: implicit declaration of function `mach_task_self'
    nbproc.c:21: error: `vm_address_t' undeclared (first use in this function)
    nbproc.c:21: error: parse error before "newCPUInfo"
    je pense que je dois inclure un header non ? lequel ?

    Merci encore.

    (j'ai testé ton code sur mon G5 Power PC. Je ne l'ai pas encore testé sur mon mac book (intel))

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par salseropom
    Salut, merci de cette réponse !

    je pense que je dois inclure un header non ? lequel ?

    Merci encore.

    (j'ai testé ton code sur mon G5 Power PC. Je ne l'ai pas encore testé sur mon mac book (intel))
    les mach/* :

    <mach/mach_host.h>
    <mach/vm_map.h>
    ...

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, merci ça marche. J'ai rajouté les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include<mach/mach_host.h>
    #include<mach/vm_map.h>
    #include <mach/mach.h>
    merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 31
    Dernier message: 30/09/2006, 22h08
  2. Réponses: 2
    Dernier message: 13/06/2006, 15h46
  3. comment connaitre le nombre de <tr> au sein d'un <table>
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/06/2006, 13h27
  4. Réponses: 2
    Dernier message: 05/05/2006, 08h55
  5. comment connaitre le nombre ...
    Par mythtvtalk.com dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/08/2003, 08h18

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