Comment obtenir le nombre de cycles CPU en x86_64 à partir de C++?

J'ai vu ce post sur DONC qui contient le code C pour obtenir la dernière version de CPU Cycle count:

PROCESSEUR nombre de cycles en fonction de profilage en C/C++ Linux x86_64

Est-il une manière que je peux utiliser ce code en C++ (windows et linux solutions de bienvenue)? Bien qu'écrit en C (et C étant un sous-ensemble de C++) je ne suis pas trop certain si ce code serait de travailler dans un projet C++ et si non, comment le traduire?

Je suis en utilisant x86-64

EDIT2:

Trouvé cette fonction, mais ne peut pas obtenir VS2010 de reconnaître l'assembleur. Dois-je inclure quoi que ce soit? (Je crois que j'ai de swap uint64_t à long long pour windows....?)

static inline uint64_t get_cycles()
{
  uint64_t t;
  __asm volatile ("rdtsc" : "=A"(t));
  return t;
}

EDIT3:

De code ci-dessus, j'obtiens l'erreur:

"erreur C2400: assembleur en ligne erreur de syntaxe dans "opcode'; trouvé de données
le "type"

Quelqu'un pourrait s'il vous plaît aider?

  • "C++ étant un sous-ensemble de C" - avez-vous dire que l'inverse?
  • Visual Studio ne prend pas en charge l'assemblage sur x86-64.
  • Je présume que tu veux dire MSVC? Je pense que j'ai le compilateur ICC installé trop et juste pour être sûr que je suis juste l'installation de MinGW
  • Pour obtenir uint64_t vous devriez #include <stdint.h> (en fait <cstdint> mais votre compilateur est probablement trop vieux pour avoir ça.)
  • oui je voulais dire MSVC. J'ai complètement oublié que vous pouvez remplacer les compilateurs depuis je n'ai jamais essayé.
  • Les gars, maintenant, je reçois l'erreur dans le edit3. J'ai inclus <stdint.h> et c'est sur Windows 7
  • En outre, Visual Studio ne prend pas en charge gcc-style de l'assemblée 😉
  • Vous devez être prudent avec cette. Avec un multi-core puce, le chrono sont différentes sur les différents cœurs. Si le planificateur se déplace ton thread entre les cœurs, le comte peut sauter. Certains OS ont corrigé cela. Quelques jetons, mettre les carottes en veille pour économiser de l'énergie, alors que les cœurs de l'horloge n'avance pas.
  • pour clarifier, pour les autres, la lecture de ce, VS ne prend pas en charge assembly en ligne pour la version 64 bits construit, mais il prend en charge distincte de l'assemblée des fichiers sources et des utilisations ML64.EXE pour la version 64 bits de l'assemblée. J'utilise étape de génération personnalisée pour exécuter ML64.EXE plutôt que d'utiliser la valeur par défaut de la ligne de commande, à l'aide de x64.asm comme par exemple: "ml64 /c /Zi /Fo$(OutDir)\x64.obj x64.asm" (/Zi de débogage de construire, /Zi pour la libération de construire), le fichier de sortie: "$(OutDir)\x64.obj

InformationsquelleAutor user997112 | 2012-12-07