2017-07-12 4 views
3

Existe-t-il un moyen de déterminer le nombre de cœurs physiques d'une machine cible au moment de la compilation en C/C++ sous Linux sous GCC?Déterminer le nombre de cœurs au moment de la compilation en C/C++

Je suis conscient d'autres méthodes comme td::thread::hardware_concurrency() en C++ 11 ou sysconf(_SC_NPROCESSORS_ONLN) mais je suis curieux de savoir s'il existe réellement un moyen d'obtenir cette information au moment de la compilation.

+11

Votre programme deviendra si vous déterminez non portable cela au moment de la compilation. –

+1

Vous pouvez utiliser cmake pour remplir un en-tête basé sur un modèle que vous incluez dans votre programme et qui le définit: https://cmake.org/cmake/help/v3.0/module/ProcessorCount.html et https://cmake.org /cmake/help/v3.0/command/configure_file.html Cela fonctionne sur n'importe quelle plate-forme (que cmake prend en charge) – xaxxon

+1

Notez que cela ne récupère que le nombre de base du PC sur lequel le compilateur s'exécute. Le fichier EXE compilé peut toujours être exécuté sur d'autres ordinateurs avec des comptes de base différents. –

Répondre

6

Vous pouvez obtenir ces informations du terminal pendant les processus de construction et les transmettre au programme en tant que définition de pré-processeur.

exemple:

g++ main.cpp -D PROC_COUNT=$(grep -c ^processor /proc/cpuinfo)

main.cpp est

#include <iostream> 
int main() { 
    std::cout << PROC_COUNT << std::endl; 
    return 0; 
} 
+2

Pour la méthode de 'PROC_COUNT' vous pouvez substituer dans n'importe quelle méthode proposée ici: https://stackoverflow.com/questions/6481005/how-to-obtain-the-number-of-cpus-cores-in-linux-from -the-command-line –

+4

Notez que cela ne récupère que le nombre de base du PC sur lequel le compilateur s'exécute. Le fichier EXE compilé peut toujours être exécuté sur d'autres ordinateurs avec des comptes de base différents. –

+0

Ce serait la machine de construction, pas la machine cible, mais qui s'en soucie ... –