최근 수정 시각 : 2024-07-07 11:25:12

RDNA(ISA)


파일:관련 문서 아이콘.svg   관련 문서: RDNA
,
,
,
,
,


1. 개요2. 역사3. 레지스터4. 명령어 인코딩5. 명령어 구성
5.1. 정수 명령어5.2. 벡터 명령어
6. 기타7. 관련 문서

1. 개요

이 문서에서는 AMD RDNA GPU에서 사용되는 명령어 집합에 대해 다룬다.

2. 역사

RDNA의 명령어 집합은 GCN 명령어 집합을 기반으로 설계되었다.

3. 레지스터

RDNA 프로그램 상태는 다음과 같은 레지스터들로 구성된다.
  • 48-bit PC
  • 32-bit VGPR * 256 (V0-V255)
  • 32-bit SGPR * 106 (S0-S105) [1]
  • 64 kB Scratch RAM
  • 64-bit Mask
  • 64-bit Vector Condition Code
  • 1-bit Scalar Condition Code
    ...

4. 명령어 인코딩

RDNA 명령어는 32-bit/64-bit/96-bit 길이로 인코딩된다.

5. 명령어 구성

5.1. 정수 명령어

명령어 인코딩 Sets SCC? 동작
32비트 정수 연산 명령어
S_ADD_I32 SOP2 y D = S0 + S1, SCC = overflow.
S_ADD_U32 SOP2 y D = S0 + S1, SCC = carry out.
S_ADDC_U32 SOP2 y D = S0 + S1 + SCC = overflow.
S_SUB_I32 SOP2 y D = S0 - S1, SCC = overflow.
S_SUB_U32 SOP2 y D = S0 - S1, SCC = carry out.
S_SUBB_U32 SOP2 y D = S0 - S1 - SCC = carry out.
S_ABSDIFF_I32 SOP2 y D = abs (S0 - S1), SCC = result not zero.
S_MIN_I32
S_MIN_U32
SOP2 y D = (S0 < S1) ? S0 : S1. SCC = 1 if S0 was min.
S_MAX_I32
S_MAX_U32
SOP2 y D = (S0 > S1) ? S0 : S1. SCC = 1 if S0 was max.
S_MUL_I32 SOP2 n D = S0 * S1. Low 32 bits of result.
S_ADDK_I32 SOPK y D = D + simm16, SCC = overflow. Sign extended version of simm16.
S_MULK_I32 SOPK n D = D * simm16. Return low 32bits. Sign extended version of simm16.
S_ABS_I32 SOP1 y D.i = abs (S0.i). SCC=result not zero.
S_SEXT_I32_I8 SOP1 n D = { 24{S0[7]}, S0[7:0] }.
S_SEXT_I32_I16 SOP1 n D = { 16{S0[15]}, S0[15:0] }.
32비트 조건부 연산 명령어
S_CSELECT_{B32, B64} SOP2 n D = SCC ? S0 : S1.
S_CMOVK_I32 SOPK n if (SCC) D = signext(simm16).
S_CMOV_{B32,B64} SOP1 n if (SCC) D = S0, else NOP.
32비트 비교 연산 명령어
32비트 비트 연산 명령어
제어 레지스터 접근 명령어

5.2. 벡터 명령어

6. 기타

7. 관련 문서


[1] 2의 거듭제곱인 128이 아닌 106개인데, S106-S107은 Vector Condition Code의 상위 및 하위 비트를 저장하는 데 사용되며, 나머지 레지스터 번호는 16개의 Trap 처리용 SGPR, NULL 레지스터(=상수 0), 마스크 레지스터 등을 지정하는 데 할당된다.