커널 한 개, 맛 4가지 — 그리고 사이즈 reality check
Vector add 되면 operator만 바꾸면 sub, mul, div 공짜로 얻어. launch geometry, 메모리 layout, 검증 동일 — ALU op만 바뀜. 근데 비용은 항상 동일 아님:
| Op | 본문 변경 | 비고 |
|---|---|---|
| Add | C[i] = A[i] + B[i] | Baseline. |
| Sub | + → - | Add랑 같은 throughput — single FP unit. |
| Mul | + → * | FMA pipeline 사용, 같은 throughput. |
| Div | + → / | 5–10× 느림 — non-pipelined reciprocal 때문. NaN/inf 피하려면 B[i] == 0 가드. |
VRAM 용량 zone — 너무 많이 요청하면 무슨 일
| Zone | 일어나는 일 | 탈출구 |
|---|---|---|
| 🟢 Green: VRAM에 들어감 | 풀 속도, 데이터 GPU에 resident | 조치 불필요 |
| 🟡 Yellow: UVM paging | Unified Memory가 페이지 migrate — 10–50× 느려짐 | 청크로 처리 |
| 🔴 Red: 하드 alloc 실패 | cudaMalloc이 cudaErrorMemoryAllocation return | Slice-and-stream loop |
| 🟣 Crimson: grid 한계 | gridDim.x가 2³¹⁻¹ 초과 | Outer host loop, base-index arg |
Apple Silicon은 zone 자체가 옮겨감: 분리 VRAM 없으니까 'Green'이 OS랑 다른 앱이 잡고 있는 거 빼고 unified pool 전체로 확장. Yellow zone (swap에 paging)은 여전히 존재하는데 훨씬 늦게 발동.