본문으로 건너뛰기

프로세서 백엔드

Modalix SoC에는 여러 프로세서가 있으며, 각 프로세서는 추론 파이프라인의 다른 부분에 적합합니다. Neat 프레임워크의 플래너는 각 단계가 수행하는 작업에 따라 하나의 프로세서(또는 프로세서 체인)를 선택합니다. 이 페이지에서는 각 백엔드와 일반적인 파이프라인에서 해당 백엔드가 나타나는 위치를 설명합니다.

A65 — 애플리케이션 코어

Linux를 실행하는 표준 ARM A65 코어입니다. 프레임워크의 메인 프로세스, 모든 애플리케이션 코드, 대부분의 비가속 GStreamer 요소가 여기에 실행됩니다.

사용 용도:

  • Graph / Run 이벤트 루프.
  • 파일/RTSP/네트워크 I/O.
  • 진단 탭 및 풀-사이드 애플리케이션 코드.
  • 가속된 단계 간의 경량 연결.

EV74 / CVU — 비전 컴퓨트 유닛

벡터 친화적인 DSP 스타일 프로세서입니다. 프레임워크는 이를 일부 위치에서는 EV74로, 다른 위치에서는 CVU(컴퓨트 비전 유닛)로 참조합니다. SIMD 형태이지만 MLA를 사용할 만큼 충분히 크지 않은 커널에 사용됩니다. 전처리(크기 조정, 색상 변환, 정규화), 테셀레이션/디테셀레이션/양자화/역양자화 경계 커널, 융합 전처리(제네릭 전처리), BoxDecode 후처리에 사용됩니다.

EV74 작업은 각 단계별 CVU 제출 스레드를 통해 분산됩니다. 커널 바이너리는 모델 아카이브(lib/)의 일부입니다.

MLA — 머신 러닝 가속기

Modalix MLA입니다. 컴파일된 모델 가중치와 그래프가 여기에 저장됩니다. MLA 제출 스레드를 통해 분산되며, 이 스레드는 EV74(또는 양자화 단계)에서 테셀레이션된 입력을 받아 다운스트림에서 디테셀레이션될 테셀레이션된 출력을 생성합니다.

MLA 작업에는 두 가지 유형이 있습니다.

  • MLA 추론 — 메인 모델 그래프.
  • MLA 사전 처리/융합 연산 — 계약 조건이 충족될 때 MLA에 컴파일되는 사전/사후 커널( 데이터 유형 계약의 "MLA 테셀레이션" 열).

MLASHM — MLA 공유 메모리

MLA가 가장 낮은 지연 시간으로 읽을 수 있는 특수 메모리 영역입니다. 가능한 경우 MLA 입력에 사용되는 버퍼는 MLASHM 세그먼트에서 할당됩니다. 플래너는 EV74 측의 전처리가 MLASHM에 직접 쓰도록 하여 MLA가 전송 없이 사용할 수 있도록 합니다.

APU — 오디오 처리 유닛

오디오 경로와 SIMD-on-스칼라 작업의 이점을 얻는 일부 전처리 단계에서 사용됩니다. 프레임워크의 오디오 노드(리샘플링, 코덱)는 APU를 대상으로 합니다.

TVM — TVM 컴파일 폴백

MLA 컴파일러가 생성할 수 없는 연산의 경우, 프레임워크는 TVM 컴파일된 CPU 커널로 대체할 수 있습니다. 라우트 계획에서 TVM 대상 단계로 표시됩니다. MLA 실행보다 느리지만 MLA 백엔드가 지원하지 않는 연산을 설명하는 MPK 계약이 있는 경우에도 적용을 보장합니다.

M4 — 코디네이터 코어

낮은 수준의 조정을 위한 작은 Cortex-M4입니다. A65와 가속기 간의 RPMsg, 감시자, 하드웨어 시퀀싱에 사용됩니다. 애플리케이션 코드는 M4에서 직접 실행되지 않습니다. 프레임워크는 OS 레이어를 통해 M4와 통신합니다.

플래너가 선택하는 방법

그래프가 빌드되면 라우트 플래너는 각 단계를 순회하며 다음을 수행합니다.

  1. 어떤 프로세서가 이 커널을 실행할 수 있습니까? — MLA 추론은 MLA로, 전처리 작업은 EV74로, I/O 작업은 A65로 이동합니다.
  2. 가장 저렴한 방법은 무엇입니까? — 데이터 전송을 최소화합니다(플래너는 피할 수 없는 경우에만 ConversionKind::Transfer를 삽입합니다).
  3. 인접한 스테이지가 세그먼트를 공유할 수 있습니까?메모리 모델이 가능한 범위를 결정합니다. 플래너는 이를 활용합니다.

결과는 각 스테이지가 대상 프로세서와 세그먼트 정책을 포함하는 RouteGraph입니다. Graph::describe()를 통해 확인할 수 있습니다.

추가 자료

  • "프로세서 백엔드" — 디자인 심층 분석의 §21 및 §22를 참조하십시오.
  • "CVU 커널 및 그래프 카탈로그" — CVU 커널를 참조하십시오.
  • "메모리 모델" — 메모리 모델을 참조하십시오.
  • Graph::describe() — 라우트 계획을 출력합니다.