fmaf() 란?
float fmaf(float x, float y, float z);
- 계산
- x * y + z
- 하지만 중간 결과를 반올림하지 않고 곱 - 더하기를 한 번에 처리해서 단일 FMA 하드웨어 명령으로 수행
- x * y 따로 하고 그 결과를 다시 z 에 더하는 것과 다르다
GPU 에서는?
- CUDA 에서 fmaf() 는 거의 100% FFMA 명령으로 매핑
CUDA 가 자동으로 FMA 를 쓰는데, fmaf() 를 써야하는 이유
GPU 컴파일러는 보통 자동 FMA 변환을 한다.
그렇지 않는 경우도 존재
- 복잡한 표현식
- 메모리 load/store 섞인 경우
- optimization level 낮을 때
- alias 가능성 있을 때
- IEEE strict 모드 컴파일 시
이럴 때는 강제로 FMA 를 만들고 싶을 때 fmaf() 를 씀
cuBLAS 류 마이크로커널에서 fmaf() 의 명시적 사용
마이크로커널 수준에서는
- 명령어 스케줄러가 정확히 FFMA 줄기를 만들도록 강제
- dependency chain 을 최소화하도록 레이아웃을 짠다
'GPU-KERNEL' 카테고리의 다른 글
| Tensor Cores & MMA Pipeline (0) | 2025.11.27 |
|---|---|
| ncu 리포트 (.ncu-rep) 생성 & 활용 매뉴얼 (0) | 2025.11.25 |
| Micro_gemm_4x4 - cuBLAS micro GEMM skeleton (0) | 2025.11.25 |
| Micro Kernel 입문하기 - 레지스터 기반 1 스레드용 소형 GEMM 엔진 구현 (0) | 2025.11.24 |
| 마이크로 커널 micro-kernel ( 레지스터 단계의 가장 내부 루프의 전문적 설계 영역 ) - 이런 계층 구조도 존재했구나... (0) | 2025.11.24 |