20

私は今朝、どのプロセッサIDがハイパースレッドコアであるかを判断する方法を見つけようとして過ごしましたが、運がありませんでした。

set_affinity()この情報を見つけて、プロセスをハイパースレッドスレッドまたは非ハイパースレッドスレッドにバインドして、そのパフォーマンスのプロファイルを作成するために使用したいと思います。

4

6 に答える 6

45

私は必要なことをするための単純なトリックを発見しました。

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list

最初の数値がCPU番号(この例では0)と等しい場合、それは実際のコアですが、そうでない場合はハイパースレッディングコアです。

実際のコアの例:

# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
1,13

ハイパースレッディングコアの例

# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list
1,13

2番目の例の出力は、最初の例とまったく同じです。ただし、チェックcpu13しており、最初の数値は1であるため、CPU13はハイパースレッディングコアです。

于 2011-10-18T18:53:50.243 に答える
14

lscpuまだ誰も言及していないことに驚いています。これは、4つの物理コアとハイパースレッディングが有効になっているシングルソケットシステムの例です。

$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
2,2,0,0,,2,2,2,0
3,3,0,0,,3,3,3,0
4,0,0,0,,0,0,0,0
5,1,0,0,,1,1,1,0
6,2,0,0,,2,2,2,0
7,3,0,0,,3,3,3,0

出力は、IDのテーブルを解釈する方法を説明しています。同じコアIDを持つ論理CPUIDは兄弟です。

于 2016-12-15T17:51:55.970 に答える
12

HTは対称的です(基本的なリソースに関しては、システムモードは非対称的である可能性があります)。

したがって、HTがオンになっている場合、物理コアの大規模なリソースが2つのスレッド間で共有されます。両方のスレッドの状態を保存するために、いくつかの追加のハードウェアがオンになっています。両方のスレッドは、物理コアに対称的にアクセスできます。

HTが無効なコアとHTが有効なコアには違いがあります。ただし、HT対応コアの前半とHT対応コアの後半に違いはありません。

ある時点で、1つのHTスレッドが他のスレッドよりも多くのリソースを使用する場合がありますが、このリソースバランシングは動的です。CPUは、両方のスレッドが同じリソースを使用する場合に、可能な限りスレッドのバランスを取ります。rep nopCPUが他のスレッドにより多くのリソースを提供できるようにするには、またはpause1つのスレッドでのみ実行できます。

この情報を確認し、set_affinity()を使用してプロセスをハイパースレッドスレッドまたは非ハイパースレッドスレッドにバインドし、パフォーマンスのプロファイルを作成したいと思います。

さて、あなたは実際に事実を知らなくてもパフォーマンスを測定することができます。システム内の唯一のスレッドがCPU0にバインドされているときに、プロファイルを実行するだけです。CPU1にバインドされたらそれを繰り返します。結果はほぼ同じだと思います(OSがCPU0にいくつかの割り込みをバインドするとノイズが発生する可能性があるため、テストを行うときは割り込みの数を減らし、CPU2とCPU3がある場合は使用してみてください)。

PS

Agner(彼はx86の第一人者です)は、HTを使用したくない場合に偶数のコアを使用することを推奨していますが、BIOSでは有効になっています。

ハイパースレッディングが検出された場合は、プロセスをロックして、偶数の論理プロセッサのみを使用します。これにより、各プロセッサコアの2つのスレッドの1つがアイドル状態になり、リソースの競合が発生しなくなります。

新しい生まれ変わりHTについてのPPS(P4ではなく、NehalemとSandy)-マイクロアーキテクチャに関するAgnerの調査に基づく

SandyBridgeで注意が必要な新しいボトルネックは次のとおりです。...5.スレッド間でのリソースの共有。重要なリソースの多くは、ハイパースレッディングがオンのときにコアの2つのスレッド間で共有されます。複数のスレッドが同じ実行リソースに依存している場合は、ハイパースレッディングをオフにすることをお勧めします。

..。

中途半端なソリューションがNetBurstに導入され、Nehalem andSandyBridgeにもいわゆるハイパースレッディングテクノロジーが導入されました。ハイパースレッディングプロセッサには、同じ実行コアを共有する2つの論理プロセッサがあります。2つのスレッドが同じリソースをめぐって競合する場合、これの利点は制限されますが、パフォーマンスがメモリアクセスなどの他の何かによって制限される場合、ハイパースレッディングは非常に有利になる可能性があります。

..。

IntelとAMDはどちらも、実行ユニットの一部またはすべてが2つのプロセッサコア間で共有されるハイブリッドソリューションを作成しています(Intelの用語ではハイパースレッディング)。

PPPS:Intel Optimizationの本には、第2世代HTでのリソース共有がリストされています:(93ページ、このリストはnehalem用ですが、Sandyセクションではこのリストに変更はありません)

より深いバッファリングと強化されたリソース共有/パーティションポリシー:

  • — HT操作用に複製されたリソース:レジスタの状態、名前が変更されたリターンスタックバッファ、大きなページのITLB //私によるコメント:このHWは2セットあります
  • — HT操作用のパーティション化されたリソース:ロードバッファー、ストアバッファー、リオーダーバッファー、スモールページITLBは、2つの論理プロセッサー間で静的に割り当てられます。//私によるコメント:このHWの単一のセットがあります; 2つのHT仮想コア間で静的に分割されます
  • — HT操作中の競合共有リソース:リザベーションステーション、キャッシュ階層、フィルバッファー、DTLB0とSTLBの両方。//コメント:単一のセットですが、半分に分割されていません。CPUはリソースを動的に再分割します。
  • — HT操作中の交代:フロントエンド操作は通常、公平性を確保するために2つの論理プロセッサを交互に使用します。//コメント:単一のフロントエンド(命令デコーダー)があるため、スレッドは1、2、1、2の順序でデコードされます。
  • — HT非認識リソース:実行ユニット。//コメント:計算、メモリアクセスを行う実際のハードウェアデバイスがあります。セットは1つだけです。スレッドの1つが多数の実行ユニットを使用でき、メモリ待機数が少ない場合、すべての実行ユニットを消費し、2番目のスレッドのパフォーマンスが低下します(ただし、HTは2番目のスレッドに切り替わることがあります。どのくらいの頻度ですか? ??)。両方のスレッドが高度に最適化されていないか、メモリ待機がある場合、実行ユニットは2つのスレッドに分割されます。

112ページ(図2-13)にも写真があり、両方の論理コアが対称であることを示しています。

HTテクノロジーによる潜在的なパフォーマンスは、次の理由によるものです。

  • •オペレーティングシステムとユーザープログラムが、各物理プロセッサの論理プロセッサで同時に実行されるプロセスまたはスレッドをスケジュールできるという事実
  • •単一のスレッドのみが実行リソースを消費している場合よりも高いレベルでオンチップ実行リソースを使用する機能。より高いレベルのリソース使用率は、より高いシステムスループットにつながる可能性があります

2つのプログラムまたは2つのスレッドから発生する命令は同時に実行され、実行コアとメモリ階層では必ずしもプログラムの順序で実行されるとは限りませんが、フロントエンドとバックエンドには、2つの論理プロセッサからの命令を選択するためのいくつかの選択ポイントが含まれています。1つの論理プロセッサがパイプラインステージを使用できない場合を除き、すべての選択ポイントは2つの論理プロセッサ間で交互になります。この場合、他の論理プロセッサはパイプラインステージのすべてのサイクルを完全に使用します。論理プロセッサがパイプラインステージを使用しない理由には、キャッシュミス、ブランチの予測ミス、および命令の依存関係が含まれます。

于 2011-09-01T19:11:54.183 に答える
4

OpenMPIプロジェクトによるユニバーサル(Linux / Windows)およびポータブルHWトポロジ検出器(コア、HT、cacahes、サウスブリッジ、ディスク/ネット接続の局所性)hwlocがあります。Linuxは異なるHTコア番号付け規則を使用する可能性があり、それが偶数/奇数またはyとy + 8のナベリング規則であるかどうかはわかりませんので、これを使用できます。

hwlocのホームページ: http ://www.open-mpi.org/projects/hwloc/

ダウンロードページ: http ://www.open-mpi.org/software/hwloc/v1.10/

説明:

Portable Hardware Locality(hwloc)ソフトウェアパッケージは、NUMAメモリノード、ソケット、共有キャッシュ、コア、同時マルチスレッディングなど、最新のアーキテクチャの階層トポロジのポータブルな抽象化(OS、バージョン、アーキテクチャなど)を提供します。また、キャッシュやメモリ情報などのさまざまなシステム属性や、ネットワークインターフェイス、InfiniBand HCA、GPUなどのI/Oデバイスのローカリティも収集します。これは主に、アプリケーションが最新のコンピューティングハードウェアに関する情報を収集し、それに応じて効率的に活用できるようにすることを目的としています。

lstopo次のようなグラフィック形式でhwトポロジを取得するコマンドがあります

 ubuntu$ sudo apt-get hwloc
 ubuntu$ lstopo

hwlocからのlstopo(OpenMPI)-出力例

またはテキスト形式:

 ubuntu$ sudo apt-get hwloc-nox
 ubuntu$ lstopo --of console

物理コアは、Core L#xそれぞれが2つの論理コアPU L#yとを持っていると見なすことができますPU L#y+8

Machine (16GB)
  Socket L#0 + L3 L#0 (4096KB)
    L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
      PU L#0 (P#0)
      PU L#1 (P#8)
    L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
      PU L#2 (P#4)
      PU L#3 (P#12)
  Socket L#1 + L3 L#1 (4096KB)
    L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
      PU L#4 (P#1)
      PU L#5 (P#9)
    L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
      PU L#6 (P#5)
      PU L#7 (P#13)
  Socket L#2 + L3 L#2 (4096KB)
    L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
      PU L#8 (P#2)
      PU L#9 (P#10)
    L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
      PU L#10 (P#6)
      PU L#11 (P#14)
  Socket L#3 + L3 L#3 (4096KB)
    L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
      PU L#12 (P#3)
      PU L#13 (P#11)
    L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
      PU L#14 (P#7)
      PU L#15 (P#15)
于 2015-02-28T23:11:09.917 に答える
2

bashでCPUコアのハイパースレッディング兄弟を取得する簡単な方法:

cat $(find /sys/devices/system/cpu -regex ".*cpu[0-9]+/topology/thread_siblings_list") | sort -n | uniq

lscpu -e関連するコアとCPUの情報を提供するものもあります:

CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ    MINMHZ
0   0    0      0    0:0:0:0       yes    4100.0000 400.0000
1   0    0      1    1:1:1:0       yes    4100.0000 400.0000
2   0    0      2    2:2:2:0       yes    4100.0000 400.0000
3   0    0      3    3:3:3:0       yes    4100.0000 400.0000
4   0    0      0    0:0:0:0       yes    4100.0000 400.0000
5   0    0      1    1:1:1:0       yes    4100.0000 400.0000
6   0    0      2    2:2:2:0       yes    4100.0000 400.0000
7   0    0      3    3:3:3:0       yes    4100.0000 400.0000
于 2019-10-09T15:06:39.880 に答える
1

コアの温度とHTコアの負荷を比較して情報を確認してみました。

ここに画像の説明を入力してください

于 2014-04-12T17:30:53.337 に答える