AMDGPU 指令語法

指令

語法

一般指令語法

一個指令具有以下語法

<opcode mnemonic>    <operand0>, <operand1>,...    <modifier0> <modifier1>...

運算元 通常以逗號分隔,而 修飾符 則以空格分隔。

運算元修飾符 的順序是固定的。大多數 修飾符 是可選的,可以省略。

VOPD 指令語法

VOPDXVOPDY 指令必須使用 :: 運算符串聯,以形成單個 VOPD 指令

<VOPDX instruction>  ::  <VOPDY instruction>

範例

v_dual_add_f32 v255, v255, v2 :: v_dual_fmaak_f32 v6, v2, v3, 1.0

請注意,VOPDXVOPDY 指令不能作為單獨的運算碼使用。

運算碼助記符

運算碼助記符描述了運算碼語義,並且可以按此順序包含一個或多個後綴

封裝後綴

大多數對封裝數據進行操作的指令都有 _pk 後綴。除非另有 說明,否則這些指令操作並產生由兩個值組成的封裝數據。值的類型由 類型後綴 指示。

例如,以下指令將兩對 f16 值相加,並產生一對 f16 值

v_pk_add_f16 v1, v2, v3     // Each operand has f16x2 type

類型和大小後綴

使用數據操作的指令具有隱含的數據運算元類型。此數據類型指定為指令助記符的後綴。

有些指令有 2 個類型後綴:第一個是目標運算元的數據類型,第二個是來源數據運算元的數據類型。

請注意,指令指定的數據類型不適用於其他類型的運算元,例如地址、偏移量等等。

下表列舉了最常用的類型後綴。

類型後綴

封裝指令?

數據類型

_b512, _b256, _b128, _b64, _b32, _b16, _b8

位元。

_u64, _u32, _u16, _u8

無號整數。

_i64, _i32, _i16, _i8

有號整數。

_f64, _f32, _f16

浮點數。

_b16, _u16, _i16, _f16

封裝 (b16x2, u16x2, 等等)。

沒有類型後綴的指令被假定為使用無類型數據進行操作。無類型數據的大小由大小後綴指定

大小後綴

隱含數據類型

以雙字 (dwords) 為單位的所需暫存器大小

-

b32

1

x2

b64

2

x3

b96

3

x4

b128

4

x8

b256

8

x16

b512

16

x

b32

1

xy

b64

2

xyz

b96

3

xyzw

b128

4

d16_x

b16

1

d16_xy

b16x2

GFX8.0 為 2,GFX8.1 和 GFX9+ 為 1

d16_xyz

b16x3

GFX8.0 為 3,GFX8.1 和 GFX9+ 為 2

d16_xyzw

b16x4

GFX8.0 為 4,GFX8.1 和 GFX9+ 為 2

d16_format_x

b16

1

d16_format_xy

b16x2

1

d16_format_xyz

b16x3

2

d16_format_xyzw

b16x4

2

警告

上述規則存在例外情況。類型與運算碼指定的類型不同的運算元在說明中會被 標記

具有不同來源和目標運算元類型的指令範例

s_bcnt0_i32_b64
v_cvt_f32_u32

具有單一數據類型的指令範例

v_max3_f32
v_max3_i16

使用封裝數據操作的指令範例

v_pk_add_u16
v_pk_add_i16
v_pk_add_f16

對 b128 數據進行操作的無類型指令範例

buffer_store_dwordx4
flat_load_dwordx4

編碼後綴

大多數 VOP1、VOP2 和 VOPC 指令都有多種變體:它們也可以使用 VOP3、DPP 和 SDWA 格式進行編碼。

組譯器會根據指令運算元和修飾符自動選擇最佳編碼,除非明確要求特定的編碼。要強制使用特定編碼,可以在指令的運算碼中添加後綴

編碼

編碼後綴

VOP1、VOP2 和 VOPC (32 位元) 編碼

_e32

VOP3 (64 位元) 編碼

_e64

DPP 編碼

_dpp

SDWA 編碼

_sdwa

VOP3 DPP 編碼

_e64_dpp

本參考文檔使用編碼後綴來指定隱含的編碼。當未指定後綴時,則假定為原生指令編碼。

運算元

語法

通用運算元的語法在本文件中描述。

有關運算元的詳細資訊,請參閱 GPU 相關文件中的運算元連結。

修飾符

語法

修飾符的語法在本文件中描述。

有關個別指令支援的修飾符資訊,可以在 GPU 相關文件中找到。