ホームページ > バックエンド開発 > C++ > ハイパースレッディングの存在を考慮して、システム内の物理コアの数を正確に判断するにはどうすればよいですか?

ハイパースレッディングの存在を考慮して、システム内の物理コアの数を正確に判断するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-30 13:17:03
オリジナル
349 人が閲覧しました

How can I accurately determine the number of physical cores in my system, considering the presence of hyper-threading?

ハイパー スレッディング サポートによる物理プロセッサ/コアの数の検出

最大の効率を目指すマルチスレッド アプリケーションでは、物理プロセッサまたはコアの数は非常に重要です。過剰なスレッドを作成すると、特にハイパー スレッディングがサポートされているシナリオでパフォーマンスが低下する可能性があります。

ハイパー スレッディングの検出

物理プロセッサの数を正確に判断するには、次のことが必要です。ハイパースレッディングがサポートされ有効になっているかどうかを検出します。その方法は次のとおりです:

  1. CPU ベンダーの識別: 関数 0 で CPUID 命令を実行し、CPU ベンダー (例: "AuthenticIntel" または "AuthenticAMD") を取得します。
  2. ハイパー スレッディングのチェック (インテル): Intel プロセッサーの場合、CPUID 関数 1 の EDX のビット 28 をチェックします。設定されている場合、ハイパー スレッディングがサポートされています。
  3. ハイパースレッディング (AMD) の確認: AMD プロセッサの場合、CPUID 関数 0x80000008 を実行して ECX[7:0] のコア数を取得します。この数値が 0 より大きい場合、ハイパー スレッディングがサポートされています。

物理コア数の決定

ハイパー スレッディングのサポートが検出されたら、次の手順に従います。物理コアの数を決定するには:

  • Intel プロセッサの場合は、CPUID 関数 4 を実行し、EAX[31:26] 1 からカウントを取得します。
  • AMD プロセッサの場合は、以前に CPUID 関数 0x80000008 から ECX[7:0] 値を取得し、1 を追加します。

実装例

次の C プログラムは、ハイパースレッドと物理コアの数:

<code class="cpp">#include <iostream>
#include <string>

using namespace std;

void cpuID(unsigned i, unsigned regs[4]) {
#ifdef _WIN32
  __cpuid((int *)regs, (int)i);
#else
  asm volatile
    ("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
     : "a" (i), "c" (0));
#endif
}

int main(int argc, char *argv[]) {
  unsigned regs[4];

  // ... (Code for vendor detection, feature check, and logical core count)
  
  // Hyper-Threading detection
  bool hyperThreads = cpuFeatures & (1 << 28) && cores < logical;

  // ... (Code for physical core count based on vendor)

  cout << "hyper-threads: " << (hyperThreads ? "true" : "false") << endl;

  return 0;
}</code>
ログイン後にコピー

結論

これらの手順に従うことで、ハイパーを考慮しながら物理プロセッサ/コアの数を正確に検出できます。 - スレッド化のサポート。この情報は、マルチスレッド アプリケーションのパフォーマンスを最適化するために非常に貴重です。

以上がハイパースレッディングの存在を考慮して、システム内の物理コアの数を正確に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート