Comment dois-je appeler “cpuid” dans Linux?

Lors de l'écriture d'un nouveau code pour Windows, je suis tombé sur _cpuinfo() de l'API de Windows. Comme je suis principalement de traiter avec un environnement Linux (GCC) je veux avoir accès à la CPUInfo.

J'ai essayé ce qui suit:

#include <iostream>

int main()
{
  int a, b;

  for (a = 0; a < 5; a++)
  {
    __asm ( "mov %1, %%eax; "            //a into eax
          "cpuid;"
          "mov %%eax, %0;"             //eax into b
          :"=r"(b)                     //output
          :"r"(a)                      //input
          :"%eax","%ebx","%ecx","%edx" //clobbered register
         );
    std::cout << "The code " << a << " gives " << b << std::endl;
  }

  return 0;
}

D'utiliser cette assemblée, mais je ne veux pas ré-inventer la roue. Est-il un autre moyen pour mettre en œuvre CPUInfo sans assemblée?

Des erreurs du compilateur:

lewis@lewis-desktop:~/Desktop/prog$ g++ -Wall CPUInfo.cpp
CPUInfo.cpp: In function int main()’:
CPUInfo.cpp:10:22: error: expected ‘)’ before ‘;’ token
CPUInfo.cpp:10:23: error: expected primary-expression before ‘)’ token
CPUInfo.cpp:10:23: error: expected ‘;’ before ‘)’ token
CPUInfo.cpp:8:8: warning: unused variable b [-Wunused-variable]
CPUInfo.cpp:12:8: error: expected ‘}’ at end of input
  • Donc, c'est g++, je suppose. Et x86? Vous devriez le dire. Quelle est la question en tout cas? Vous nous avez dit ce que vous faites, et montré le code. Mais il n'y a pas de question.
  • Je suis sous Linux (comme ce sera la section Linux pour déterminer le PROCESSEUR de l'ordinateur exécutant le code). J'ai déjà la version Windows/section cloué avec le _cpuinfo() fonction à partir de la Victoire de l'API. C'est mon point de vue.
  • Voir mon post mis à jour, j'ai oublié d'ajouter les erreurs du Compilateur.
  • J'ai édité la question de réfléchir (ce que je pense) est la question. Hésitez pas à le restaurer si je me trompe.
  • encore une fois, une question appropriée est downvoted, même quand il n'y a pas de réponse claire (il n'y a pas tout).
  • Si mon montage est exacte, alors laissez-moi savoir et je vais poster une réponse.
  • Je sais comment le mettre en œuvre pour gcc/linux. Je suis recieveing les erreurs de compilation que je ne sais pas comment se débarrasser de, rendre ainsi la fichue chose à construire.
  • Je ne sais pas pourquoi vous plaindre d'un downvote. Maintenant, je n'ai pas downvote, et je vois qu'il a été supprimé. Mais la question d'origine omis les détails de compilateurs, a échoué à fournir des messages d'erreur et de ne pas poser une question. Si quelqu'un downvoted vous. C'est à prévoir. Ne blâmez pas le downvoter. Résoudre la question. Ensuite, vous aurez jusqu'voix.
  • a donné une bonne réponse; selon ce que vous voulez, il peut être plus facile de lire les données à partir de /proc/cpuinfo.
  • J'ai roulé la question précédente. S'il vous plaît ne pas le modifier comme vous l'avez fait. Si vous souhaitez ajouter votre propre réponse le faire. Mais si vous supprimez toutes les erreurs de la question, les réponses air stupide.
  • Je suis en désaccord. Le titre " Comment dois-je appeler “cpuid” dans Linux?'. Les erreurs du compilateur où une faute de frappe à partir de commutation branches git quand je l'ai testé ce code, c'est à dire, non pas sur la production de code. La réponse n'est pas pertinente pour le compilateur des erreurs, alors que, il est pertinent de 'comment dois-je appeler cpuinfo de cpuid.h. Désolé, je vais modifier ma question pour plus de clarté.
  • Votre la dernière modification est différent de celui que j'ai restauré. C'est mieux. Mais je serais encore perfer pour voir l'original avec le code d'erreur du compilateur, car l'une des réponses maintenant l'air très bizarre. Il n'était pas @faute de l'utilisateur. Ils ont juste répondu à ce qu'il y avait à l'époque. Alors je serais le plus tôt voir votre modifier ajouter à l'original.
  • Je vais ajouter les erreurs du compilateur dans une note.
  • Les erreurs de compilation sûrement besoin de faire correspondre le code en question, avec l'égaré ; mais c'est peut-être pas la peine de s'inquiéter plus. Je pense que je suis ennuyeux de vous maintenant! 😉
  • Je pensais la même chose. Le poste serait encombré avec le code. Je pense que mon asm approche est joli roman, il serait certainement augmenter la valeur de la thread. les utilisateurs du poste répond à la faute de frappe bien, pour ne pas mentionner les exemples de code, bien qu'actuellement en pied de page. Je sens que le lecteur peut reconstituer , si.
  • Ce n'est pas que le roman, j'ai vu cette réponse sur pas moins de 6 questions similaires aujourd'hui, alors que la recherche pour un bon exemple d'utilisation de la C/C++ qui est construit en. Plutôt que de diverses personnes adhoc inline assemblée des réponses 🙂

InformationsquelleAutor TheBlueCat | 2013-01-10