ご存知のとおり、CPUはコンピュータシステム全体の動作に必要なソフトウェアを処理します。プログラムは命令とデータで構成されており、命令は期待される結果を得るためにデータに対してどのような演算を行う必要があるかを示します。そして、すべてがこのように実行されます。CPUの最も重要なユニットの一つは、数値演算を担うALUまたはFPUです。そして、Intelなどの現在のプロセッサには、最大512ビットのデータ長を持つベクトル命令を実行できる機能ユニットが搭載されています。 AVX-512 それについてはここで説明します。
これらの拡張機能は、特に科学計算など、この種の演算を大量に必要とする特定のワークロードの処理を高速化することを目的としています。しかし、AVX-512が登場した際には、 インテルに対する良いレビューばかりではなかったしかし、この追加機能をまったく気に入らなかった人も多く、後述するように特定の問題に遭遇した人もいました…
以下もご興味があるかもしれません:
ALU はどのように機能しますか?
AVX-512 命令セットについて詳しく学ぶ前に、まず命令セットがどのように機能するかを理解することが重要です。 ALU(算術論理ユニット)つまり、算術および論理演算処理装置です。
つまり、このユニットでは、 加算、乗算、除算などの演算を含む計算。これらのタスクを実行するために、ALUはCPUの制御部によって制御される特定のデジタル回路を使用します。メモリから処理対象の命令をキャプチャしてデコードすると、レジスタにロードされた2つのデータ項目の処理方法を示すオペコードをALUに送信します。例えば、ADD命令は加算、SUB命令は減算、MUL命令は乗算、DIV命令は除算などです。
さらに、このALUは、他のCPUユニットと同様に、 クロック周波数。 たとえば、5GHz の場合、非常に簡単に言えば、5.000 秒あたり XNUMX 億回の演算を実行することになります。
しかし、CPUのクロック速度が上昇するにつれて、CPUの発熱量も増加します。そのため、周波数をどんどん高くするだけでは、パフォーマンスを向上させる唯一の解決策にはなりません。そのため、CPU設計者は、コアレベルの並列処理、レジスタリネーミング、予測と投機、アウトオブオーダー実行、スーパースカラシステムなど、パフォーマンスを向上させるための代替手段を検討する必要があります。また、計算能力を向上させるための対策としては、 SIMDと呼ばれる命令つまり、より大きなデータセットを操作できるベクトルです。
これらの例 指示はAVX-512です残りのユニットは64ビットデータで動作しますが、これらの拡張のための特別なユニットは512ビットデータ長で動作します。つまり、通常のワードサイズの8倍を一度に処理できます。これを行うには、 ALU(整数)またはFPU(浮動小数点の場合) より大きく複雑になり、最終的にはチップ面積が大きくなり、コストが高くなり、その他の複雑さも生じます…
データはどのようにして ALU に届くのでしょうか?
さて、ALUとは何か、どのように動作するのか、そしてAVX-512が基本的なレベルで何に使われるのか、基本的な理解ができたので、次のステップは データがALUに到達する方法これによって、これらの拡張機能についても理解しやすくなります。
ALUに到達するには、データは異なるストレージシステムを経由して移動する必要があります。このデータの移動は、 メモリ階層 コンピュータシステムの階層構造。この階層構造を簡単に説明すると、次のようになります。
- 二次メモリ: これらは大容量記憶媒体、つまり HDD や SSD ハードドライブ、そして光学メディアなど、I/O システムに接続される可能性のあるその他のドライブです。これらのドライブには大量の情報が保存されますが、CPU の速度に比べてメモリ速度が遅いため、これらのメディアにアクセスすると遅延が大きくなり、ペナルティが発生します。そのため、このペナルティを回避するには、このデータをプライマリメモリにロードする必要があります。これについては次の項目で説明します。例えば、より分かりやすくするために、ハードドライブに Word がインストールされていて、それを実行したいとします。このソフトウェアは、CPU が実行するために必要な命令とデータを含む一連の実行可能ファイルまたはバイナリで構成されています。また、USB フラッシュドライブや DVD からオペレーティングシステムをインストールした場合など、実行したいソフトウェアがハードドライブ上に存在しない場合もあります。その場合、命令とデータを含む実行可能バイナリもそこにあります。
- 主記憶: プライマリストレージシステムは、ランダムアクセスメモリ(RAM)で構成されています。このストレージシステムはセカンダリストレージシステムよりも高速ですが、電源投入時に情報を保存する揮発性メモリであるため、保存できる情報量は少なく、永続的に保存することもできません。つまり、コンピューターの電源を切っても、インストールしたプログラムは消去されませんが、RAMの内容は消去されます。前述のように、プロセスまたはプログラムがRAMにロードされる際に実際に行われているのは、実行可能バイナリの命令とデータをセカンダリユニットからプライマリユニットに転送することです。プライマリユニットはCPUがより高速にアクセスできるデバイスです。
- キャッシュ: キャッシュはCPUに組み込まれており、最も高速なメモリシステムですが、容量が非常に小さく、揮発性です。このメモリシステムは一般的にL1、L2、L3のXNUMXつの部分に分かれています。ALUで処理する必要があるデータは、ハードドライブからRAMへ、そしてキャッシュへ移動されます。しかし、ALUはキャッシュのデータに直接アクセスすることはできません。そのため、ALUはさらに小型で高速な別のメモリを必要とします。これが次のポイントです…
- CPUレジスタ: CPUレジスタは、非常に高速なフリップフロップ要素で構成された非常にシンプルなメモリです。CPUアーキテクチャに応じて、レジスタのサイズは変更できます。たとえば、8ビット、16ビット、32ビット、64ビットなどです。さらに、レジスタの数は可変であり、それらすべてがCPUのレジスタウィンドウまたはファイルを構成します。ALUやFPUなどのコンピューティングユニットは、これらのレジスタにロードされたデータにアクセスできます。したがって、フェッチサイクルで命令がRAMからCPUにフェッチされると、命令は制御ユニットによってデコードまたは解釈され、その命令の実行に伴う内容が決定されます。たとえば、ADD r1、r2、r3は、レジスタr2 + r3のデータを加算し、結果をr1に格納します。このように、制御ユニットはこのオペコードをALUに送信し、値とデータ(この場合は必要なレジスタ)の位置を加算するように指示します。次にALUがデータにアクセスし、加算演算を実行します。これがこの階層の仕組みです。
また、ご存知のとおり、 データと指示 最も頻繁に使用されるファイルはキャッシュされるため、将来再び必要になったときに素早くアクセスできます。ご想像のとおり、キャッシュのレベルが上がるにつれて速度は上がります。
- L1これは最初のレベルで、最も高速で、レイテンシが最も低いです。つまり、アクセス時に無駄になるクロックサイクルが少ないということです。さらに、このメモリは通常、データ用のL1DまたはL1と、命令用のL1IまたはL1に分割されています。つまり、命令とデータが混在することはありません。
- L2これは次のレベルのキャッシュで、L1よりも容量が大きいですが、やや遅いため、アクセスに多くのサイクルが必要です。ここでは、データと命令が統合されているため、混在して使用されます。
- L3このレベルはL2よりも容量が大きいですが、L2よりもさらに低速です。また、L2と同様に統合型で、データと命令の両方を保存します。L3が最後のレベルである場合、LLC(Last Level Cache)とも呼ばれますが、他のシステムではL4など、他のレベルが使用される場合もあります。
ご想像のとおり、CPUがデータや命令を検索する必要がある場合、パフォーマンスを向上させるために、まずL1を検索します。これは、アクセスに必要なクロックサイクルが最も少ないためです。L2に見つからない場合は、次に高速なL3を検索します。L3にも見つからない場合は、LXNUMXを検索します。LXNUMXにも見つからない場合は、RAMを検索する、というように続きます。
AVX-512 とは何ですか? どのように機能しますか?
のセット AVX-512の説明書 これは AVX の 2013 番目のイテレーションであり、XNUMX 年に Intel プロセッサに導入されました。AVX は Advanced Vector Extensions の略で、最初に Intel の Xeon Phi (Knights Landing) で導入され、その後 Skylake-X ベースの Xeon とともに Intel サーバーに導入されました。
さらに、AVX-512命令セットは、PCなどのコンシューマー機器にも採用され、 キャノンレイクの建築 その後、Ice LakeとTiger Lakeアーキテクチャをサポートしました。おそらく、これは決して取るべきではなかった、最も批判された措置の一つでしょう。なぜなら、これらの命令を活用できるソフトウェアが不足していたこと、そしてユニットの複雑さが増したからです。
上で説明したように、ALU/FPUは、 CPUレジスタAVX命令セットはこれらのレジスタのサイズを拡大します。これにより、複数のデータポイントを1つの命令で処理できるようになり、パフォーマンスが向上します。
この一連の指示の主な目的は データ圧縮、画像処理、暗号計算に関連するタスクを高速化します。AVX-256命令セットはAVX-512のXNUMX倍の演算能力を提供し、大幅なパフォーマンス向上をもたらしました。しかし、多くの人が考えるほど、これらのIntel CPUのパフォーマンスはXNUMX倍になったわけではありません。
Intel が AVX-512 を廃止する理由は何ですか?

上で説明したように、AVX-512命令セットは計算においていくつかの利点を提供しますが、 すべてが歓迎されたわけではないTensorFlow のような人気のライブラリは、命令セットをサポートする CPU でより高速な計算を提供するために命令セットを使用するのは事実です。
AMDはZen 512ベースのマイクロプロセッサで初めてAVX-4を採用しました。両社間の完全な移行は…
では、なぜIntelは最近のAlder LakeプロセッサでAVX-512を無効化したのでしょうか?実は、完全に削除したわけではないのです。例えば、 アルダーレイク 高性能の P コアと高効率の E コアを備えた異機種マルチコア アーキテクチャで構成する必要があります。
PコアはGolden Coveマイクロアーキテクチャに基づいており、これらの命令を実行する能力を持っていますが、Gracemontマイクロアーキテクチャに基づくEコアでは、 これらの命令は実行できませんこれらのコアのスケジューラは、コアをより小型かつエネルギー効率の高い状態に保つために、このような命令を拒否します。
ただし、Alder Lake以降のCPUはAVX-512命令セットをサポートしていません。サポートしないと、特定のプログラムを実行できないEコアがいくつか存在するためです。ただし、HPCやサーバー向けのXeonなど、Intelがこれらのコアを物理的に混在させていない他のCPUでは、これらのコアを使用できます。また、混在が許可されている一部のコンピューターでも使用できます。 Eコアを無効にする BIOS/UEFI から。
コンシューマー向け CPU には AVX-512 が必要ですか?

AVX-512命令セットはCPUのレジスタサイズを拡大し、パフォーマンスを向上させます。 パフォーマンスの向上 CPU が数値をより高速に処理できるようになり、ユーザーはビデオ/オーディオ圧縮アルゴリズムをより高速に実行できるようになります。
ただし、このパフォーマンスの向上は、プログラムで定義された命令が 実行に最適化 AVX-512命令セットでは、これらの命令は完全に役に立たなくなります。AVX-512の採用率が低いことを考えると、このような状況はほとんど発生しません。
このため、AVX-512のような命令セットアーキテクチャは、 サーバーおよびHPCしかし、一般消費者にとってはそうではありません。したがって、そうすることにあまり意味はありません。
では、なぜAMDは今になってそれらを統合したのでしょうか?当時は、Intelが抱えていた問題と同じ問題を避けるために、AMDはそれらから距離を置くことでうまくやっていました。しかし今では、彼らは逆の方向に進み、それらを採用しています。その理由は、AMDが設計したマイクロアーキテクチャ、例えば 禅4AVX-512はRyzen、Threadripper、EPYCチップの両方に使用されており、おそらくIntelが当時行ったように、すべてのチップに同じものを作成したのでしょう。これにより、AMDはサーバー、ワークステーション、HPCでもAVX-XNUMXを使用し、Xeonに対抗できるようになりました。
Intel が Alder Lake からそれらを削除したのはなぜですか?

IntelのAlder LakeプロセッサにおけるAVX-512命令のサポート それは不透明な事件だった同社は当初、この機能は同社の新しい第12世代以降のプロセッサでは動作しないと発表していました。しかし、マザーボードベンダーがファームウェアからこれらの命令を有効にするさまざまな回避策を発見したため、同社は方針を転換しました。
このように、あなたはすることができます BIOS/UEFIからこのオプションを有効または無効にする これにより、ユーザーはワークロードのニーズに応じて AVX-512 を使用するかどうかを選択できます。
しかし、インテルはオーバークロック用にロック解除されていない非Kユニットを販売しているようです。 AVX-512 はデフォルトで無効になっていますまた、これらの製品のハードウェア レベルでは削除されないようですが、このブロックによりユーザーは製品を使用できなくなります。
しかし、インテルはマウスとマウスで遊んでいるようで、最終的にアメリカの会社は サポートを物理的に無効にする AVX-512 命令はシリコン レベルでコンシューマー チップに使用されているため、エネルギー効率の向上という名目でこれらの命令を使用することはできません。
つまり、まとめると、Intel が行った変化は次のようになります。
- 同氏は報道陣に対し、AVX-512は新しいハイブリッドプロセッサと互換性がないと語った。
- リリース前に、この機能の使用方法を示す最適化ガイドが公開されました。
- Intelは、おそらく過去に受けた批判のせいか、これらの命令がサポートされていることを再度否定し、その後、このガイドから参照を削除しました。
- Alder Lakeがリリースされた際、適切なファームウェアを搭載した一部のマザーボードで命令が動作することが発覚しました。これは、マザーボードメーカーがIntelの意に反して行った行為でした。
- インテルは当初沈黙していたが、台湾の報道機関に対しては、AVX-512 のサポートは存在するがデフォルトではないため、オーバークロックのリスクを負うのと同じように、自己責任で使用したい場合は使用できると伝えた…
- 昨年、Intel は新しいファームウェアまたはマイクロコードのアップデートで AVX-512 を最終的に無効にすることを発表しました。
- 同じ週に、AVX-512 オプションを無効にした BIOS/UEFI リリースが登場しました。
- MSI は、この Intel AVX-512 ロックをバイパスする方法を見つけ、BIOS/UEFI を簡単に変更できるようにしました。
- Intelはこれに不満を抱き、最終的にハードウェアで命令セットを無効化することを決定しました。これにより、いかなる改ざんも不可能になりました。そのため、初期のAlder Lakeビルドでは物理的に利用可能になりますが、後期のAlder Lakeビルドでは利用できなくなります。
AVX-512を有効にしたい場合は、 Intel Xeonを購入するもちろん、より高価になります。
この間ずっと メロドラマAMDは現在、コンシューマー向けを含むすべてのZen 512チップにAVX-4のサポートを追加しています。そのため、PC向けにAVX-512対応プロセッサをお探しなら、現時点ではRyzen 7000(Zen 4)が最適な選択肢です。
VNNIとは何ですか?

最後に、 AVX-512 VNNI畳み込みニューラルネットワークアルゴリズムを高速化するために特別に設計された拡張機能です。頭字語VNNIは ベクトル ニューラル ネットワークの命令.
これらの命令は、初期のAVX-512拡張を拡張し、 4つの新しい指示 ニューラルネットワークのループを高速化します。これらの命令は次のとおりです。
VPDPBUSDこの命令は、最初のソース オペランドの個々のバイト (8 ビット = 1 バイト) を 16 番目のソース オペランドの対応するバイトで乗算し、32 ビット ワードの結果を生成し、それらを合計してダブル ワード (XNUMX ビット) の宛先オペランドに累積します。VPDPBUSDS: 中間合計オーバーフローが正/負の数に対して 0x7FFF_FFFF/0x8000_0000 で飽和することを除いて上記と同じです。VPDPWSSD: この他の命令では、最初のソース オペランドの個々のワード (16 ビット) を 32 番目のソース オペランドの対応するワードで乗算し、中間ワードの結果を生成します。この結果は、宛先オペランドのダブル ワード (XNUMX ビット) に加算され、累積されます。VPDPWSSDS: ご想像のとおり、中間合計オーバーフローが正/負の数に対して 0x7FFF_FFFF/0x8000_0000 で飽和する点を除けば、前のものと同じです。
AVX512 VNNI拡張の主な目的は、多くのタイトな畳み込みニューラルネットワークループにおいて、16つの8ビット値または32つのXNUMXビット値の乗算を繰り返し、その結果をXNUMXビットのアキュムレータに蓄積する必要があるという観察に基づくものです。これは、以下のXNUMXつの命令で実現できます。 VPMADDWD 16つのXNUMXビットペアを乗算し、それらを加算してXNUMXつ追加するために使用される VPADDD 累積値を加算します。