
NVIDIA SASS 명령어 사전의 리버스 엔지니어링, GPU 아키텍처 전반에 걸친 커널 감사 및 패턴 인식.
제어된 커널부터 프로덕션 감사까지 NVIDIA SASS를 리버스 엔지니어링합니다.
기사 1 · 기사 2 · 지식 기반 · 패턴 라이브러리 · SM120 명령어 용어집 · 인코딩 노트 · 여기서 시작 · 프로젝트 구조 · 텐서 코어 챕터 · 기여하기
SASS King은 NVIDIA SASS(컴파일된 CUDA 바이너리 내에서 방출되는 네이티브 GPU 명령어 집합)에 대한 체계적인 리버스 엔지니어링 프로젝트입니다. 이 프로젝트는 SM120 / SM120a 소비자 Blackwell 하드웨어에서 시작하여 시간이 지남에 따라 완전한 크로스 아키텍처 ISA 및 패턴 라이브러리로 확장됩니다.
목표는 실용적입니다: 커널 엔지니어가 SASS 덤프를 열고, 컴파일러 패턴을 인식하고, 성능 관련 구조를 식별하고, 바이너리를 다시 소스 수준 최적화 결정에 연결할 수 있도록 돕습니다.
프로젝트는 초기 Phase 3 패턴 라이브러리를 완료했습니다: 29개의 재사용 가능한 SASS 시그니처가 patterns/ 아래에 공식화되었으며, knowledge/FINDINGS.md는 전체 증거 추적으로 유지됩니다. 다음 주요 단계는 Phase 4: 이러한 패턴을 실제 프로덕션 커널에 적용하는 것입니다.
| 원하는 경우... | 여기서 시작 | 그런 다음 읽기 |
|---|---|---|
| 프로젝트를 10분 안에 이해하려면 | docs/README.md | docs/START_HERE.md, 그 다음 docs/PROJECT_STRUCTURE.md |
| 증거를 재현하려면 | corpus/README.md | 하나의 챕터 conclusion*.md, 그 다음 해당 .sass 덤프 |
| 진리의 원천을 찾으려면 | knowledge/FINDINGS.md | knowledge/SASS_INSTRUCTIONS_SM120.md, knowledge/encoding/README.md |
| 새 덤프에서 패턴을 인식하려면 | patterns/README.md | 일치하는 patterns/NN-*.md 페이지 |
| 프로덕션 감사를 시작하려면 | production/README.md | 일치하는 PATTERN-NN 페이지 및 소스 증거 |
| 수정 사항이나 덤프를 기여하려면 | CONTRIBUTING.md | docs/START_HERE.md |
저장소는 증거 파이프라인으로 구성됩니다:
corpus/ 제어된 커널 및 원시 SASS 증거
knowledge/ 프로젝트 전체 결과, 명령어 노트 및 인코딩 노트
patterns/ 재사용 가능한 Phase 3 감사 시그니처
production/ Phase 4 실제 커널 감사
비슷한 정신의 마지막 광범위한 공개 SASS 리버스 엔지니어링 작업은 2018년 Volta 및 Turing에 대한 Jia 등의 연구였습니다. Ampere, Hopper 및 Blackwell은 명령어 구성을 상당히 변경했습니다: 비동기 복사 경로, 텐서 코어 제품군, 행렬 로드/저장 명령어, 희소 및 스케일링된 MMA 형식, 새로운 균일 레지스터 흐름.
SASS King은 제어된 마이크로 커널, 원시 SASS 읽기, 런타임 프로브 및 프로덕션 커널 감사를 결합하여 이 격차를 메웁니다.
| 영역 | 상태 | 위치 |
|---|---|---|
| SM120 교육 커널 | 커널 01-12까지 완료 | corpus/basics/01_vector_add/ ~ corpus/math_and_spills/12_register_spill/ |
| 텐서 코어 연구 | 커널 25까지 완료 | corpus/tensor_cores/ |
| 전체 결과 | 활성 진리의 원천 | knowledge/FINDINGS.md |
| SM120 명령어 용어집 | 활성, 증거 기반 | knowledge/SASS_INSTRUCTIONS_SM120.md |
| 인코딩 시험 | LDSM, STSM, QMMA로 시작 | knowledge/encoding/ |
| denvdis 교차 검증 | 초기 패스 완료, 더 깊은 제어 코드 격차 남음 | knowledge/DENVDIS_INTEGRATION.md |
| 패턴 라이브러리 | 초기 Phase 3 라이브러리 완료 | patterns/ |
| 프로덕션 감사 | 다음 단계 | production/ |
공식 패턴 라이브러리는 Phase 3의 주요 결과물입니다. 챕터별 증거를 재사용 가능한 감사 시그니처로 변환하여, 감사 시 전체 연구 추적을 매번 다시 작성하는 대신 명명된 패턴을 인용할 수 있습니다.
Phase 3은 다음 이유로 완료된 것으로 간주됩니다:
knowledge/FINDINGS.md의 소스 증거에 범위가 지정됩니다.patterns/README.md에서 시작됩니다.| 패턴 제품군 | 예시 | 위치 |
|---|---|---|
| 텐서 코어 컴퓨트 | HMMA, QMMA, OMMA 누산기 체인; 희소 메타데이터; 좁은 프래그먼트 | patterns/02-* ~ patterns/04-*, patterns/10-*, patterns/21-* |
| 행렬 메모리 및 에필로그 | LDSM, STSM, 비동기 복사 파이프라인, REDG 리덕션 에필로그 | patterns/05-*, patterns/06-*, patterns/07-*, patterns/28-* |
| 제어 흐름 | 분기/재수렴, 루프 백에지, 조건부 종료, 콜드 트랩, 로컬 CALL | patterns/08-*, patterns/14-*, patterns/16-*, patterns/26-*, patterns/29-* |
| 메모리 및 레지스터 | 벡터화된 글로벌 메모리, 스필, 공유 메모리 스테이징, 디스크립터, 균일 레지스터 흐름 | patterns/09-*, patterns/11-*, patterns/17-*, patterns/19-*, patterns/20-* |
| 산술 및 스케줄링 | FFMA 융합, 상수, MUFU 느린 경로, 스코어보드, 생애주기 재활용 | patterns/12-*, patterns/18-*, patterns/22-*, patterns/23-*, patterns/24-* |
| 워프 컬렉티브 | 워프 리덕션, shuffle/vote/match/sync 프리미티브 | patterns/01-*, patterns/25-* |
각 패턴 페이지에는 다음이 포함됩니다:
감사 지향 색인으로 patterns/README.md를 사용하세요. 패턴 뒤에 있는 더 긴 연구 맥락이 필요하면 knowledge/FINDINGS.md를 사용하세요.
Phase 3은 모든 NVIDIA SASS 동작이 디코딩되었다고 주장하지 않습니다. 수동 프로덕션 감사를 시작하기에 충분한 재사용 가능한 SM120 / SM120a 패턴 레이어를 설정합니다. 런타임 레이아웃 디코드, 전체 제어 코드 비트 배치, 자동화된 cubin 보고 및 크로스 아키텍처 재생은 향후 작업으로 남습니다.
공개 글:
제어된 변형. 두 커널은 정확히 하나의 변수만 다릅니다: dtype, 피연산자 순서, 언롤 팩터, 메모리 레이아웃 또는 컴파일 대상. SASS diff는 컴파일러 결정을 분리합니다.
엄격한 주장 태그. 모든 기술적 주장은 태그를 사용합니다:
| 태그 | 의미 |
|---|---|
[OBS] | 덤프, 로그, 런타임 출력 또는 프로필에서 직접 관찰됨. |
[INF] | 관찰된 증거에서 추론됨. |
[HYP] | 그럴듯하지만 확인되지 않음. |
[RES] | 이후 증거로 해결된 이전 가설. |
[GAP] | 명시적으로 문서화된 열린 질문. |
상향식과 하향식을 함께. 마이크로 커널은 개별 명령어와 컴파일러 결정을 분리합니다. 프로덕션 유사 커널은 실제 코드에서 어떤 패턴이 중요한지 보여줍니다.
패턴 우선 감사. 프로덕션 감사는 가시적인 SASS 시그니처와 일치하고 신뢰 한계, 안티 패턴 및 열린 격차를 이어받은 후에만 공식 PATTERN-NN 페이지를 인용해야 합니다.
첫 번째 패스는 SM120 텐서 코어 및 메모리 파이프라인에 초점을 맞춥니다:
HMMA, QMMA, OMMALDSM, STSMLDGSTS, LDGDEPBAR, DEPBARLDG, STG, LDS, STS, REDGBRA, EXIT, BSSY, BSYNC, WARPSYNCSHFL, VOTE, REDUXS2UR, R2UR, UMOV, ULEA, LDCU프로젝트는 ISA가 아직 완전하지 않다고 주장하지 않습니다. 공개 용어집은 관찰되고 설명된 내용을 추적합니다. knowledge/encoding/ 아래의 더 깊은 페이지는 매처 스타일 문서화에 충분한 증거가 있는 제품군을 추적합니다.
SASS King은 비트 수준 SASS 디스어셈블러와 경쟁하지 않습니다. 프로젝트는 로컬 덤프를 기본 증거로 사용하며 명령어 필드, 스케줄링 테이블, 조건자 및 레지스터 추적에 대한 교차 확인을 위해 redplait/denvdis를 사용할 수 있습니다. denvdis는 저수준 인코딩 해석을 검증할 수 있습니다. SASS King은 제어 변형 증거, 의미 패턴 레이어 및 프로덕션 감사 해석을 소유합니다.