1) 커널 ABI·런타임 컨트랙트 확정 (반나절~1일)
- 인자 규약: (ptr, shape, strides, dtype, device, stream, workspace_ptr, workspace_bytes) 고정. Host에서 packed args buffer로 직렬화 → 런타임이 디바이스로 전달.
- 런치 파라미터: grid, block, smem_bytes, stream을 계산하는 LaunchConfigFn을 커널 옆에 둠.
- 에러/동기화 규약: 커널은 에러코드를 쓰지 말고 런타임이 cudaGetLastError()/hipGetLastError() or CPU 예외를 수집. SyncPolicy = {NoSync, EventRecord, FullSync}.
- 메모리 모델: 기본은 row-major contiguous + strides 허용. Alias 금지/허용 플래그, inplace 가능 여부를 op schema에 명시.
- 정확도/결정성: Deterministic=True|False, MathMode=FP32|TF32|FP16|BF16|Mixed.
2) “수직 슬라이스” 커널 3종 (하루~이틀)
최소 end-to-end를 위해 아래 3개만 먼저 진짜로 동작시키자.
- elementwise: y = sin(a*x + b) (브로드캐스트/스트라이드 지원)
- reduction: sum(x, axis=-1) (warp reduce → block reduce → grid stride loop)
- matmul: MxK·KxN (CPU ref + GPU naive tile 16x16; 나중에 WMMA/TF32로 고도화)
각 커널에 공통으로:
- InferShapeFn, InferDTypeFn, CheckLayoutFn, LaunchConfigFn, KernelBody.
- 호스트 사이드 ArgPack 빌더(Python→C++ 바인딩에서 텐서들을 pack).
3) 테스트·검증 인프라 (병행, 바로 착수)
- 골든 레퍼런스: NumPy/CPU reference로 bitwise/ulp 비교.
- 프로퍼티 테스트: 무작위 shape/stride/offset(=non-contig)로 stress.
- 오류 주입: 잘못된 dtype, shape mismatch, 오버랩 버퍼, 0-size dim.
- 성능 스모크: microbench(10–100ms 규모)로 TPUT/GOP/s, SM util, 메모리 bandwidth 추정.
- 프로파일 훅: with profiler(): 구간에서 host/op/kernel 타임라인+launch cfg 기록.
4) 런타임 필수 기능 (필요 최소한)
- Allocator: device/host/pinned 분리, 재사용 캐시, alignment 256B+.
- Stream/이벤트: 기본 stream + 임의 stream 지원, 이벤트로 의존성 모델링.
- 워크스페이스 매니저: op가 요구하는 workspace_bytes(op, shape) 쿼리 → 일시 대여.
- JIT 캐시 키: (op, dtype, layout, tile, sm_arch)로 커널 바이너리/파라미터 캐시.
5) 그래프 레벨 1차 패스
- 형상/타입 추론(Shape/DType): Python 레벨에서 eager 검증, 런타임에 assert 제거.
- 상수 폴딩·CSE: Python 트레이스 시 간단 적용.
- Elementwise Fusion v1: 연속된 EW 체인을 단일 커널로 합치기(메모리 왕복 절감).
- 레드유스 프리패스: reduce 앞뒤 불필요한 reshape/squeeze 정리.
6) matmul 고도화 로드맵 (차주)
- 타일 파라미터 튜너: (BM, BN, BK, num_warps, smem) grid search(짧은 샘플로).
- 데이터 레이아웃: A/B 패널 스왑, swizzled shared memory로 bank conflict 완화.
- Mixed Precision: Acc FP32 + input FP16/BF16/TF32 선택, 결정성 토글.
- 배치/스트라이드 matmul + GEMV fastpath.
7) 체크리스트 (각 단계의 완료 정의)
- ✅ ABI: Docstring/헤더 주석에 인자·동기화 규약 명문화, 샘플 커널 1개 연결.
- ✅ EW 커널: 브로드캐스트/스트라이드/비연속 텐서 OK, ULP<2 기준 통과.
- ✅ Reduction 커널: 任의 축, 0-size, 큰 텐서에서도 deadlock/NaN 없음.
- ✅ Matmul v0: ref 대비 max-abs<1e-3(FP32)·성능 CPU 대비 >1.5×.
- ✅ 테스트팩: 100+ 랜덤 케이스, CI에서 GPU 미탑재 시 CPU ref만.
- ✅ 프로파일러: op 이름, grid/block, ms, bytes moved, flop 계산 로그.
'dev_AI_framework' 카테고리의 다른 글
| graph_executor 와 compiler 의 관계 (0) | 2025.09.02 |
|---|---|
| 커널 ABI, 런타임 컨트랙트에 대해 (0) | 2025.09.02 |
| "CUDA" + "C++" + "pybind11" 모듈의 빌드 방법 및 과정, 체크리스트 확인 (0) | 2025.09.01 |
| AI 컴파일러의 구현 - graph_executor_v2 를 통해 (0) | 2025.09.01 |
| operator mapping 전략 짜기 - string or int ?? 메모리 효율, 빠른 비교를 위해 int 위주 매핑 전략 사용하기 (0) | 2025.09.01 |