Coelacanth's Dream

Linux Kernel と Mesa3D で MI300/GFX940/GC 9.4.3 のサポートが進められる

AMD の CDNA 3 アーキテクチャ を採用した次世代データセンター向け APU、MI300 のサポートが Linux Kernel AMDGPU ドライバーと Mesa3D RadeonSI (OpenGL) ドライバーで進められている。
AMDGPU ドライバーには AMD の Alex Deucher 氏、RadeonSI ドライバーには同じく AMD の Marek Olšák 氏がパッチリスト、マージリクエストを公開している。
パッチ、コミット単体には他の AMD の開発者の署名もされている。

MI300 の GFX ID は GFX940、GPU のコア部となる GC (Graphics Compute) IP のバージョンは GC 9.4.3 とされている。

    +		case IP_VERSION(9, 4, 3):
    +			gfx_target_version = 90400;
    +			f2g = &aldebaran_kfd2kgd;
    +			break;
     		case IP_VERSION(9, 4, 3):
     			gfx_target_version = 90400;
    -			f2g = &aldebaran_kfd2kgd;
    +			f2g = &gc_9_4_3_kfd2kgd;

XCC/XCD/XCP

AMDGPU ドライバーへのパッチでは XCC, XCD, XCP といった新たな用語が見られるが、それぞれどういう意味かは説明されていない。
XCCXCD はほとんど同じ意味であり、XCC に統一するパッチが後から追加されている。恐らく GCD (Graphics Compute Die) のような GPU ダイを指す用語と思われる。

XCP については以下引用部のようなコードから、XCC (XCD) をある程度まとめて取り扱うパーテーション機能とそのパーテーションを指すものと思われる。
パーテーションモードによってコマンドプロセッサやコマンドリングバッファの振る舞いが変わるのかもしれない。

    +static int gfx_v9_4_3_switch_compute_partition(struct amdgpu_device *adev,
    +						enum amdgpu_gfx_partition mode)
    +{
    +	u32 tmp = 0;
    +	int num_xcc_per_partition, i;
    +
    +	if (mode == adev->gfx.partition_mode)
    +		return mode;
    +
    +	switch (mode) {
    +	case AMDGPU_SPX_PARTITION_MODE:
    +		num_xcc_per_partition = adev->gfx.num_xcd;
    +		break;
    +	case AMDGPU_DPX_PARTITION_MODE:
    +		num_xcc_per_partition = adev->gfx.num_xcd / 2;
    +		break;
    +	case AMDGPU_TPX_PARTITION_MODE:
    +		num_xcc_per_partition = adev->gfx.num_xcd / 3;
    +		break;
    +	case AMDGPU_QPX_PARTITION_MODE:
    +		num_xcc_per_partition = adev->gfx.num_xcd / 4;
    +		break;
    +	case AMDGPU_CPX_PARTITION_MODE:
    +		num_xcc_per_partition = 1;
    +		break;
    +	default:
    +		return -EINVAL;
    +	}
    +

パーテーションごとの Master (Primary) となる XCC を判定する関数も追加されている。
それらの記述からは、MI200/GFX90A/Aldebaran の情報が出てきた頃 (2021/06/09) に取り上げた、GPU ダイ/チップレットに関する特許技術が思い出される。
その技術資料では、Master (Primary) が CPU からのコマンド、リクエストを受け取り、Slave (Secondary) となる GPU ダイ/チップレットに分散する機能に触れられていた。
もしかしたらそうした技術、機能が MI300/GFX940/GC 9.4.3 では導入されているのかもしれない。

    +
    +bool amdgpu_gfx_is_master_xcc(struct amdgpu_device *adev, int xcc_id)
    +{
    +	return !(xcc_id % (adev->gfx.num_xcc_per_xcp ?
    +			adev->gfx.num_xcc_per_xcp : 1));
    +}

MI200/GFX90A/Aldebaran は初のマルチダイ構成を採用した GPU となったが、プログラムから見るとパッケージ内の GCD 2基はそれぞれ独立しており、あくまでもソケット、パッケージ間より高速なインターコネクトで接続された GPU 2基とされていた。
MI300/GFX940/GC 9.4.3 に向けたパッチからは、MI200/GFX90A/Aldebaran から進んだ複数の GPU ダイ/チップレットの統合が実装されているように見える。
自分にはそう見えるというだけで、確実な情報は AMD 公式からの発表を待つしかないが。

    Gfx 9 starts to have multiple XCC instances in one device. Add instance
    parameter to kgd2kfd functions where XCC instance was hard coded as 0.
    Also, update code to pass the correct instance number when running
    on a multi-XCC setup.

AID

これもどういう略称、意味かは不明だが、AID という用語が登場している。
使われ方から VCN、マルチメディアエンジンを搭載したクラスタ、あるいはダイ/チップレットを指す用語と思われる。

    @@ -271,6 +272,8 @@ struct amdgpu_vcn {
    
     	struct ras_common_if    *ras_if;
     	struct amdgpu_vcn_ras   *ras;
    +
    +	uint8_t	num_inst_per_aid;
     };

F8_MODE

MI300/GFX940/GC 9.4.3 では F8_MODE と呼ばれるものに対応している。
これは LLVM へのパッチですでに公開されていた、独自の FP8/BF8 データフォーマットに対応した命令のためのモードと思われる。1

RadeonSI

RadeonSI ドライバーでは、CDNA 系アーキテクチャ はグラフィクス系の固定機能ユニットを持たず、MI200/GFX90A/Aldebaran からはイメージオブジェクト系を扱う命令が削除されているため、メディアエンジンのサポートが主となる。
それが今回はイメージオブジェクト系命令のエミュレートも実装されている。
マルチメディアエンジンに動画だけでなく、画像も処理させたいとなるとイメージオブジェクト系の命令がやはり必要と判断されたのかもしれない。