GCCでLinuxのC/C++でコンパイル時にターゲットマシンがいくつの物理コアを持つかを判断する方法はありますか?C/C++でコンパイル時のコア数を調べる
私はtd::thread::hardware_concurrency()
のC++ 11またはsysconf(_SC_NPROCESSORS_ONLN)
のような他の方法について知っていますが、実際にこの情報をコンパイル時に取得する方法があるかどうか不思議です。
GCCでLinuxのC/C++でコンパイル時にターゲットマシンがいくつの物理コアを持つかを判断する方法はありますか?C/C++でコンパイル時のコア数を調べる
私はtd::thread::hardware_concurrency()
のC++ 11またはsysconf(_SC_NPROCESSORS_ONLN)
のような他の方法について知っていますが、実際にこの情報をコンパイル時に取得する方法があるかどうか不思議です。
この情報は、ビルドプロセス中に端末から取得し、プリプロセッサの定義としてプログラムに渡すことができます。
例:main.cpp
はあなたがコンパイル時にこれを決定する場合
#include <iostream>
int main() {
std::cout << PROC_COUNT << std::endl;
return 0;
}
'PROC_COUNT'のメソッドについては、ここで提案されているどのメソッドにも置き換えることができます:https://stackoverflow.com/questions/6481005/how-to-obtain-the-number-of-cpus-cores-in-linux-from -the-command-line –
これは、コンパイラが実行されているPCのコア数のみを取得することに注意してください。コンパイルされたEXEは、コア数の異なる他のPCで実行することもできます。 –
それはターゲットマシンではなく、ビルドマシンになりますが、誰が気にしますか? –
あなたのプログラムが移植不可能になりますです
g++ main.cpp -D PROC_COUNT=$(grep -c ^processor /proc/cpuinfo)
。 –
cmakeを使用して、プログラムにインクルードするテンプレートヘッダを埋め込むことができます。これは、https://cmake.org/cmake/help/v3.0/module/ProcessorCount.htmlとhttps://cmake.orgを定義しています。 /cmake/help/v3.0/command/configure_file.htmlこれは、(cmakeがサポートする)任意のプラットフォームで動作します – xaxxon
これは、コンパイラが実行されているPCのコア数だけを取得することに注意してください。コンパイルされたEXEは、コア数の異なる他のPCで実行することもできます。 –