CPU がコア間でベクトル レジスタを共有しているかどうか、または各コアに専用のレジスタがあるかどうかを知るにはどうすればよいですか?
リファレンスはどこで入手できますか?
マルチスレッドと SIMD を使用して、プログラムの浮動小数点計算を最適化したいと考えています。それらは衝突を引き起こしますか?
CPU がコア間でベクトル レジスタを共有しているかどうか、または各コアに専用のレジスタがあるかどうかを知るにはどうすればよいですか?
リファレンスはどこで入手できますか?
マルチスレッドと SIMD を使用して、プログラムの浮動小数点計算を最適化したいと考えています。それらは衝突を引き起こしますか?
別の返信のコメントから判断すると、Xeon Phi について言及しているようです。私の理解が正しければ、各スレッドが独自のベクトル レジスタのプライベート セットを持っているかどうかを尋ねていますか? 答えはイエスです!
もう少し明確にするために、Xeon Phi には約 50 個のコアがあり、それぞれに独自のレジスタ ファイルがあります。内部的に各コアは同時マルチスレッディング (SMT) をサポートしているため、レジスタ ファイルはスレッド間で共有されますが、コアごとに少なくとも4x16 の 512 ビット論理ベクトル レジスタが存在します。SMT の使用を選択した場合、レジスタに関して競合は発生しませんが、ベクトル機能ユニットに関して競合が発生する可能性があります。アイデアは、キャッシュ ミスなどを待っているときに、同じコア内のスレッドを切り替えることができるということです。
編集して質問に答えてください: SMT とは何ですか?
Xeon Phi には、50 個の物理的な順番のコアがあります。各コアには、独自の L1 命令キャッシュ、データ キャッシュ、および 2 つの機能ユニットがあります。従来の設計では、コアは i-cache からスレッド内の 2 つの隣接する命令をフェッチし、2 つの利用可能な機能ユニットでそれらを実行しようとしました。この手法を非効率にする一般的な問題の 1 つは、データが d キャッシュに存在しないロード命令を実行するときに発生しました。後続の命令はロードされるデータに依存することが非常に多いため、プロセッサはその機能ユニットに送信する命令を見つけるのが困難でした。
SMT は、これを軽減するための技術です。追加のスレッドを効率的に管理するのに十分な余分な構造を各コアに提供します。Xeon Phi では、論理レジスタ ファイルとプログラム カウンタが 4 回複製されます。キャッシュや機能ユニットなどの他のほとんどの構造は、ほぼ同じままにすることができます。d キャッシュ ミスが発生すると、プロセッサは別のスレッドの命令のフェッチを開始し、そのスレッドのレジスタのサブセットで動作する機能ユニットにそれらを送信します。このようにして、完全なコンテキスト スイッチの高いオーバーヘッドなしで、メイン メモリを待機するときに実行する作業を見つけることができます。
要約すると、Xeon Phi で 200 のコアが表示される場合がありますが、実際には、その中の 50 のみが常に並行して動作しており、残りは非常に迅速にスレッドを切り替えるだけです。
開発者に関する限り、各「コア」はプロセッサであり、たまたま同じダイ上にあります。あなたが懸念する可能性のあるものはすべて、ハードウェアおよび/またはOSでスレッドレベルで抽象化されています。