問題タブ [hyperthreading]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2704 参照

c++ - GetSystemInfo (Windows 上) は常に論理プロセッサの数を返しますか?

これを読んで、具体的には Microsoft のドキュメントを読むと、PHYSICAL プロセッサの数を返す必要があり、GetLogicalProcessorInformation を使用して、所有している LOGICAL プロセッサの数を把握する必要があるようです。

SYSTEM_INFO 構造体で見つけた ドキュメントは次のとおりですフィルタ) http://msdn.microsoft.com/en-us/library/ms683194.aspx

さらに調べてみると、このトピックに関して私が見つけた議論のほとんどで、開発者は GetSystemInfo (および SYSTEM_INFO 構造体) が LOGICAL プロセッサの数を報告すると言っています。

もう一度検索すると、MS がこれ (およびホット フィックス) に関する情報を公開していることがわかりました (スパム フィルターを通過するためにスペースを追加): http://support. microsoft.com/kb/936235

それを読むと、Xp のサービス パック 3 より前のように聞こえますが、GetSystemInfo は SYSTEM_INFO 構造体の LOGICAL プロセッサの数を報告します。また、Windows Vista および Windows 7 では、GetSystemInfo が PHYSICAL プロセッサの数を報告する必要があることもわかりました (Windows XP pre-service Pack 3 とは異なります)。

それが実際に何をするか知っている人はいますか?GetSystemInfo は、実行している OS に応じて、(同じコンピューター上の) 物理プロセッサの数を実際に異なる方法で報告しますか?

0 投票する
14 に答える
49810 参照

c++ - Windows、Mac、および Linux で物理プロセッサ/コアの数を検出する方法

Windows、Mac、およびいくつかの Linux フレーバーで実行されるマルチスレッドの C++ アプリケーションがあります。

簡単に言うと、最大の効率で実行するには、物理​​プロセッサ/コアごとに 1 つのスレッドをインスタンス化できる必要があります。物理プロセッサ/コアよりも多くのスレッドを作成すると、プログラムのパフォーマンスが大幅に低下します。これら 3 つのプラットフォームすべてで、論理プロセッサ/コアの数を正しく正しく検出できます。物理プロセッサ/コアの数を正しく検出できるようにするには、ハイパートレッディングがサポートされていてアクティブかどうかを検出する必要があります。

したがって、私の質問は、ハイパー スレッディングがサポートされ、有効になっているかどうかを検出する方法があるかどうかです。もしそうなら、どのように正確に。

0 投票する
4 に答える
5375 参照

c++ - C/C++/Assembly Windows、Mac、Linux でハイパースレッディングがアクティブかどうかをプログラムで検出

これら 3 つのプラットフォームすべてで、論理プロセッサの数を正確に検出できます。

物理プロセッサ/コアの数を正しく検出できるようにするには、ハイパースレッディングがサポートされており、アクティブである (または必要に応じて有効になっている) かどうかを検出する必要があります。 .

おそらく私は例を提供する必要があります:

ハイパースレッディングが有効になっているクアッド コア Intel CPU には、4 つの物理コアがありますが、8 つの論理プロセッサがあります (ハイパースレッディングにより、さらに 4 つの論理プロセッサが作成されます)。したがって、現在の関数は、目的の 4 ではなく 8 を検出します。

したがって、私の質問は、ハイパースレッディングがサポートされ、有効になっているかどうかを検出する方法があるかどうかです。

0 投票する
3 に答える
16728 参照

linux - Linux での CPU の順序付け (ハイパー スレッディングを使用)

Linux で CPU の順序がどのようなものか知りたいです。ハイパースレッド システムでスレッドを cpu0 にバインドし、別のスレッドを cpu1 にバインドするとします。これらは両方とも同じ物理コア上にあります。4 つのコアとハイパースレッディングを備えた Core i7 920 の場合、/proc/cpuinfo の出力から、cpu0 と cpu1 は異なる物理コアであり、cpu0 と cpu4 は同じ物理コア上にあると考えられます。

ありがとう。

0 投票する
2 に答える
2241 参照

performance - 最新のXeonでのFPを多用するハイパースレッディングパフォーマンス

最近、Ubuntu 10.04で、浮動小数点を多用するシミュレーションを実行するためのデュアルIntelX5650ワークステーションを購入しました。

各X5650には6つのコアがあるため、合計で12のコアがあります。コードは自明に並列であるため、私はほとんど12スレッドで実行しており、「トップ」を通じて約「1200%」のプロセッサ使用率を観察しています。

BIOSでハイパースレッディングが有効になっているため、オペレーティングシステムは名目上24コアが使用可能であることを認識します。スレッド数を24に増やすと、topは約2000%のプロセッサ使用率を報告しますが、実際のコードパフォーマンスが20/12向上するようには見えません。

私の質問は、ハイパースレッディングが最新世代のXeonで実際にどのように機能するかということです。浮動小数点を多用するコードは、コアごとに複数のスレッドをスケジュールすることでメリットがありますか?ワーキングセットが数倍大きい場合と比較して、キャッシュサイズのオーダーである場合、または実質的なI / O操作(シミュレーション出力のディスクへの書き込みなど)がある場合、答えは変わりますか?

さらに、ハイパースレッディングが有効になっている場合、プロセッサ使用率を「上」からどのように解釈する必要がありますか?

0 投票する
4 に答える
25071 参照

multithreading - スレッドとコア

#コア= 4、#スレッド= 4で、ハイパースレッディングサポートがないこのようなプロセッサがあるとします。

これは、4つのプログラム/プロセスを同時に実行できることを意味します(コアは1つのスレッドしか実行できないため)?それとも、4 x 4 = 16のプログラム/プロセスを同時に実行できるということですか?

私の掘り下げから、ハイパースレッディングがない場合、コアごとに1つのスレッド(プロセス)しかありません。私が間違っている場合は私を訂正してください。

0 投票する
4 に答える
7187 参照

macos - 6 コア Intel Xeon でハイパースレッディングをオフにする

モンテカルロ計算を行うために、12 コアの MacPro を入手しました。同社の Intel Xeon プロセッサではハイパースレッディング (HT) が有効になっているため、実際には 24 のプロセスを並行して実行して完全に活用する必要があります。ただし、計算は 24x50% よりも 12x100% で実行する方が効率Processor的であるため、より高いパフォーマンスを得るために、システム設定のペインでハイパー スレッディングをオフにしようとしました。HT をオフにすることもできます。

次に、いくつかのテストを実行した結果、次の結果が得られました。

  1. 残念なことに、12 個の並列タスクが HT の有無にかかわらず同時に実行されます。
  2. HT がオフの場合、24 の並列タスクは 20% を失います (私たちが考えていた -50% ではありません)。
  3. HT がオンの場合、24 タスクから 12 タスクに切り替えると、効率が 20% 低下します (これも驚くべきことです)。
  4. HT がオフの場合、24 から 12 に切り替えても何も変わりません。

ハイパースレッディングは計算のパフォーマンスを低下させるだけのようで、回避する方法はありません。計算に使用するプログラムは、Fortran で記述され、.NET でコンパイルされていgfortranます。このハードウェアでより効率的にする方法はありますか?


アップデート:当社のモンテカルロ計算 (MCC) は通常、データの損失を回避するため、およびその他の理由により段階的に実行されます (このような段階を常に回避できるとは限りません)。私たちの場合、各ステップは可変期間の多くのシミュレーションで構成されています。各ステップは多数の並列タスクに分割されるため、期間も可変です。基本的に、すべての高速タスクは、最も低速なタスクが完了するまで待機する必要があります。この事実により、より大きなステップを作成する必要があり、平均化による時間のずれが少なくなり、プロセッサは待機に時間を浪費しなくなります。これが、24*1.33 GHz の代わりに 12*2.66 GHz を使用する動機です。HT をオフにできる場合、HT を使用する 24 タスクから HT を使用しない 12 タスクに切り替えることで、約 +10% のパフォーマンスが得られます。ただし、テストでは、20% を失うことが示されています。

テストでは非常に大きなステップを使用しましたが、通常はステップが短いため、効率がさらに向上します。

もう 1 つの理由があります。一部の計算では 3 ~ 5 GB のメモリが必要になるため、12 個の高速タスクを使用することがいかに経済的であるかがわかります。共有メモリの実装に取り​​組んでいますが、長期プロジェクトになる予定です。したがって、既存のハードウェア/ソフトウェアをできるだけ高速にする方法を見つける必要があります。

0 投票する
1 に答える
670 参照

multithreading - ハイパースレッディングを使用したシングルコア PC でのテスト

マルチスレッド プログラムが、ハイパースレッディングを使用するシングル コア CPU で安全に実行される場合、ハイパースレッディングを使用するデュアル コア CPU でも安全に実行されますか? スレッドセーフなどについて

編集

わかりました、私はより具体的にしようとします。つまり、(同時実行性) 問題にならないことを忘れたか、確認できなかった悪いソース コード行です。

したがって、1 コアの htt は、デッドロック、クラッシュ、CPU スパイク、または私のコードが 2 コア マシンで引き起こすあらゆるものを防ぐことによって「嘘」をつくのかもしれません。htt PC の 2 つの (論理) プロセッサが、デュアルコア PC の 2 つのプロセッサと正確にどのように異なるのか、htt がどのように透過的であるかはわかりません。何か問題があれば、そのためだけに 2 台目の PC を購入するかもしれないので、質問しました。

0 投票する
0 に答える
1229 参照

winapi - プログラムでハイパースレッド対応の CPU を検出しますか?

win32 アプリがハイパースレッド テクノロジを搭載した CPU を搭載したマシンで実行されているかどうかをプログラムで判断するにはどうすればよいですか?

0 投票する
6 に答える
3393 参照

multithreading - デュアルコアハイパースレッディング:4つのスレッドを使用する必要がありますか、それとも3つまたは2つを使用する必要がありますか?

複数のスレッド(またはプロセス)を同時に生成する場合、タスクがCPUにバインドされていると仮定して、物理プロセッサーの数または論理プロセッサーの数と同じ数を生成する方がよいでしょうか?それとも、その間に何かをする方が良いですか(たとえば、3つのスレッド)?

パフォーマンスは、実行される命令の種類に依存しますか(たとえば、非ローカルメモリアクセスはキャッシュヒットとは大きく異なります)?もしそうなら、どの場合にハイパースレッディングを利用する方が良いですか?


アップデート:

私が尋ねている理由は、仮想プロセッサの数と同じ数のタスクがある場合、同じ物理コア上のタスクが一部のCPUリソースを枯渇させ、相互に必要な数のリソースを取得できなくなる可能性があることをどこかで読んだことを覚えています。パフォーマンスが低下する可能性があります。そのため、仮想コアと同じ数のスレッドを使用するのは良い考えかどうか疑問に思っています。