2017-07-12 6 views
3

GCCでLinuxのC/C++でコンパイル時にターゲットマシンがいくつの物理コアを持つかを判断する方法はありますか?C/C++でコンパイル時のコア数を調べる

私はtd::thread::hardware_concurrency()のC++ 11またはsysconf(_SC_NPROCESSORS_ONLN)のような他の方法について知っていますが、実際にこの情報をコンパイル時に取得する方法があるかどうか不思議です。

+11

あなたのプログラムが移植不可能になりますです

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

。 –

+1

cmakeを使用して、プログラムにインクルードするテンプレートヘッダを埋め込むことができます。これは、https://cmake.org/cmake/help/v3.0/module/ProcessorCount.htmlとhttps://cmake.orgを定義しています。 /cmake/help/v3.0/command/configure_file.htmlこれは、(cmakeがサポートする)任意のプラットフォームで動作します – xaxxon

+1

これは、コンパイラが実行されているPCのコア数だけを取得することに注意してください。コンパイルされたEXEは、コア数の異なる他のPCで実行することもできます。 –

答えて

6

この情報は、ビルドプロセス中に端末から取得し、プリプロセッサの定義としてプログラムに渡すことができます。

例:main.cppはあなたがコンパイル時にこれを決定する場合

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

'PROC_COUNT'のメソッドについては、ここで提案されているどのメソッドにも置き換えることができます:https://stackoverflow.com/questions/6481005/how-to-obtain-the-number-of-cpus-cores-in-linux-from -the-command-line –

+4

これは、コンパイラが実行されているPCのコア数のみを取得することに注意してください。コンパイルされたEXEは、コア数の異なる他のPCで実行することもできます。 –

+0

それはターゲットマシンではなく、ビルドマシンになりますが、誰が気にしますか? –

関連する問題