問題タブ [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.
hyperthreading - ハイパースレッディング対応のクアッドコアCPUで実行されているシングルCPUプログラム
私は統計的パターン認識の研究者であり、何日も実行されるシミュレーションを頻繁に実行します。私はLinux3.2.0-24-genericでUbuntu12.04を実行しています。これは、私が理解しているように、マルチコアとハイパースレッディングをサポートしています。Intel Core i7 Sandy Bridge QuadcoreとHTTを使用すると、4つのシミュレーション(時間がかかるプログラム)を同時に実行することがよくあります。私が質問する前に、ここに私がすでに知っていること(私が思う)があります。
- 私のOS(Ubuntu 12.04)は、ハイパースレッディングのために8つのCPUを検出します。
- 私のOSのスケジューラーは、OSがSMP(同時マルチスレッディング)をサポートしているため、同じ物理コアに属する2つの論理(仮想)コアで実行する2つのプログラムをスケジュールすることはありません。
- ハイパースレッディングに関するウィキペディアのページを読みました。
- SandyBridgeのHowStuffWorksページを読みました。
OK、私の質問は次のとおりです。コンピューターで4つのシミュレーション(プログラム)を同時に実行すると、それぞれが別々の物理コアで実行されます。ただし、ハイパースレッディングにより、各物理コアは2つの論理コアに分割されます。したがって、各物理コアが各シミュレーションの実行に全容量の半分しか使用していないというのは本当ですか?
事前にどうもありがとうございました。私の質問のいずれかの部分が明確でない場合は、私に知らせてください。
c# - ハイパースレッディングを無効にするか、ProcessorAffinityを変更しますか?
BIOSでハイパースレッディングを無効にすると、マルチスレッド計算のいくつかがより高速に実行されることに気付きました。
また、現在のプロセスのプロセッサアフィニティを変更することで、(論理)CPUをプログラムで無効にできることも学びました。たとえば、C#では次のようになります。
少なくともパフォーマンスの観点から、プロセッサアフィニティを変更して毎秒(論理)CPUを無効にすると、ハイパースレッディングを完全に無効にするのと同じ効果がありますか?
macos - Mac-pro 2008 で EFI からハイパースレッディングを無効にしますか?
ファームウェア レベル (EFI) で HT を無効にする方法はありますか?? サーバー Linux ディストリビューションと macosx の両方が mac-pro 2008 ワークステーションにインストールされています。
Googleで検索すると、EFIシェルコマンド「cpuconfig threads off」が思いつきましたが、これはEFIが付属するHPサーバーでのみ機能するようです。
Mac-Proのソリューションは何ですか??
緊急の解決策として、ubuntu の論理 CPU を手動で 1 つずつ無効にすることができますが、これが効率的なパフォーマンスと最大 CPU 周波数を得る良い方法かどうかはわかりません。
winapi - コアとハイパースレッディング
私は、多かれ少なかれ限られた時間空間でタスクを実行する、非常に最適化された CPU 集約型のマルチスレッド コードを C で書いています。この間、初期値をロードして最終結果を保存する場合を除いて、L1 キャッシュから出ることはありません。したがって、基本的にこれは、追加されたすべてのコアに対して線形にスケーリングする並列化されたコードです。これは、非 HT コアで発生することです。
HT を搭載した 2 コア i5 (BIOS で無効にすることはできません。これは非現実的な解決策です) では、1 コアから 2 コアにすると、厄介な改善が見られます。私の仮説は、最初のスレッドはコア上で単独で実行され、2 番目のスレッドは最初のスレッドとコアを共有するというものです。
Windows API には、使用可能なコアと HT に関する情報を取得する関数があります。しかし、この情報を利用して、コアごとに 1 つのハイパースレッドに 1 つのスレッドしか存在しないようにするにはどうすればよいでしょうか?
java - CPUがハイパースレッディングであるかどうかをJavaでチェックすることは可能ですか?
実行できる最適なスレッド数を知りたいのですが。通常、これはに等しくなりRuntime.getRuntime().availableProcessors()
ます。
ただし、ハイパースレッディングをサポートするCPUでは、返される数は2倍になります。さて、いくつかのタスクではハイパースレッディングは良いですが、他のタスクでは何もしません。私の場合、それは何もしないのではないかと思うので、返された数Runtime.getRuntime().availableProcessors()
を2で割る必要があるかどうかを知りたいと思います。
そのためには、CPUがハイパースレッディングであるかどうかを推測する必要があります。したがって、私の質問-Javaでそれを行うにはどうすればよいですか?
ありがとう。
編集
OK、コードのベンチマークを行いました。これが私の環境です:
- Lenovo ThinkPad W510(つまり、4コアとハイパースレッディングを備えたi7 CPU)、16GのRAM
- Windows 7
- 105Mから16Mの範囲のzipサイズの84のzipCSVファイル
- すべてのファイルはメインスレッドで1つずつ読み取られます。HDへのマルチスレッドアクセスはありません。
- 各CSVファイルの行にはいくつかのデータが含まれており、そのデータは解析され、高速の文脈自由テストによって行が関連しているかどうかが判断されます。
- 関連する各行には、2つのdouble(好奇心旺盛な人のために経度と緯度を表す)が含まれています。これらは強制的に1つにされ
Long
、共有ハッシュセットに格納されます。
したがって、ワーカースレッドはHDから何も読み取りませんが、コンテンツの解凍と解析(opencsvライブラリを使用)に専念します。
以下は、退屈な詳細なしのコードです。
結果を以下で見つけてください(繰り返し部分を省略するために出力を少し変更しました):
独自の結論を自由に引き出すことができますが、私の具体的なケースでは、ハイパースレッディングによってパフォーマンスが向上するということです。また、6つのワーカースレッドを持つことは、このタスクと私のマシンにとって正しい選択のようです。
hyperthreading - ハイパースレッディング構成
2 つの Intel Xeon x5550 クアッドコア プロセッサ (合計 8 コア) を搭載したマシンがあるとします。ハイパースレッディングが有効になっています。
実際の 4 つの物理コアを使用する代わりに、2 つの物理コアとコアあたり 2 つのスレッド (ハイパースレッディング) を備えた 4 コア (4 スレッド) でアプリケーションを実行したいと考えています。
これを行うことは可能ですか?
openmpi - コアごとに 2 つの MPI プロセスを割り当てる
コアごとに 2 つの MPI プロセスを割り当てるにはどうすればよいですか?
たとえば、mpirun -np 4 ./application
2 つの物理コアを使用して 4 つの MPI プロセス (コアあたり 2 つのプロセス) を実行する必要があります。Open MPI 1.6 を使用しています。しmpirun -np 4 -nc 2 ./application
ましたが、実行できませんでした。
文句を言うmpirun was unable to launch the specified application as it could not find an executable:
performance - ハイパースレッディングでの L1 キャッシュの適応モードについて
私は最近、ハイパースレッディングについて研究している学生です。L1 Data Cache Context Mode という機能について少し混乱しています。
アーキテクチャ最適化マニュアルでは、L1 キャッシュは 2 つのモードで動作できると説明されています。
第 1 レベルのキャッシュは、コンテキスト ID ビットに応じて 2 つのモードで動作できます。
共有モード: L1 データ キャッシュは、2 つの論理プロセッサによって完全に共有されます。
適応モード: 適応モードでは、ページ ディレクトリを使用するメモリ アクセスは、L1 データ キャッシュを共有する論理プロセッサ間で同じようにマップされます。
ただし、説明に従って、適応モードでキャッシュがどのように分割されるかについては興味があります。
hyperthreading - IntelIPPライブラリの要件
そのため、ライブラリ(文字列照合)に付属するIntel IPPサンプルアプリケーションをコンパイルしようとしていますが、IPP命令を利用できないようです。マシンのコアの1つを無効にしても、計算時間は同じままです。私のマシンがIPPのすべての要件を満たしているかどうか、および/またはこの状況が存在する理由を知りたいです。
環境は次のとおりです。
- Windows 7
- IPP 7.0
- Intel Core i3(それぞれ2つのスレッドを持つ2つのコア)
- msconfigオプションを使用してコアを無効にします([ブート]タブ> [詳細オプション...])
ご覧のとおり、論理プロセッサの数はプロセッサの数よりも多いため、私のマシンではハイパースレッディングがサポート/有効になっていると想定しています。
python - python ハイパースレッディングが有効になっているかどうかを確認する方法
Intel i7-2600K クアッドコアを使用しており、Ubuntu 12.04 でハイパースレッディングが有効になっています。を使用して Python にあるコアの数を確認できることはわかっていますがimport multiprocessing; multiprocessing.cpu_count()
、4 つの物理コアでハイパースレッディングが有効になっているため、8 になります。私が持っている物理コアの数を調べることに興味があります。Pythonでそれを行う方法はありますか? または、ハイパースレッディングが有効になっているかどうかを Python で確認する方法はありますか? よろしくお願いします。