hexagon: L2 캐시 처리 재작업 (지연 플러싱을 이용한 dirty bit 추적) 및 추가적인 MUL_MAT 업데이트 ([#25762](h
요약
llama.cpp의 Hexagon 가속기 지원을 위한 L2 캐시 처리 로직 재설계 및 성능 최적화 업데이트입니다. 지연 플러싱과 dirty bit 추적을 통해 캐시 효율을 높이고, MUL_MAT 커널 및 워크 큐 API를 개선했습니다.
핵심 포인트
- L2 캐시의 dirty bit 추적 및 지연 플러싱 도입으로 캐시 효율 최적화
- hmx-mm 모듈의 타일형 활성화 처리 지원 및 MUL_MAT 커널 견고성 개선
- 워크 큐(work-queue) API 재설계 및 레거시 API 정리
- DMA 큐 지원 및 텐서 에일리어스 처리 로직 단순화
hexagon: L2 캐시 처리 재작업 (지연 플러싱을 이용한 dirty bit 추적) 및 추가적인 MUL_MAT 업데이트 (#25762)
-
hex-mm: act-prep 스레드 수를 제한하던 솔버(solver) 내의 인위적인 제한 수정
-
hex-mm: 경고(warning) 수정
-
hex-prof: 타임라인 리포트(timeline report)에 --top 적용 제외
-
hmx-mm: hvx 작업을 더 잘 분산시키기 위해 타일형 활성화 처리(tiled act-processing) 지원 추가
-
hex-l2: l2flush 이벤트에 대한 트레이싱(tracing) 추가
-
workqueue: hmx-queue 및 dma-queue와 일치하도록 레거시 워크풀(workpool) API 재설계
-
hmx-mm: nhvx=5,6,7에 대한 f32 활성화 버퍼 정렬(alignment) 수정
-
hex-work: 워크 큐(work-queue) API를 위한 소규모 정리
-
hex-work: 워크 큐(work-queue) API의 추가 정리
-
hex-l2: opbatch 레벨에서 l2flushes 최적화
-
hex-work: 사용되지 않는 마스크(mask) 제거
-
hex-work: 워크 큐(work-queue)에서 hvx ctx를 해제할 필요 없음
-
hex-work: 명시적인 wakeup/suspend를 추가하고 스레드가 스핀(spin)하도록 설정
-
hex-bufs: 가중치(weight)가 아닌 모든 텐서를 compute로 표시
-
hex-dma: alias 큐 및 캐시된 dma에 대한 dma-queue 지원
-
hex-l2: 텐서 에일리어스(tensor aliases)를 추적하고 가능한 한 플러시(flushes)를 지연하거나 건너뜀
-
hex-l2: 텐서 에일리어스 처리 단순화
-
hex-l2: 중첩된 뷰(overlapping views)를 에일리어스의 순환 리스트(circular list)로 처리
-
hex-tens: 플래그(flags) 헬퍼 추가
-
hex-l2: 텐서를 clean/dirty로 표시하기 위한 헬퍼 추가
-
hex-l2: binary 및 rope 출력을 l2-clean으로 표시하고 나머지는 현재 상태를 유지
-
hex-l2: 모든 텐서 중첩 시나리오를 처리하기 위한 적절한 지원
-
hex-trace: matmul 초기화 코드에 인스트루멘테이션(instrument)을 적용하고 trace 체크 정리
-
hex-thread: 명시적인 스택과 우선순위를 가진 전용 메인 스레드 도입
-
hex-l2: dirty 상태를 비트맵(bitmap)으로 추적하고 스레드 기반 플러시(threaded flush) 도입
-
hex-trace: ctx != null에 대한 중복 체크 제거
-
hex-l2: 전체 컨텍스트(context)를 하나의 버퍼로 할당하고 대규모 플러시(big flushes) 후에 l2fetch 수행
-
hex-l2: 현재 binary 및 rope에서 tensor clearing을 비활성화하는 것이 fusion (융합) 문제를 일으키는 것으로 보임
-
hmx-mm: act proc가 fastdivs를 사용하도록 업데이트하고 DMA overflow (오버플로) 수정
-
hmx-mm: MUL_MAT_ID 커널이 multi-chunk (멀티 청크) 케이스(start_row>0)에서도 견고하게 작동하도록 개선
-
hex-queue: 오래된 queue (큐) 인터페이스를 제거하고 op-batch (연산 배치) 종료 시 hmx-queue를 flush (플러시)
-
hex-queue: 작은 op-batch의 경우 early wakeup (조기 깨우기)을 사용하지 않음
-
hex-tensors: op-batch 및 dirty_map에서 max_tensors의 상한을 적절히 제한
-
hex-l2: threaded l2flush (스레드 기반 l2 플러시)가 적절한 rounding (반올림)을 수행하는지 확인
-
hex-l2: 재사용을 위해 htp_tensor_flush를 별도 추출 (필요한 경우)
-
hex-l2: flush-all을 병합하여 tensor flushes (텐서 플러시) 최적화
-
hex-l2: multi-threaded (멀티 스레드) flush 최적화
-
hex-drv: 버전 확인 로직의 미래 대응 (futureproof)
-
hexagon: Windows에서의 오류 및 경고 수정
-
hex-main: 메인 스레드가 dspqueue_read만 사용하도록 업데이트, 일부 플랫폼에서는 dspqueue_peek을 사용할 수 없음
-
hex-main: 콜백을 사용하는 dspqueue용 fallback (폴백) 모드 추가
-
hex-main: 전체 연산 처리를 위해 dspqueue 콜백을 사용하는 fallback 모드 도입
-
hex-main: 조기 깨우기(early wakeup) 제거, 도움이 되지 않으며 특정 배치 크기에서 일부 오류를 일으키는 것으로 보임
-
hex-l2: flushall의 invalidate (무효화) 버전을 사용하도록 보장
-
hex-l2: op-batch 시작 시 조기 l2flush를 추적(trace)하려고 시도하지 않음
-
hex-main: 어차피 0이어야 하는 offset_ctx 제거
-
hex-hmx: hmx_queue_depth가 idx_write - idx_read를 사용하도록 수정
-
hex-hmx: idx_read/write에 atomic_load (원자적 로드) 사용
-
hex-main: n_threads가 정렬(aligned)되었는지 확인하기 위해 static assert (정적 단언) 추가
Website:
macOS/iOS:
Website:
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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기