シムドソンズ決勝

画像

The SimpsonsファミリーのトップであるHomer Simpsonは、かつては本当に公式にIntelで働いていましたが、非常に成功していました。 つまり、彼はPentium IIプロセッサをドーナツとして宣伝しました。 ここでどうだっかわかるでしょう。

さて、カットの下で、Intel SIMDについての21の興味深い事実を含む前の投稿の完了を見ることができます。



  1. 最初の128ビットSSE命令はかなり前に登場しましたが、 Pentium III (そう、前世紀にそのようなプロセッサがありました)では、実際には64ビットのデータのみが1プロセッサクロックサイクルでロードおよび処理されました。 そして、Intel Coreマイクロアーキテクチャーでのプロセッサーのリリースが開始されて初めて、SSEはクロックサイクルごとに128ビットになりました。つまり、SSE-SSE3算術命令のパフォーマンスは実際に2倍になりました。 インテルのマーケティング担当者はこの変更を「 Advanced Digital Media Boost 」と名付けました。
  2. MMXは彼の由緒ある時代にも関わらず指導し、現在では「すべての生物よりも生き生き」しています。 そのため、SSSE3まで、すべてのSSE命令セットには128ビットバージョンだけでなく64ビットバージョンもあります。 同時に、どうしても必要な場合を除き、MMXと64ビットSSEを使用することはお勧めしません。 これにより、速度は向上しませんが、最新のCPUのコードは遅くなります。 そのため、Intel AtomでのAdobe Flashビデオの再生が遅くなるのは、この理由(古いMMXコード)のためであるという情報があります。

    さらに、64ビット整数のSIMD命令は、x87浮動小数点レジスタと状態を共有するMMXレジスタを使用します。 したがって、コード内でx87浮動小数点演算と64ビット整数SIMDを混在させるには、レジスタの状態を復元するために特別な関数を呼び出す必要があります-機能の正確性を保証します。
  3. SSSE3はSSE3の記述における誤字ではありませんが、 補足ストリーミングSIMD拡張3は、Intel Coreで最初に導入され、Intel Atomでもサポートされるパックド整数を操作するための一連のベクトル命令です。 16個の命令のセットには、パックデータのバイトの再配置、符号の操作、水平方向の加減算の非常に便利な操作が含まれています。

    SSSE3のパフォーマンスはそれほど高くありません(xmmレジスタの水平操作は特に高速ではありません)が、他のベクトル命令を使用すれば完全に使いやすくなります。 SSSE3対応プロセッサ-Snow Leopardの前提条件-Mac OS X 10.6
  4. ご存知のように、プロセッサ命令のパフォーマンスは、 レイテンシスループットの 2つのパラメータで記述されます (ロシア語に翻訳するリスクはありません)。 レイテンシは命令の実行時間(clics)であり、スループットは単位時間あたりに実行される命令の数です。 さらに、スループットはまったくありません(1 /待ち時間)! 実際には、命令は通常パイプライン化されます。つまり、次の命令は前の命令が完了する前でも実行を開始できます。 これはパフォーマンスを評価するための重要な情報です。

    インテルSIMDのレイテンシーおよびスループット情報(およびその他のIA命令) については、インテル®64およびIA-32アーキテクチャー最適化リファレンスマニュアルを参照してください 。 ただし、このドキュメントのデータは、すべての命令およびプロセッサ用ではありません。 したがって、AtomプロセッサやAMDプロセッサなど、さまざまなIntelプロセッサのレイテンシとスループットのSSE命令(残念ながら整数のみ)を比較したい場合は、独立した研究者が作成したこのドキュメントを参照してください。
  5. 浮動小数点を操作するためのSIMD命令の中には、隠されていないSISD、つまり、単一のデータのみを処理する非ベクトル命令があります。 それらの際立った特徴は、名前の最後の文字です。 たとえば、 rsqrtssは対応する組み込み__m128 r = _mm_rsqrt_ss(__m128 a)を使用して逆平方根の近似値を計算します

    {r0:=レシピ(sqrt(a0)); r1:= a1; r2:= a2; r3:= a3}。 興味深いことに、最初にデータをSSEレジスタにアップロードし、次にそれを使用してアップロードする必要がある場合でも

    多くの場合、これらの命令の使用は、対応する「通常の」x87浮動小数点よりも望ましいです。 このような「非ベクターのベクター命令」は、レイテンシとスループットの両方でx87よりも優れている場合があります。
  6. そして、パフォーマンスの改善について。 非正規化された(非常に小さい)浮動小数点数は、通常のx87命令と同様に、SSEコンピューティングのパフォーマンスに悪影響を及ぼします。 したがって、SIMDレジスタですべての要素が使用されていない場合は、使用する前にレジスタをゼロにすることをお勧めします。これにより、「ガベージ」の処理にかなりの時間がかかります。 もう1つの方法は、特別なプロセッサモードFlush-To-Zero(FTZ)とDenormals are Zero(DAZ)をインストールすることです。 詳細を(英語で)理解したい方はこちらをご覧ください
  7. アプリケーションのパフォーマンスがあなたに合っていても、モバイルコンピューターでアプリケーションが使用される可能性がある場合でも、SIMDを使用することは価値があります。エネルギー節約し 、コンピューターのバッテリー寿命を延ばすのに役立つからです。
  8. SSEには、ベクトル三角関数、指数関数、対数関数、およびその他の数学関数に関する命令はありませんが、それらがあると想定できます。インテルコンパイラには、浮動小数点数用の上記関数を実装するShort Vector Math LibrarySVML )が含まれています標準のSSE-intrinsik関数の形式の単精度および倍精度。

    当初、ライブラリは、インテルコンパイラチームの内部ニーズ-マットを使用したループの自動ベクトル化を実装するために開発されました。 機能しますが、実行されるほど有用であることが判明しました。 最新バージョンのインテル®コンパイラーでは、SVML組み込み関数の使用がヘルプに記載されています。また、コンパイラーで以前のバージョンを使用したり、SVMLを別のコンパイラーに固定しようとする場合は、software.intel.com / en-us / articles / how-to-implement-theを参照してください-short-vector-math-library
  9. SSEの外観からのコード内のバイナリ条件付き遷移は、通常、ベクトル化の重大な障害ではありません。ベクトルコマンドを呼び出して遷移の状態を確認します。最後に、条件チェックマスクのANDは、ブランチ「true」の操作の結果で取得され、式「(ANDの条件のテストの反転マスクはブランチの作業の結果「false」)とORで結合されます。 SSE4.1では、このタスクは簡素化されています。 ブレンドファミリの命令を使用すると、マスク(この場合は条件チェック)によって2つのベクトルを直接混合できます。つまり、すべてのANDとORが不要になるため、間違いなくコードが簡素化され、高速化されます。

    さらに、 Larrabeeベクトル命令では、すべての算術演算にマスクバージョンがあります。 実際、マスクを形成する条件を満たす要素に対してのみ、それらを実行できます(宛先レジスタに対応する要素を書き込みます)。 これは、ブランチサポートのさらなる改善です。

    しかし、 AVX命令セットでは、3オペランド命令のサポートにもかかわらず、そのような可能性はありません。
  10. ご存知のように、インテルはSSEのさらなる開発を計画していません。 この一連の命令の代わりに、新しい256ビットAVXAdvanced Vector Extensions )が間もなく登場します。 AVXに関するすべての詳細は、 対応する Intel サイトにあります。 これに加えて、AVXのサポートもAMDプロセッサーで計画されていることを追加できます。AVXを搭載したプロセッサーの最初のエンジニアリングサンプルは、Intelですでに利用可能です。



All Articles