b11516: hexagon: IM2COL 패치 임베드 DMA 링 오버플로우 수정 (#30189)
요약
IM2COL 패치 임베드 DMA 커널에서 링 버퍼 오버플로우로 인해 데이터 누출 문제가 발생했습니다. 이 문제는 IC*KH가 256을 초과할 때, 가득 찬 DMA 링에 데이터를 푸시하는 과정에서 일부 행이 기록되지 않아 오래된/잘못된 데이터가 출력되는 현상을 야기했습니다. 해결책은 블로킹 커널처럼 가장 오래된 디스크립터를 폐기하고 플러싱을 기다리는 방식으로 수정되었습니다.
핵심 포인트
- IM2COL DMA 링 오버플로우 수정으로 데이터 누출 방지
- IC*KH > 255일 때 발생하는 버퍼 오버플로우 문제 해결
- 가장 오래된 디스크립터 폐기 및 플러싱 대기 로직 적용
- hexagon: IM2COL 패치 임베드 DMA 링 오버플로우 수정
정확한 타일링(stride == kernel, no pad/dilation)의 IM2COL DMA 커널은 출력 행당 IC_KH DDR->VTCM 디스크립터를 반환 값을 확인하지 않고 dma_queue_push()를 호출하고, 이후 IC_KH번 팝합니다. 이 과정에서 스레드별 DMA 링은 256개의 엔트리를 보유하며, 가득 찬 링에 푸시가 발생하면 false를 반환하고 전송을 누락시키므로, IC*KH > 255인 경우 VTCM 스테이징 버퍼의 나머지 행들이 기록되지 않아 오래된 데이터(종종 NaN/inf)가 출력으로 유출되었습니다.
해결책은 동일 파일에 있는 블로킹 커널처럼 링이 가득 찼을 때 가장 오래된 디스크립터를 폐기하고 dma_queue_flush()를 기다리는 것입니다.
테스트를 위해 IC*KH > 256인 경우(2D 1x1, 2D 2x2 패치 임베드 및 1D, F16 및 F32 dst)의 정확한 타일링 테스트 케이스를 추가했으며, 이는 이 수정 없이는 HTP에서 실패합니다.
- @max-krasnyansky의 제안 적용
공동 작성자: Max Krasnyansky [email protected]
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기