この記事は、インテル社のウェブサイトで公開されている「Intel® Advanced Vector Extensions 10 (Intel® AVX10) Architecture Specification」 (July 2023 Revision 1.0 資料番号: 355989-001US、更新日: 2023年7月21日) から CPUID 機能列挙の説明を抜粋した日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
はじめに
インテル® アドバンスト・ベクトル・エクステンション 10 (インテル® AVX10) は、2013年に導入されたインテル® アドバンスト・ベクトル・エクステンション 512 (インテル® AVX-512) 以来の新しいベクトル ISA です。
この ISA は、インテル® AVX-512 のベクトル化機能を取り込んだ、すべてのインテル® アーキテクチャーにわたって共通の統合されたベクトル命令セットとなります。この ISA は、Performance-core (P コア) と Efficient-core (E コア) を搭載する、将来のすべてのインテル® プロセッサーでサポートされる予定です。
インテル® AVX10 ISA は、今後の ISA における最新のイノベーション、命令、そして機能を表します。インテル® AVX-512 ISA 機能セットに基づいており、開発コード名 Granite Rapids マイクロアーキテクチャー・ベースのインテル® Xeon® プロセッサーで導入されるすべてのインテル® AVX-512 命令が含まれ、スカラー命令と opmask 命令ですべての命令ベクトル長 (128、256、512) をサポートします。最大ベクトル長 256 ビットと 32 ビット opmask レジスターを備えたインテル® AVX10 の 「統合」 (英文では「converged」と表記されます) バージョンは、すべてのインテル® プロセッサーでサポートされますが、512 ビットのベクトルレジスターと 64 ビットの opmask は一部の P コア・プロセッサーでのみサポートされます。
インテル® AVX10 アーキテクチャーでは、インテル® AVX2 ISA を凌駕するいくつかの機能が導入されています。
- バージョンベースの命令セット列挙。
- インテル® AVX10/256 – すべてのインテル® プロセッサーでの統合実装をサポートします。EVEX エンコード、32 個のベクトルレジスター、最大ベクトル長 256 ビット、8 個の最大 opmask 長 32 ビットのマスクレジスター 。
- インテル® AVX10/512 – 追加のベクトル長を利用できる重いベクトル計算を行うアプリケーション向けに、P コア・プロセッサー上で 512 ビット・ベクトルと 64 ビット opmask レジスターをサポートします。
- YMM バージョンの命令に対する埋め込み丸めおよびすべての例外の抑制 (SAE) を制御。
- インテル® AVX10/512 対応プロセッサーでハードウェア強制によるインテル® AVX10/256 実行環境を提供するインテル® AVX10/256 仮想マシンを作成する VMX 機能。
機能列挙
インテル® AVX10 では、単純に増加し、包括的で、すべてのベクトル長の列挙をサポートする、新しいバージョン管理が導入されています。これは、すべてのインテル® プロセッサーが特定のインテル® AVX10 バージョン番号で同じ機能と命令をサポートすることで、アプリケーション開発を簡素化するため機能のサポートを確認する CPUID 機能フラグを減らすために導入されています。
この列挙方式では、アプリケーション開発者は次の 3 つのフィールドをチェックするだけで済みます。
- インテル® AVX10 ISA がサポートされることを示す CPUID 機能ビット。
- サポートされるバージョンが対象のバージョン以上であることを確認するバージョン番号。
- サポートされるベクトルの最大長を示すベクトル長ビット。
「AVX10 Converged Vector ISA Enable (AVX10 統合ベクトル ISA 有効)」ビットは、プロセッサーの ISA サポートと、バージョン番号およびサポートされるベクトルビット長を含む「AVX10 統合ベクトル ISA (AVX10 統合ベクトル ISA)」リーフが存在するかどうかを示します。詳細については、表 1.1 を参照してください。
CPUID ビット | 説明 | タイプ |
---|---|---|
CPUID.(EAX=07H, ECX=01H):EDX[bit 19] | このビットが 1 の場合、インテル® AVX10 統合ベクトル ISA がサポートされます。 | ビット (0/1) |
CPUID.(EAX=24H, ECX=00H):EAX[bits 31:0] | サポートされる最大サブリーフを示します。 | 整数 |
CPUID.(EAX=24H, ECX=00H):EBX[bits 7:0] | インテル® AVX10 統合ベクトル ISA のバージョンを示します。 | 整数 (≥ 1) |
CPUID.(EAX=24H, ECX=00H):EBX[bits 15:8] | 予約済み | N/A |
CPUID.(EAX=24H, ECX=00H):EBX[bit 16] | このビットが 1 の場合、128 ビット・ベクトルがサポートされることを示します。 | ビット (0/1) |
CPUID.(EAX=24H, ECX=00H):EBX[bit 17] | このビットが 1 の場合、256 ビット・ベクトルがサポートされることを示します。 | ビット (0/1) |
CPUID.(EAX=24H, ECX=00H):EBX[bit 18] | このビットが 1 の場合、512 ビット・ベクトルがサポートされることを示します。 | ビット (0/1) |
CPUID.(EAX=24H, ECX=00H):EBX[bits 31:19] | 予約済み | N/A |
CPUID.(EAX=24H, ECX=00H):ECX[bits 31:0] | 予約済み | N/A |
CPUID.(EAX=24H, ECX=00H):EDX[bits 31:0] | 予約済み | N/A |
CPUID.(EAX=24H, ECX=01H):EAX[bits 31:0] | 個別の機能ビット向けに予約されています。 | N/A |
CPUID.(EAX=24H, ECX=01H):EBX[bits 31:0] | 個別の機能ビット向けに予約されています。 | N/A |
CPUID.(EAX=24H, ECX=01H):ECX[bits 31:0] | 個別の機能ビット向けに予約されています。 | N/A |
CPUID.(EAX=24H, ECX=01H):EDX[bits 31:0 | 個別の機能ビット向けに予約されています。 | N/A |
このバージョン管理による ISA 列挙のアプローチは、バージョンが N から N+1 に増加する際に次の規則に従います。
- 最新のプロセッサー・ファミリーはすべて、インテル® AVX10 バージョン N+1 をサポートします。
- インテル® AVX10 バージョン N+1 は、バージョン N よりも進化した機能を提供し、関連するソフトウェアを有効にする取り組みを正当化します。
バージョン間で機能が導入されるまれなケースでは、「AVX10-XXXX」形式で個別の CPUID 機能ビットが割り当てられ、CPUID リーフ 24H のサブリーフ 1 が列挙されることがあります (例えば、CPUID EAX=24H、ECX=01H など)。ただし、レガシーサポートは継続されるため、これは通常ではなく例外であると考えられます。
インテル® AVX10 列挙には、次のような重要な原則があります。
- バージョン N+1 がバージョン N のスーパーセットであるように、バージョンは包括的です。命令がインテル® AVX10.x に導入されると、それは後続のインテル® AVX10 バージョンにも引き継がれることが期待され、開発者は目的のバージョン以上をチェックするだけで済みます。
- インテル® AVX10 のサポートを示すプロセッサーは、インテル® AVX およびインテル® AVX2 もサポートします。
- 開発者は、プロセッサーでサポートされる最大ベクトル長は、それよりも短いベクトル長もすべてサポートされることを想定できます。インテル® AVX-512 のスカラー命令は、最大ベクトル長に関係なくサポートされます。
- インテル® AVX10/256 では、32 ビットの opmask レジスター長がサポートされます。インテル® AVX10/512 では、64 ビットの opmask がサポートされます。現時点では、インテル® AVX10/128 の実装をサポートする予定はありません。
インテル® AVX10 の最初のフル機能バージョンは、バージョン 2 (インテル® AVX10.2) として列挙されます。これには、新しい YMM 形式の埋め込み丸めとすべての例外抑制 (SAE)、新しい列挙方式、およびいくつかの新しい命令セットが含まれます。
128、256、および 512 ビットでインテル® AVX-512 命令セットのみを列挙するインテル® AVX10 の最初のバージョン (バージョン 1 またはインテル® AVX10.1) は、ソフトウェア開発者が事前に開発を検証するため、開発コード名 Granite Rapids マイクロアーキテクチャーで有効になります。インテル® AVX10.1 で記述されるアプリケーションは、インテル® AVX10.1 以降を搭載する将来のインテル® プロセッサー (P コアまたは E コア) で目的とするベクトル長で動作します。インテル® AVX10.1 に含まれるインテル® AVX-512 命令セットを表 1-2 に示します。
- インテル® AVX10 をサポートする最初のプロセッサー・ファミリーは、開発コード名 Granite Rapids マイクロアーキテクチャー・ベースの将来のインテル® Xeon® プロセッサーから始まります。
機能 | インテル® AVX10 に含まれる インテル® AVX-512 CPUID 機能フラグ |
---|---|
開発コード名 Skylake マイクロアーキテクチャー・ベースのインテル® Xeon® スケーラブル・プロセッサー・ファミリー | AVX512F、AVX512CD、AVX512BW、AVX512DQ |
開発コード名 Cannon Lake マイクロアーキテクチャー・ベースのインテル® Core™ プロセッサー | AVX512_VBMI、AVX512_IFMA |
開発コード名 Cascade Lake 製品ベースの第 2 世代インテル® Xeon® スケーラブル・プロセッサー・ファミリー | AVX512_VNNI |
開発コード名 Cooper Lake 製品ベースの第 3 世代インテル® Xeon® スケーラブル・プロセッサー・ファミリー | AVX512_BF16 |
開発コード名 Ice Lake マイクロアーキテクチャー・ベースの第 3 世代インテル® Xeon® スケーラブル・プロセッサー・ファミリー | AVX512_VPOPCNTDQ、AVX512_VBMI2、VAES、GFNI、VPCLMULQDQ、AVX512_BITALG |
開発コード名 Sapphire Rapids マイクロアーキテクチャー・ベースの第 4 世代インテル® Xeon® スケーラブル・プロセッサー・ファミリー | AVX512_FP16 |
注: VAES、VPCLMULQDQ、および GFNI EVEX 命令は、インテル® AVX10 マイクロアーキテクチャーでもサポートされますが、この機能は既存の CPUID 機能フラグで列挙されます。これらの命令を利用するには、開発者は機能フラグとインテル® AVX10 の両方を確認する必要があります (例: AVX10 と VAES など)。
インテル® AVX-512 は、従来のアプリケーションをサポートするため、当面は P コア・プロセッサーのみでサポートされます。ただし、新しいベクトル ISA 機能のサポートは、インテル® AVX10 ISA のみに限定されます。インテル® AVX10/512 には、すべてのインテル® AVX-512 命令が包括されていますが、ベクトル長が 256 ビットに制限されるインテル® AVX-512 としてコンパイルされたアプリケーションは、インテル® AVX10/512 プロセッサーでの互換性は保証されないことに注意してください。これは、サポートされるマスクレジスター幅の違いによるものです (表 1-3 を参照)。インテルは、開発者が事前にコードを検証できるツールを提供します。
機能 | インテル® AVX-512 |
インテル® AVX10.1/256 |
インテル® AVX10.2/256 |
インテル® AVX10.1/512 |
インテル® AVX10.2/512 |
---|---|---|---|---|---|
最大 opmask レジスター長 | 64 ビット | 32 ビット | 32 ビット | 64 ビット | 64 ビット |
128 ビット・ベクトル (XMM ) レジスターサポート | はい | はい | はい | はい | はい |
256 ビット・ベクトル (YMM ) レジスターサポート | はい | はい | はい | はい | はい |
512 ビット・ベクトル (ZMM) レジスターサポート | はい | いいえ | いいえ | はい | はい |
YMM 埋め込み丸め | いいえ | いいえ | はい | いいえ | はい |
ZMM 埋め込み丸め | はい | いいえ | いいえ | はい | はい |
サポートされる命令セットの詳細は、「Intel® Advanced Vector Extensions 10 (Intel® AVX10) Architecture Specification」 (英語) を参照してください。