hexagon: MUL_MAT 및 MUL_MAT_ID 재작업: 32x32 타일형 가중치 리팩 (repack), 커널 파라미터 (kernel-pa
요약
llama.cpp 프로젝트에서 Hexagon 아키텍처를 위한 MUL_MAT 및 MUL_MAT_ID 연산을 대폭 재작업했습니다. 32x32 타일형 가중치 리팩토링, HVX 레지스터 최적화, DMA 정렬 등을 통해 연산 효율성을 극대화했습니다.
핵심 포인트
- 32x32 타일형 가중치 리팩토링 및 새로운 레이아웃 도입
- HVX 레지스터 활용도 최적화를 위한 vec_dots 언롤링 적용
- DMA 정렬을 통한 가중치 역양자화(dequant) 성능 개선
- HMX 아키텍처 필수화에 따른 v73 미만 지원 제거
- 커널 파라미터 및 매트멀 퓨전 로직 최적화
hexagon: MUL_MAT 및 MUL_MAT_ID 재작업: 32x32 타일형 가중치 리팩 (repack), 커널 파라미터 (kernel-params), 캐시된 그래프 (cached graphs) (#24954)
-
hex-mm: 새로운 가중치 레이아웃 (weight layout) 및 퓨전 (fusion) 업데이트
-
hvx-mm: HVX 레지스터 활용도를 최적화하기 위해 새로운 타일형 vec_dots 언롤링 (unroll)
-
hex-mm: vec_dots의 오버헤드를 줄이기 위해 q8_0 및 q8_1에 대한 동적 양자화 (dyn.quant) 포맷 최적화
-
hvx-mm: 큰 행(rows)을 위한 블록당 병렬 양자화기 (parallel quantizer)
-
hvx-mm: 동적 양자화 (dyn.quant) 및 vec_dots 단순화 및 추가 최적화
-
hvx-mm: 타일당 중간 누산기 (intermediate per tile accumulators)를 fp16으로 유지
-
hmx-mm: 리팩된 타일 (repacked tiles)을 DMA와 정렬하여 가중치 역양자화 (weight dequant) 최적화
-
hmx-mm: qweight 스크래치 (scratch)를 제거하고 vtcm_weight만 사용
-
hmx-mm: 사용되지 않거나 구식인 모든 코드 제거
-
hmx-mm: 새로운 타일형 리팩 (tiled repack) 포맷 확정 -- 모든 x4x2를 _tiled로 이름 변경
-
hmx-mm: DMA 프리페치 (prefetch)를 통한 활성화 (activation) 처리 개선
-
hex-mm: hmx/hvx 폴백 (fallback) 로직 및 MUL_MAT_ID 할당 수정 (OLMoE 오류 수정)
-
hex-mm: hmx-mm에서 수행한 것과 같이 가중치 타일을 DMA와 정렬
-
hex-mm: 공통 mm 비트들을 htp/matmul-ops.h로 분리 (factor out)
-
hex-mm: mm 커널 선택을 호스트 (host)로 이동 시작
-
hex-mm: 모든 matmul 파라미터 계산을 호스트 (host)로 이동
-
hmx-mm: 파이프라인 모드 (pipelined mode) 복구
-
hmx-mm: 레지스터 사용을 최적화하기 위해 역양자화 (dequant) 함수 언롤링 (unroll)
-
hmx-mm: 활성화 (activation) 프로세스 추가 개선
-
hex-mm: 모든 vtcm 할당에 vtcm_seq_alloc을 사용하고 더 많은 공통 함수 정의
-
hex-mm: 활성화 스레드 (activation threads) 수를 고려하도록 mm 옵티마이저 (optimizer) 개선
-
hex-mm: matmul-id 커널 파라미터 선택 수정 (OLMoE 및 LFM 오류 수정)
-
hexagon: 대부분의 사용 사례에 HMX가 필수적이므로 v73 미만 아키텍처 지원 제거
-
hex-mm: 일관성을 위한 명명 규칙 정리 (cleanup)
-
hex-mm: matmul 퓨전 (fusion)이 vtcm 할당을 고려하도록 보장
-
hex-mm: kernel_params 정의에 대한 사소한 정리
-
hex-mm: 하드코딩된 제한 사항을 VTCM 요구 사항에 대한 적절한 검사로 교체
-
hex-mm: 폴백 (fallback) 옵션으로 타일링되지 않은 (non-tiled) MM 지원 추가 및 HVX 커널을 별도 헤더로 분리
-
hex-mm: 사용되지 않는 함수 제거
-
hex-mm: run-tool 스크립트에 MM_SELECT를 위한 약어 추가
-
hvx-mm: HVX/HMX 마이크로커널 (microkernels)을 분리하고 matmul 진입점 (entry) 및 디스패치 (dispatch) 통합
-
hex-mm: matmul 폴백 경로 추가 정리
-
hex-mm: matmul 진입점 및 디스패치 리팩토링 (refactor) 진행
-
hexagon: 모든 항목에 대해 HMX를 활성화하도록 CMake 빌드 업데이트
-
hex-ops: kernel_param 업데이트 최적화 및 로그에 요약 포함
-
hex-mm: GGML_HEXAGON_MM_SELECT 지원 추가
-
hex-mm: hex-common 헤더 추가
-
hex-mm: workpool에 정확한 작업 (tasks) 수 전달
-
hex-mm: 동적 양자화 (dyn.quant) 작업에서 작업 없음 (no-work)에 대한 적절한 검사 추가
-
hex-mm: 모든 양자화기 (quantizers)를 매크로 (macro)로 변환
-
hex-mm: 모든 MUL_MAT 테스트를 통과하도록 hvx-flat 폴백 수정
-
hex-mm: q8_1 양자화기 벡터화 (vectorize)
-
hex-mm: 퓨전된 (fused) FFN MM 스트라이드 (stride) 처리 개선
-
hex-mm: kernel_params에서 n_threads 및 파이프라인 (pipeline)의 일관된 사용
-
hexagon: 사소한 포맷팅 수정
-
hex-mm: host/NPU가 동기화되도록 MUL_MAT_ID kernel_param 처리 업데이트
-
hvx-mm: 타일링된 HVX 커널에서 FP32로 누적하는 방식으로 회귀 (더 정확하며 성능은 동일)
-
hvx-mm: 루프 언롤링 (unroll) 및 타일링된 누적 (accums)에 불필요한 마스킹 (masking) 제거
-
hmx-mm: 활성화 (activation) 처리 최적화 (루프 분할, 일부 언롤링 등)
-
hmx-mm: 출력 처리를 위한 사소한 최적화
-
hex-mm: MM 커널에서 uint32_t 및 size_t의 일관된 사용
-
hex-mm: 행 (rows)이 256의 배수여야 한다는 레거시 제한 사항 제거
-
hexagon: sprintf를 snprintf로 교체
-
hex-mm: 하드코딩된 nrows 검사를 완화하고 VTCM 크기 요구 사항에 의존
-
hexagon: 사소한 정렬 (alignment) 수정
-
hexagon: 마지막 공백 수정
-
hex-mm: 패딩 (padding)을 256에서 128로 완화 (잔여물)
-
hex-mm: 가중치 (weight)가 128에 정렬되는 것에 대한 중복 체크 제거
우리는 항상 가중치에 대해 2D DMA를 사용하며 이를 적절하게 정렬합니다.
-
hmx-mm: MUL_MAT_ID가 hvx 스레드와 hmx 트레이싱 (tracing) 사이에서 더 나은 작업 분배를 수행하도록 개선
-
hex-mm: 토큰별 (per-token) mmid 활성화 (activation) 처리 특수화
-
hex-profile: 로깅 (logging) 출력의 kernel-params 섹션을 처리하도록 파이썬 (python) 스크립트 업데이트
-
hex-mm: n_prefetch (일명 dma_depth)를 커널 파라미터 (kernel params)로 이동하고 사용되지 않는 필드 제거
-
hex-trace: 파싱하기 더 쉬운 형식을 사용하도록 단순화하고 후처리 (post-proc) 스크립트 수정
-
hmx-mm: 출력 처리를 위한 32행 제한을 완화하여 활용도 (utilization) 향상
-
hmx-mm: 트레이싱 (tracing) 정보를 위해 start-chunk idx 사용
-
hmx-mm: 활성화 (activation) DMA 파이프라인 (pipeline)의 파라미터화 (parameterize)
-
hexagon: kernel-params 재계산을 피하기 위해 간단한 그래프 캐싱 (graph caching) 지원 추가
-
hex-mm: 남겨진 repack 함수 제거
-
hex-mm: n_prefetch 어서트 (asserts) 강화
-
hex-mm: 중복된 round/align_up 헬퍼 (helper) 제거
-
hexagon: 호스트 (host)/NPU에서 사용되는 공통 헤더 (common header) 정리
-
hexagon: 조기 깨우기 (early wakeup) 임계값 (threshold) 업데이트
-
hmx-mm: 비용 상수 (cost constants)를 정의하고, repacked ne[1]이 32로 패딩 (padded)된다고 가정하도록 솔버 (solver) 업데이트
-
hmx-mm: precompute_matmul을 조금 더 읽기 쉽게 개선 (더 작은 함수로 분할 등)
-
hex-mm: n_threads 제약 제거
-
hex-mm: 사소한 포맷팅 (formatting) 업데이트
-
hex-mm: 오래된 프로파일링 (profiling) 로그 제거
-
hex-mm: 해당 텐서 (tensor)의 리패킹 (repacking)을 피하기 위해 lm-head를 거부하는 하드코드 게이트 (hardcode gate) 복구
macOS/iOS:
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI enabled) DISABLED
- macOS Intel (x64)
- iOS XCFramework
Linux:
- Ubuntu x64 (CPU)
- Ubuntu arm64 (CPU)
- Ubuntu s390x (CPU)
- Ubuntu x64 (Vulkan)
- Ubuntu arm64 (Vulkan)
- Ubuntu x64 (ROCm 7.2)
- Ubuntu x64 (OpenVINO)
- Ubuntu x64 (SYCL FP32)
- Ubuntu x64 (SYCL FP16)
Android:
Windows:
Windows:
- Windows x64 (CPU)
- Windows arm64 (CPU)
- Windows arm64 (OpenCL Adreno)
- Windows x64 (CUDA 12) - CUDA 12.4 DLLs
- Windows x64 (CUDA 13) - CUDA 13.3 DLLs
- Windows x64 (Vulkan)
- Windows x64 (OpenVINO)
- Windows x64 (SYCL)
- Windows x64 (HIP)**
openEuler:
- DISABLED
- openEuler x86 (310p)
- openEuler x86 (910b, ACL Graph)
- openEuler aarch64 (310p)
- openEuler aarch64 (910b, ACL Graph)**
UI:
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기