Apple Neural Engine
arXiv:2606.22283v1 · cs.AR · 2026.06.21 · A11–A18 · M1–M5

Apple
Neural Engine 아키텍처, 프로그래밍, 성능 — 리버스 엔지니어링 레퍼런스

Apple Neural Engine(ANE)은 A11급 iPhone·iPad 칩과 M1급 Mac 칩 이래 모든 Apple SoC에 탑재된 고정 기능 행렬 가속기로, 애플리케이션에는 오직 Core ML 모델 프레임워크를 통해서만 노출된다. 이 문서는 Apple 실리콘에서의 직접 측정비공개 런타임·컴파일러·커널 드라이버·펌웨어의 정적 분석이라는 두 증거를 교차 검증해, 실리콘 데이터패스부터 시스템 인터페이스까지 전체 스택을 리버스 엔지니어링으로 기록한다.

Spencer H. Bryngelson · Georgia Institute of Technology, School of CSE
ORCID 0000-0003-1750-7265 · CC BY 4.0 · 오픈소스 런타임 ANEForge
상태. 직접 경로는 평범한 사용자 공간에서 호출 가능하지만 문서화되지 않았고, 비지원이며, OS 업데이트마다 깨지기 쉽다. 측정·연구·온디바이스 작업을 위한 것이지 출시 소프트웨어용이 아니다 — 출시 경로는 여전히 Core ML이다. Apple·Apple silicon·Core ML·ANE는 Apple Inc.의 상표이며, 본 문서는 Apple과 무관한 독립 레퍼런스다.
APPLE SILICON · ONE CHIP CPU 코어 + 행렬 유닛 분기·제어 흐름 GPU 대역폭 바운드 디코드 대형 matmul · 장문 어텐션 Apple Neural Engine fp16 MAC 배열 · 와이드 누산기 M1: 4코어 · M5: 16코어 통합 DRAM · 공유 대역폭
~12 TFLOP/s
M1 fp16 컴퓨트 천장 (오버헤드 분리 기울기)
3.8×
256채널 3×3 컨볼루션에서 GPU 대비 속도
9×
같은 컨볼루션에서 GPU 대비 에너지 효율
2.5B+
ANE를 포함한 활성 Apple 기기 (2026 초)
측정 (measured) — Apple 실리콘에서 직접 관측, 주로 M1·M5 디컴파일 유래 (decompile-derived) — 분해된 스택에서 판독 예측 (predicted) — 모델·칩별 표에서 추론, 실리콘 미확인

ANE는 현존하는 가장 널리 배포된 ML 가속기 중 하나이면서 가장 문서화되지 않은 가속기다. 공개 명령어 집합도, 드라이버 인터페이스도, 계산이 그 위에서 실행됐는지 프로그램이 확인할 방법조차 없다. 애플리케이션은 오직 Core ML을 통해, 배치 힌트 뒤의 한 옵션으로만 간접 도달한다.

이 문서는 두 증거 — Apple 실리콘에서의 직접 측정과 비공개 런타임·컴파일러·커널 드라이버·펌웨어의 정적 디컴파일 — 로 엔진을 실리콘 데이터패스부터 시스템 인터페이스까지 기록한다. 엔진은 Core ML 아래에서, 권한 없는 평범한 프로세스로부터 직접 도달 가능하다. 이 직접 경로가 나머지 전부를 측정 가능하게 만든다. 모든 실질 주장에는 측정·디컴파일·예측 중 하나의 증거 표기가 붙는다.

성능은 루프라인에서 시작한다

M1에서 엔진은 약 12 fp16 TFLOP/s의 컴퓨트를 DRAM 대역폭 천장에 맞세운다. 루프라인의 능선점(ridge point)은 바이트당 약 141 FLOP 근처, 작업 집합 임계는 2 MB, 단일 디스패치당 바닥 지연은 0.23 ms, 컴퓨트 최적점의 효율은 FLOP당 약 0.37 피코줄이다. 256채널 3×3 컨볼루션에서는 같은 칩의 GPU보다 약 3.8배 빠르고 9배 더 에너지 효율적이다.

엔진에 도달하는 것과 임의 그래프를 그 위에서 돌리는 것은 다르다. 엔진이 실행하는 연산은 능력 비트가 광고하는 연산과 구별된다. 하드웨어 표에 명시되거나 컴파일러 프런트엔드가 받아들인 기능이라도 컴파일-실행이 확인해야 비로소 한 번 인정되며, 3차원 컨볼루션을 포함한 여러 광고된 연산은 끝내 엔진으로 내려가지 않는다. 직접 경로에서 가중치 압축은 저장 크기뿐 아니라 대역폭을 줄인다. 권한 없는 엔진에서 int4 룩업테이블 가중치는 fp16보다 약 2.37배 빠르게, 구조적 희소성은 0.43배 바이트로 1.55~1.64배 빠르게 실행된다.

이 문서를 읽는 법

두 절반을 독립적으로 읽을 수 있다. 앞 절반(Part I–V)은 엔진을 사용하는 법 — 하드웨어가 무엇인지, 어떻게 도달하는지, 어떻게 동작하는지, 실제 워크로드를 어떻게 맞추는지 — 를 다룬다. 뒤 절반(Part VI–IX)은 그 표면 아래의 아키텍처와 시스템 내부 — 펌웨어와 명령 프로토콜까지 — 를 다룬다. 직접 경로는 오픈소스 ANEForge 런타임으로 공개되며, 이 문서가 그에 동반한다.

PART IThe Machine · 기계

엔진이 무엇인가What the ANE is · Execution · Numerics · Capability

CH 1
엔진이 무엇인가

Core ML 아래에서 직접 도달 가능한, 와이드 누산기를 갖춘 고정 기능 fp16 행렬 가속기. 컴퓨트 바운드 비전·컨볼루션에서 GPU보다 빠르고, GPU는 대역폭 바운드 디코드에서만 앞선다.

CH 2
실행 모델

네트워크를 한 번 프로그램 포맷으로 컴파일하고 그 하나의 프로그램에 대해 여러 번 디스패치하는 자율 코프로세서. 제어 흐름은 컴파일 시점에 고정되며 런타임 값에 의존할 수 없다.

CH 3
수치

데이터패스는 종단간 fp16에 fp32급 와이드 누산기. 컨볼루션·matmul·정규화는 정밀도를 유지하나, 트랜스포머 다운 프로젝션 같은 상쇄 위주 단계는 엔진 밖 와이드 앵커가 필요하다.

CH 4
능력 표면

컨볼루션·matmul·융합 어텐션·정규화·활성화·데이터 이동은 M1부터 네이티브. reduce_prod·scatter·순환 셀은 어떤 패밀리에도 경로가 없다. 능력 비트는 도달 가능성을 증명하지 않는다.

CH 1도달 가능한 표면 — Core ML과 직접 경로

공개 경로는 Core ML이며, 그 computeUnits 필드는 보장이 아니라 배치 힌트다. 비용 기반 배치 플래너가 모델을 CPU·GPU·ANE에 걸쳐 분할하며, 호출자는 어느 기기가 어느 세그먼트를 실행했는지 알 수 없다.

Listing 1.1 · Core ML load-and-predict — computeUnits는 보장이 아닌 힌트
// 공개 경로: 엔진을 요청해도 Core ML이 작업을 배치한다
let config = MLModelConfiguration()
config.computeUnits = .cpuAndNeuralEngine  // 보장 아닌 힌트
let model = try MLModel(contentsOf: url, configuration: config)
let out = try model.prediction(from: input)  // 플래너가 CPU·GPU·ANE로 분할
// 호출자는 어느 기기가 각 세그먼트를 실행했는지 듣지 못한다

직접 경로는 Core ML 없이 엔진에 도달한다. Apple 자체 디스패처가 쓰는 동일한 비공개 Espresso 런타임이 평범한 사용자 공간에서 호출 가능하다 측정. 네트워크를 엔진의 프로그램 포맷으로 컴파일하고, 로드하고, 실행 스트림을 구동하며, 경로에 배치 플래너가 없고 컴파일러가 받아들이는 연산에 특별 권한이 필요 없다. 이 경로가 엔진을 스케줄링 힌트가 아니라 개발자가 의도적으로 지정할 수 있는 타깃으로 만든다.

CH 2실행 모델 — 한 번 컴파일, 여러 번 디스패치

엔진은 자율 코프로세서로 동작한다. 컴파일 단계는 비싸므로 핫 루프 밖에 두고, 디스패치 단계는 피연산자를 바인딩하고 메일박스 명령 하나를 게시한 뒤 대기한다 측정. 컴파일된 프로그램은 하드웨어가 순회하는 정적 그래프여서 제어 흐름이 컴파일 시점에 고정된다. 버퍼는 디스패치 간에 상주할 수 있어, 키-값 캐시나 옵티마이저 상태가 호스트 왕복 없이 제자리에 유지된다.

CH 3수치 — 종단간 fp16과 와이드 누산기

데이터패스는 종단간 fp16이며 fp32급 와이드 누산기를 두어 표현 가능한 합이 거의 정확하게 돌아온다 측정. fp16 천장은 65504이고, 0이 아닌 시작 오프셋을 가진 폭 축 슬라이스는 고정 게인 16을 적용하므로, M1과 A14에서 4094를 넘는 채움은 조용히 무한대로 오버플로한다. 활성화 룩업테이블은 ULP 절반 수준으로 정확하나 NaN을 클램프 값으로 강제하고 작은 원점 편향을 가진다.

표 3.3. fp16 수치 상수 (M1/H13 측정, A14/H14에서 포화 재현).
상수
fp16 표현 상한65504
폭 축 슬라이스 고정 게인×16
조용한 무한대 오버플로 임계 (폭 축)> 4094
활성화 LUT 정확도~0.5 ULP
Sigmoid 테이블 도메인 클램프[−9.938, +8.320]

CH 4능력 표면 — 광고된 능력 ≠ 도달 가능한 연산

엔진은 온디바이스 인지 네트워크를 구성하는 연산을 M1부터 네이티브로 실행한다 — 컨볼루션, matmul, 융합 어텐션, 정규화, 활성화, 데이터 이동. 어떤 패밀리에도 하드웨어 경로가 없는 확정 집합에는 reduce_prod, scatter 계열, 순환 셀이 포함된다. 일부 연산은 패밀리 게이트가 있다 — 텍스처 엔진 샘플러는 A14에, sin·cos는 A15에 도착한다. 한 계층에 명시된 능력이 도달 가능한 연산은 아니다 — 3차원 컨볼루션은 능력 바이트를 가지면서도 모든 기기에서 백엔드 하강에 실패한다 측정.

PART IIReaching the ANE · 엔진에 도달하기

Core ML 없이 디스패치Software Stack · Direct Dispatch · Weights · Entitlement

CH 5
소프트웨어 스택

애플리케이션과 엔진 사이 4개 사용자 공간 계층. 모델 프레임워크 아래의 실행 런타임은 배치 플래너 없이, 받아들여진 연산에 권한 없이 직접 도달 가능하다.

CH 6
Core ML 없는 디스패치

다섯 단계로 도달 — 그래프 빌드, 프로그램 포맷 컴파일, 로드, 피연산자 버퍼 바인딩, 디스패치. 한 제출이 호스트 왕복 없이 여러 온엔진 스텝을 구동한다.

CH 7
가중치와 압축

엔진은 곱셈기 입력에서 4가지 압축 형식을 재구성한다. 직접 경로에서 형식은 압축 바이트를 스트리밍해 대역폭을 얻거나 dense fp16으로 접혀 얻지 못한다 — 어느 쪽인지는 타깃 칩이 정한다.

CH 8
권한 경계

직접 경로는 유용한 컴퓨트에 도달한다. 4개 기능 — 3D 컨볼루션, 네이티브 상태 타입, bf16 입출력, 유연·상징 형상 — 은 프레임워크 로더나 권한 뒤에 있다.

CH 6다섯 단계 직접 디스패치

엔진은 평범한 사용자 공간에서 다섯 단계로 도달 가능하다 — 그래프 빌드, 프로그램 포맷으로 컴파일, 로드, 피연산자 버퍼 바인딩, 디스패치 측정. 경로에 배치 플래너가 없고, 컴파일러가 받아들이는 연산에 권한이 필요 없다. 단일 제출이 스텝당 호스트 왕복 없이 여러 온엔진 스텝을 한 호스트 호출씩 발행한 것과 같은 속도로 구동하므로, 권한 없는 경로는 디스패치 측면에서 성능 완전(performance-complete)하다.

CH 7가중치 압축 — 대역폭 이득은 칩이 정한다

엔진은 4가지 압축 가중치 형식을 곱셈기 입력에서 재구성한다. 권한 없는 직접 경로에서 한 형식은 압축 바이트를 스트리밍해 대역폭 이득을 얻거나, dense fp16으로 접혀 이득을 얻지 못한다 — 그 결과는 타깃 칩이 결정한다 측정.

표 7. 압축 형식별 스트리밍 여부와 fp16 대비 속도. M1은 int4 LUT만, M5는 네 형식 모두 스트리밍.
형식M1/H13M5/H17s
int4 룩업테이블스트리밍 · 2.37×스트리밍 · 1.6–1.8×
구조적 희소성스트리밍 · 1.55–1.64× (0.43× 바이트)스트리밍 · 1.6–1.8×
int8 어파인 (per-tensor/channel)fp16으로 접힘 · 이득 없음스트리밍 · 1.6–1.8×
블록별 어파인fp16으로 접힘 · 이득 없음스트리밍 · 1.6–1.8×

M1에서는 형식을 타깃에서 스트리밍되는 것으로 고르고, int8은 저장 크기 절반이 이득이 되는 곳에만 폴백한다 — int8 폴드는 DRAM에서 fp16으로 확장되어 대역폭 이득이 없기 때문이다.

CH 8권한 경계와 하드 한계

직접 경로는 엔진의 유용한 컴퓨트에 도달하며, 네 기능 — 3D 컨볼루션, 네이티브 상태 타입, bf16 프로그램 입출력, 유연·상징 형상 — 은 프레임워크 로더나 권한 뒤에 있다. 각 게이트된 기능은 앞선 계층을 통과하고 작업을 실행하는 계층에서 실패하며, 넷 중 어느 것도 어느 경로로든 M1의 엔진에서 실행되지 않는다 측정. 그 모든 것 아래에 하드 한계가 있다 — 손으로 만들거나 직접 컴파일한 프로그램은 로드 시 0xe00002e2 오류로 거부된다. 따라서 도달 가능한 표면은 시스템 데몬의 컴파일러가 받아들이는 모든 것이다.

PART IIIPerformance and Fit · 성능과 적합

루프라인과 전력Roofline · Power · ANE vs GPU vs CPU · Chip Family

CH 9루프라인 — 세 가지 천장

한 레이어는 바이트당 141 FLOP 이상에서만 컴퓨트 바운드이고, 그 아래에서는 엔진이 메모리 기울기 위에서 동작한다. 모든 연산의 작업 집합을 2 MB 아래로 유지하지 않으면 전체 활성화를 DRAM에서 스트리밍한다. 모든 디스패치는 0.23 ms 바닥을 지불하므로, 컴퓨트가 그것을 넘을 때까지 배치하거나 융합한다 측정.

달성 성능 (fp16 TFLOP/s, log) 산술 강도 (FLOP/byte, log) 능선점 ≈ 141 FLOP/byte → 컴퓨트 바운드 메모리 바운드 ← 컴퓨트 천장 ≈ 12 TFLOP/s (M1) 메모리 기울기 (85 GB/s) 디스패치 바닥 0.23 ms · 작업 집합 임계 2 MB
그림 9.1. 엔진의 루프라인. 능선점(~141 FLOP/byte) 아래는 메모리 기울기(85 GB/s), 위는 컴퓨트 천장(~12 TFLOP/s, M1). 모든 디스패치에 0.23 ms 바닥, 작업 집합 2 MB 임계가 더해진다. M1/H13 측정.

CH 10 · 11전력·효율과 ANE / GPU / CPU 분담

엔진은 측정된 모든 워크로드 클래스에서 GPU보다 적은 전력을 끌어쓴다 — GPU가 더 빠른 경우조차 그렇다. M1에서 GPU의 2~14배 에너지 효율을 제공하며, 이 우위는 M1·M2·M5에 걸쳐 유지되어 한 칩이 아니라 고정 기능 fp16 데이터패스의 속성임을 보인다 측정. 세 프로세서의 분담은 명확하다.

컨볼루션 스택16× 3×3, M5
ANE
4.2× 빠름
GPU
기준
대형 정사각 matmul장문 어텐션·디코드
ANE
기준
GPU
2.8× 빠름
사소한 연산0.23 ms 바닥 미만
ANE
바닥에 막힘
CPU
CPU 최고
ANE GPU CPU

서빙은 경계선을 옮긴다 — GPU는 배치 약 23의 배치 인코더 블록에서, 배치 약 6의 셀프 어텐션에서 엔진을 추월한다. 16딥 컨볼루션 스택은 M5에서 GPU보다 약 4.2배 빠르고 약 13배 에너지 효율적이다 측정.

CH 12칩 패밀리를 가로질러 — M(n) → H(n+12)

M(n) 칩은 H(n+12) ANE 아키텍처를 가지므로 M1은 H13, M5는 H17이다. 한 세대에서 컴파일·실행되는 네트워크는 다른 세대에서도 컴파일·실행된다 — 하나의 컴파일러 바이너리가 모든 타깃을 빌드하고 타깃별 데이터 표만 바뀌기 때문이다. 칩마다 달라지는 유일한 속성은 fp16 수치이며, 그것도 ULP 한 단위에서만 달라진다 측정.

PART IVWorkloads · 워크로드

실제 워크로드를 엔진에 맞추기Vision · LLM · Training · Scientific Computing

CH 13
비전·컨볼루션·인코더

256채널 3×3 컨볼루션은 GPU보다 약 3.8배 빠르고 9배 효율적. 인코더·임베딩은 배치 ~23 미만, 셀프 어텐션은 배치 ~6 미만, 비전 컨볼루션은 모든 배치에서 엔진에 보낸다.

CH 14
LLM 사례 연구

자기회귀 디코드는 대역폭·디스패치 바운드라 엔진이 지는 두 영역 — 모든 배치에서 GPU로. 배치 16에서 GPU가 디코드를 약 2.7배 빠르게, 4.6배 효율적으로 실행한다.

CH 15
엔진에서의 훈련

후방 연산은 없지만, 전방·후방·옵티마이저 루프 전체가 일반 추론 그래프 연산으로 실행된다. 등록된 그래디언트 집합은 닫힌 형식과 코사인 1.0000으로 일치한다.

CH 16
수치·과학 컴퓨팅

밀집 선형대수와 고정 반복 수치가 적합. 와이드 누산기는 조건수 ~10⁴까지 정밀도 유지. DFT는 matmul로 실행되며 N=2048까지 fp16-클린.

CH 14LLM — 무엇을 어디로 보낼 것인가

자기회귀 디코드는 대역폭 바운드이자 디스패치 바운드 — 엔진이 지는 두 영역 — 이므로 모든 배치 크기에서 GPU에 속한다. 배치 16에서 GPU는 디코드를 약 2.7배 빠르고 약 4.6배 에너지 효율적으로 실행한다 측정. int8 가중치는 가중치 트래픽을 절반으로 줄이지만 하이브리드 디코더를 fp16 속도의 약 0.99배에 머물게 한다 — 단계가 가중치 대역폭이 아니라 디스패치에 막혀 있기 때문이다.

배치 가이드

프리필·인코더·비전 프런트엔드는 엔진으로, 자기회귀 디코드는 GPU로 보낸다. 인코더·임베딩은 배치 ~23 미만에서, 셀프 어텐션 블록은 배치 ~6 미만에서 엔진에 두고, 비전 컨볼루션은 모든 배치에서 엔진에 둔다.

CH 15엔진에서의 훈련 — 후방 연산 없이 훈련하기

엔진에는 후방 연산이 없지만, 전방·후방·옵티마이저 루프 전체가 옵티마이저 상태를 스텝 간 상주시킨 채 일반 추론식 그래프 연산으로 실행된다 측정. 등록된 그래디언트 집합은 닫힌 형식과 코사인 1.0000으로 일치해, 트랜스포머·정규화 기반 컨볼루션 네트워크·게이트 선형 네트워크 모두 종단간 훈련된다.

소형 컨볼루션 네트워크 최종 테스트 정확도 (M1)
0.9080 측정
동일 네트워크 (M5), 손실 스케일 1024
0.9070 측정
그래디언트 집합 ↔ 닫힌 형식 코사인
1.0000 측정
conv 가중치 그래디언트 포화 (폭 축, M1·M2)
> 4094 측정

두 세대 간 최종 정확도 차이는 천 개 중 한 테스트 샘플(0.001) 수준이다. conv 가중치 그래디언트가 폭 축에서 포화하므로 그 한 수치 가장자리는 프리플라이트 검사로 막는다.

CH 16수치·과학 컴퓨팅

밀집 선형대수와 고정 반복 수치가 엔진에 맞으며, 와이드 누산기는 fp16 입력 반올림이 오차 바닥을 정하기 전까지 조건수 약 10⁴까지 정밀도를 유지한다 측정. 밀집 인수분해와 완전 스펙트럴 분해는 하나의 정적 그래프로 펼쳐 실행되며, 인수분해는 약 n=32, 스펙트럴 분해는 약 n=20에 이른다. 이산 푸리에 변환은 matmul로 실행되어 약 N=2048까지 fp16-클린이다. 유일한 아키텍처 한계는 피버팅이 아니라 런타임 크기 출력이다 — 데이터 의존 피벗은 피벗 선택 지점에서 그래프를 잘라 도달한다.

PART VPractice · 실무

설계 규칙·비용 모델·함정Model-Design Rules · Cost Model · Pitfalls

CH 17
모델 설계 규칙

모든 연산이 검증기 한계 안에 있을 때만 컴파일된다 — fp16 활성화, 폭·높이 ≤ 16384, 채널 ≤ 65536. 컨볼루션 커널 폭 ≤ 13, arg-min/max 축 ≤ 2048.

CH 18
최적화와 비용 모델

컴파일러는 형상을 세 단계 — 사이클 수, 루프라인, 고정 디스패치 바닥 — 로 벽시계 추정으로 바꾼다. 5개 기준 컨볼루션에 ±17%, 폭넓은 스윕에서 중앙값 오차 ~31%.

CH 19
함정과 한계

다섯 직접 경로 실패 모드는 조용하거나 타깃 특정적. M1 마지막 축 오프셋 슬라이스는 4094 초과 시 포화, 동적 가중치 컨볼루션은 배치 1 초과 컴파일 실패.

CH 17모델 설계 규칙 — 검증기 한계

활성화 정밀도
fp16 디컴파일
폭·높이 최대
≤ 16384
채널 최대
≤ 65536
컨볼루션 커널 폭
≤ 13
arg-min / arg-max 축
≤ 2048
단일 연산 최대 라이브 피연산자
< 2 MB (초과 시 타일·스트리밍)

채널 수는 인터리브 인수의 배수로, 그룹 수는 코어 수를 나누도록 만든다 — 그렇지 않으면 엔진이 레인을 패딩하고 느리게 실행한다 디컴파일.

CH 18비용 모델 — 절대 오라클이 아닌 서수 도구

컴파일러는 형상을 세 단계 — 사이클 수, 루프라인, 고정 디스패치 바닥 — 를 거쳐 벽시계 추정으로 바꾸며, 패밀리에 걸쳐 칩별 파라미터만 바뀐다. M1에서 모델은 튜닝 대상이던 5개 기준 컨볼루션에 ±17% 이내로, 피크 3.25 fp16 TFLOP/s, 대역폭 9.0 GB/s, 0.23 ms 바닥에서 맞는다 측정. 폭넓은 스윕에서 중앙값 오차는 약 31%이므로, 추정은 절대 지연 오라클이 아니라 서수 배치 도구다. 같은 모델이 칩을 손에 쥐지 않고도 28개 타깃 어느 것의 지연이든 추정한다 — 대역폭은 코어 수로, 바닥은 클럭으로 스케일하기 때문이다.

CH 19다섯 가지 함정

다섯 직접 경로 실패 모드는 조용하거나 타깃 특정적이다 — ① M1 마지막 축 오프셋 슬라이스가 4094 초과 시 포화, ② 동적 가중치 컨볼루션이 배치 1 초과에서 컴파일 실패, ③ 포화 슬라이스 커널이 M1 타깃에 고정, ④ 빠른 연속 실패 컴파일이 공유 컴파일 서비스를 멈출 수 있음, ⑤ 진짜 4문자 코드 이미지 입력이 직접 경로에서 도달 불가 디컴파일. 각각은 비공개 컴파일러나 그 데이터 표의 속성이므로, 방어는 런타임 검사가 아니라 빌드 시점 규칙이다. 실패 후 컴파일은 약 15초 간격으로 페이싱해, 실패 컴파일의 연속이 서비스를 멈추지 않게 한다.

막간 · API 아래에서 엔진이 동작하는 법

오직 엔진에 작업을 디스패치하기만 하는 독자는 Part V 끝에서 멈춰도 된다. 뒤 절반은 프로그래밍 표면 아래의 메커니즘으로, 수치 결과를 추론하거나, 측정되지 않은 칩을 예측하거나, 컴파일 실패를 디버깅하기 위한 것이다.

PART VIThe Silicon · 실리콘

데이터패스와 메모리 계층Datapath · MAC Geometry · Memory Hierarchy

CH 20데이터패스와 MAC 기하 구조

곱셈-누산(MAC) 배열은 M1에서 4코어이며, 각 코어는 8딥 누산기 파일을 갖고 모든 기하 상수를 칩별 하드웨어 추상화 표에서 읽는다 디컴파일. 레인 폭은 int8 빠른 경로에서 사이클당 8개, 기본 fp16 경로에서 4개 출력 채널을 내보내며, 출력 채널이 코어와 누산기 패스에 걸쳐 분할되는 차원이다. 각 코어는 fp16 반올림 타일의 radix-4 트리를 통해 fp32급 와이드 러닝 누산기 하나로 환원하고, 출력 포트에서만 fp16으로 반올림한다. 펌웨어에는 컨볼루션·Winograd·시스톨릭 코드가 없다 — 실시간 커널과 타일·커널·출력 DMA 배관만 담는다.

MAC 코어 수
M1: 4 · M5: 16 측정
누산기 파일 깊이
8딥 디컴파일
레인 폭 (출력 채널/사이클)
int8: 8 · fp16: 4
환원 트리
radix-4, fp32급 누산기

CH 21메모리 계층 — 2 MB 온칩 풀

엔진은 작업 데이터를 하나의 온칩 풀에 두며, M1에서 하드웨어 추상화 표 필드 0x1b8의 2 MB 크기가 지배적 크기 한계다 — 가장 큰 단일 피연산자가 들어가는 레이어는 온칩에 머물고, 초과하는 레이어는 타일링되어 DRAM에서 스트리밍된다 디컴파일. 풀은 16바이트 그래뉼로 64개 뱅크에 인터리브되며, 뱅크 인덱스는 floor(addr/16) mod 64이고 컴파일 시점 스트라이드 옵티마이저가 접근을 분산해 충돌을 피한다. 풀은 수요 채움 캐시가 아니라 컴파일러 관리 스크래치패드여서, 상주와 스트라이드가 컴파일 시점에 결정되며 재참조 순서가 어느 피연산자가 상주하는지 바꾸지 않는다.

PART VIIThe Toolchain and Encoding · 툴체인과 인코딩

컴파일러·프로그램 포맷·압축Compiler · Container · HAL · Compression · Hidden Layers

CH 22
컴파일러

네트워크 기술을 4단계로 로드 가능 프로그램으로 변환 — 한 컴퓨트 연산으로의 융합, 하드웨어 한계로의 합법화, 작업 집합 하의 스케줄·태스크 디스크립터 분할, 메모리·DMA 최적화.

CH 23
프로그램·컨테이너 포맷

두 계층 파일 — 연산을 명명·바인딩하는 FlatBuffer 디스패치 디스크립터, 그 위 매직 0xbeefface의 Mach-O형 하드웨어 컨테이너. 그 사이에 하드웨어 태스크 디스크립터 ZinAneTdHw_v10.

CH 24
HAL과 능력 게이트

한 바이너리가 칩별 데이터 표(HAL)로 모든 칩을 빌드. 능력 바이트 영역은 0x48f–0x8cc, 각 바이트는 hal[offset] & 1로 한 연산·포맷을 게이트. F4(A15) 위로 floor되는 컴퓨트 연산은 없다.

CH 25
압축 내부

모든 가중치 블롭은 형식 enum(1–31)을 가지며 — palette 7–27, unity 28–30 — 다섯 병렬 헬퍼 표를 키잉. 스트리밍 마스터는 0x48f, palette·affine 클러스터는 0x520–0x539.

CH 26
히든 레이어·직접 netplist

컴파일러는 45개 하드웨어 레이어 디스크립터를 검증·하강하나, 변환기는 그 부분집합만 노출. 네트워크 기술을 직접 작성하면 융합 어텐션·랭킹·공간 재배열·기하 레이어에 도달.

CH 22컴파일러 — 그래프를 하나의 프로그램으로 융합

컴파일러는 네트워크 기술을 네 단계로 로드 가능한 프로그램으로 바꾼다 — 하나의 컴퓨트 연산으로의 융합, 하드웨어 외피로의 합법화, 온칩 작업 집합 하의 스케줄·태스크 디스크립터 분할, 메모리·DMA 최적화 디컴파일. 프런트엔드 연산은 하나 이상의 백엔드 anec.* 연산으로 하강하며 대부분 1:1이되, 컨볼루션은 바이어스·활성화·패딩·역양자화를 하나의 융합 연산으로 흡수한다. 내보내진 _ANECValidate{Op}Layer 진입점이 각 연산을 먼저 검사하며, 호출 가능한 검증기는 해당 연산이 직접 경로에서 도달 가능함을 신호한다 — 55개 _ANECValidate* 익스포트 중 50개가 레이어별 검증기다.

CH 23프로그램·컨테이너 포맷

컴파일된 네트워크는 두 계층 파일로 엔진에 도달한다 — 연산을 명명하고 버퍼를 바인딩하는 FlatBuffer 디스패치 디스크립터, 그 위에 하드웨어 컨테이너. 하드웨어 컨테이너는 매직 0xbeefface의 Mach-O형 파일로 레지스터 쓰기 프로그램과 가중치 뱅크를 담는다 디컴파일. 디스크립터는 연산 수가 아니라 디스패치 수를 추적한다 — 임의 깊이의 융합 그래프가 입력·출력 캐스트로 묶인 하나의 추론 연산으로 환원되고, 브리지 컷은 세그먼트당 추론 연산 하나를 더한다. 그 사이에 하드웨어 태스크 디스크립터 ZinAneTdHw_v10이 일곱 그룹의 레지스터 이미지로, 버퍼 베이스가 재배치 슬롯인 44바이트 레코드로 희소 직렬화된다.

CH 24HAL과 능력 게이트

컴파일러는 칩별 데이터 표 — 컴파일 시점에 읽히는 하드웨어 추상화 계층(HAL) — 로 라인의 어느 칩이든 빌드하는 하나의 바이너리다. 표는 수치 한계를 위한 바이트 오프셋 색인 스칼라 필드와, 오프셋 0x48f0x8cc의 밀집 능력 바이트 영역을 담으며, 각 바이트는 hal[offset] & 1로 읽혀 한 연산·포맷을 게이트한다 디컴파일. 연산 합법성은 MinimumFamily<N> 트레잇으로 선언된다 — 타깃 패밀리 인덱스가 N 이상일 때만 네이티브, floor 미만에서는 분해되며, A15 위로 floor되는 컴퓨트 연산은 없다.

CH 25압축 내부 — 형식 enum과 두 게이트

모든 가중치 블롭은 형식 enum(정수 1~31)을 가지며 모든 패킹을 제어하는 다섯 병렬 헬퍼 표를 키잉한다 — palette 범위는 7~27, unity 범위는 28~30. 엔진은 네 압축 형식을 재구성한다 — per-tensor·per-channel int8 어파인, int4 룩업테이블, 구조적 희소성, 블록별 어파인 디컴파일. 두 게이트가 압축 가중치가 압축 바이트로 스트리밍될지 dense half로 접힐지 결정한다 — 커널 스트리밍 마스터는 오프셋 0x48f, 형식별 palette·affine 클러스터는 0x5200x539.

CH 26히든 레이어와 직접 netplist 작성

컴파일러는 45개 하드웨어 레이어 디스크립터의 네이티브 카탈로그를 검증·하강하나, 모델 변환기는 공개 연산 집합이 덮는 부분집합만 노출한다. 네트워크 기술을 직접 작성하면 나머지 — 융합 어텐션, 랭킹, 공간 재배열, 기하 레이어 — 에 도달하며, 각각 자기 디스패치 세그먼트를 자른다 디컴파일. 작성이 패밀리 게이트를 우회하지는 않는다 — 텍스처 엔진 샘플러와 전체 텐서 arg-min/max는 A14·A15부터 받아들여지고 M1에서 거부되며, 레이어는 타깃에서의 컴파일-실행으로만 확인된다.

PART VIIISystem Internals · 시스템 내부

드라이버·DART·펌웨어·프로토콜Kernel Driver · Address Translation · Firmware · Power · Security · Telemetry

CH 27
커널 드라이버·IOKit ABI

단일 커널 드라이버와 평탄한 user-client 셀렉터 ABI — 17개 제어 클라이언트 셀렉터, 9개 직접 경로 셀렉터. 엔진 도달은 권한 com.apple.ane.iokit-user-access를 쥔 정확히 2개 시스템 바이너리를 통한다.

CH 28
주소 변환과 DART

엔진은 자체 IOMMU(DART)로 DRAM을 읽고 쓰며, 16 KB 그래뉼·3.5 GiB 어퍼처로 디바이스 주소를 물리 페이지로 변환. leaf = phys|0x8000000000000000.

CH 29
펌웨어

실시간 커널 위 C++ 애플리케이션, 암호화되지 않은 프리로드 실행 파일. 고정 우선순위 8레벨 스케줄러, 하드웨어 워치독 없음, 멈춘 큐를 중단시키는 ~2초 소프트웨어 데드라인.

CH 30
호스트-펌웨어 명령 프로토콜

공유 메일박스 위 하나의 메시지 프로토콜. M1 디스패치 명령 공간은 93개 식별자(0x00–0x5c), eCSneCmdId로 색인, 0xFFFFFFFF는 무효 센티넬.

CH 31
전력·열

전압·주파수 스케일링 없는 단일 고정 클럭. 유휴 0 W(레일 오프), 지속 컨볼루션 176초간 ~1.66 W 평탄, 최대 밀집 피크 6.96 TFLOP/s에서 ~4.7 W.

CH 32
보안·격리

제출 프로그램의 신뢰 경계는 펌웨어가 아닌 커널 드라이버. 엔진은 공유 타이밍·점유 오라클 — 약 20–50 bit/s로 코테넌트 존재와 거친 듀티 사이클을 누출하나 값·가중치·입력은 절대 누출하지 않음.

CH 33
텔레메트리·하드웨어 카운터

24개 태스크 디스크립터별 카운터 블록. 블록 기하와 타임스탬프는 읽히나, 카운터 값은 권한 없는 경로에서 한 커널 게이트가 막음. DRAM 읽기·쓰기 바이트, 에너지(mJ), 클럭 상태 잔류는 읽힘.

CH 27커널 드라이버와 IOKit ABI

엔진은 단일 커널 드라이버와 평탄한 user-client 셀렉터 ABI로 도달한다 — 17개 제어 클라이언트 셀렉터와 9개 직접 경로 셀렉터, 각각 정확한 크기 튜플 하나에 고정 디컴파일. 어느 user client를 열든 커널 권한 com.apple.ane.iokit-user-access에 게이트되며, 정확히 두 시스템 바이너리가 이를 쥐므로 모든 애플리케이션은 권한 있는 브로커 데몬을 통해 엔진에 도달한다. 셀렉터 2만이 사용자 공간에서 하드웨어 도어벨에 도달한다 — MMIO 메일박스 쓰기로 끝나는 4계층 호출 경로를 통해. 크기 튜플은 M1·M2급 커널 캐시에서 일치하므로 이 계층의 ABI는 패밀리 불변이다.

CH 28주소 변환과 DART

엔진은 자체 IOMMU인 DART를 통해 DRAM을 읽고 쓰며, 16 KB 그래뉼로 3.5 GiB 어퍼처에 걸쳐 디바이스 주소를 물리 페이지로 변환한다 디컴파일. 일반 엔진 페이지는 하나의 64비트 leaf 워드로, 물리 프레임이 비트 63을 세운 채 시프트 없이 위치한다 — leaf = phys|0x8000000000000000. program-create는 각 호스트 매핑 버퍼를 high half 0x1bc4의 펌웨어 어퍼처로 재베이스하는 두 번째 변환을 적용한다. 폴트 캡처 레지스터는 M1에서 읽을 수 없다 — 폴트 경로의 모든 함수가 커널 패닉으로 끝나기 때문이다.

CH 29 · 30펌웨어와 호스트 명령 프로토콜

엔진 컨트롤러는 실시간 커널 위에서 C++ 애플리케이션을 실행하며, 암호화되지 않은 프리로드 실행 파일로 배포된다. 모든 서브시스템은 메시지 펌핑되는 장수명 태스크이고, 모든 커널 객체는 빌드 시점 고정 풀에 놓인다. 스케줄러는 8레벨 고정 우선순위로, 하드웨어 워치독이 없고, 멈춘 큐를 중단시키는 약 2초 소프트웨어 데드라인을 둔다 디컴파일. 호스트는 공유 메일박스 위 하나의 메시지 프로토콜로 엔진을 구동한다 — 프로그램·프로세스·프로시저를 명명하는 고정 sCSneControllerCmdHdr 헤더에 명령 본문이 뒤따른다. M1의 디스패치 명령 공간은 93개 식별자 (0x000x5c), eCSneCmdId로 색인되며 0xFFFFFFFF가 무효 센티넬로 예약된다.

CH 31전력과 열 — 단일 고정 클럭

엔진은 전압·주파수 스케일링 없이 하나의 고정 클럭으로 동작하며, 전원 인가 시 제어 워드 0x11의 루프 없는 다섯 스토어로 한 번 무장되는 피크 전력 레귤레이터로 전력을 관리한다 디컴파일. 펌웨어에는 열 로직이 없고 온도를 읽지 않는다 — 열 보호는 엔진 밖 시스템 전력 관리자에 있다.

유휴 전력
0 W, 레일 오프 측정
지속 컨볼루션 (176초 평탄)
≈ 1.66 W 측정
최대 밀집 피크
≈ 4.7 W @ 6.96 TFLOP/s 측정
M1 GPU 대비 에너지 효율
2–14× 측정

CH 32 · 33보안·격리와 텔레메트리

제출된 프로그램의 신뢰 경계는 펌웨어가 아니라 커널 드라이버다 — 드라이버가 작업이 엔진에 도달하기 전에 프로그램 서명, 온디스크 trustcache, 클라이언트 코드 서명 신원을 검사하고, 엔진은 그 후 구조적 경계 검사만 실행한다 디컴파일. Secure 모드는 한 테넌트에게 정지·전원 재순환된 엔진을 주는 동작 전이이고, exclave 모드는 M1에서 비활성 셀렉터 스텁 (mov w0, #0; ret)이지만 M5에서는 살아 있는 능력 범위 실행 기질이다. 엔진은 공유 타이밍·점유 오라클이다 — 확인된 교차 프로세스 사이드 채널이 코테넌트의 존재와 거친 듀티 사이클을 약 20~50 bit/s로 누출하나, 값·가중치·입력은 절대 누출하지 않는다 측정.

엔진은 24개 태스크 디스크립터별 카운터의 하드웨어 성능 카운터 블록을 가지며, 마스터 enable은 ANEProgramCreateArgs+0x6c, 자유 실행 펌웨어 타임스탬프는 MMIO 0x2_6b17_8000이다. 블록 기하와 타임스탬프는 읽히나 태스크별 카운터 값은 한 커널 게이트가 권한 없는 경로에서 막는다 디컴파일. 그 게이트 밖에서 읽히는 것은 전체 엔진 텔레메트리다 — DRAM 읽기·쓰기 바이트, 엔진 에너지(mJ), 클럭 상태 잔류.

PART IXCross-Silicon Reference · 교차 실리콘 레퍼런스

교차 실리콘 타깃과 예측된 상위 계층Cross-Silicon Targets · Per-Family Codegen · Predicted Upper Tier

CH 34 · 3528개 타깃과 패밀리별 코드 생성

컴파일러는 28개 아키텍처 타깃을 빌드하며, 실리콘 프로파일마다 하나씩 고정 관계 M(n) → H(n+12) 하에 있다 디컴파일. 접미 문자가 NE 코어 수를 선택하고, 연산 표면은 A15에서 확장을 멈추므로 M5에서 측정된 표면이 그 위 모든 것의 표면이다. 하나의 컴파일러 바이너리가 모든 세대를 위해 네트워크를 하강하며, 칩별 차이는 코드가 아니라 데이터다. 네이티브 연산 지원은 네 floor(F0~F4)의 MinimumFamily<N> 트레잇으로 선언되고, F4 위로 floor되는 것은 없다. M1이 분해하고 M5가 네이티브로 실행하는 유일한 연산은 crop-resize, resample, sin, cos, 그리고 전역 arg-환원이다.

표 12·34. M-시리즈 → H-시리즈 ANE 아키텍처 매핑. 직접 측정 지점은 M1/H13과 M5/H17s.
M-시리즈 칩ANE 아키텍처증거
M1H13측정 (1차 호스트)
M2H14디컴파일
M3H15디컴파일
M4H16디컴파일
M5H17s측정 (2차, 10개 교차 실리콘 예측 전부 확인)

CH 36예측된 상위 계층 — fp8과 멀티 다이 컬렉티브

여기서 측정한 어느 부분도 실행할 수 없는 두 데이터패스가 컴파일러에서 M5 위에 있다 — fp8 가중치·활성화 형식, 그리고 멀티 다이 컬렉티브 통신 계층. 둘 다 디코드된 구조로 존재하나 이 문서가 도달한 모든 패밀리에서 게이트 오프이며, 측정이 아닌 예측으로 명시된다 예측. fp8 게이트는 오프셋 0x52d의 능력 바이트로 H18에만 설정되고, 컬렉티브 enable 바이트 0x48b는 28개 타깃 모두에서 0으로 읽힌다.

BACK MATTER방법론 · 미해결 질문 · 진술

방법론과 미해결 질문Methodology · Open Questions · Statements

방법론 — 네 기법

모든 발견은 네 기법 중 하나에 기댄다 — 직접 비공개 런타임 경로, 스택의 정적 디컴파일, 살아 있는 읽기 전용 계측, 컴파일-실행 탐침. 결과는 두 측정 실리콘 지점에 기댄다 — 1차 호스트 M1/H13과 2차 M5/H17s. 주장은 명명된 세대에서 측정됐거나 예측으로 표기된다. M5/H17s는 10개 교차 실리콘 예측을 모두 디바이스에서 확인했다. M3/H15 세대와 H17s 위 상위 계층은 측정이 아니라 디컴파일 유래다.

미해결 질문 — 세 종류

미해결 질문은 세 종류로 나뉜다 — 다른 칩이나 온실리콘 탐침이 답할 질문, 승인된 권한이 답할 질문, 데이터가 존재하지 않거나 실리콘이 관측 가능한 흔적을 남기지 않아 답할 수 없는 질문. 각 항목은 왜 열려 있는지와 무엇이 그것을 닫을지 명시한다. 엔진은 호스트 호출부터 레지스터 쓰기까지 디코드되었고, 바이트나 문자열로 존재하는 모든 것은 사람이 읽을 수 있는 형태로 해소되었다.

APPENDICES부록 A–E

레퍼런스 부록Operation Matrix · Hidden Layers · Decoded Tables · Glossary · Provenance

부록 A
연산-디바이스 행렬

4장 뒤의 완전한 연산별·패밀리별 상태 레퍼런스. 패밀리 열을 따라 읽어 그 칩에서 무엇이 컴파일·실행되는지, 게이트와 경로의 상태 표기·노트를 확인한다.

부록 B
히든 레이어 카탈로그

26장 뒤의, 네트워크 기술을 직접 작성해 도달하는 하드웨어 네이티브 레이어 종류의 레퍼런스 카탈로그.

부록 C
디코드된 레퍼런스 표

문서 전반에 인용된 디코드 값을 하나로 모음 — enum 토큰, 구조체 레이아웃, 상태 코드, 레지스터 초기화 표, 명령 표, 레지스터 맵, 프로그램 컨테이너 스키마.

부록 D
용어집

아홉 파트에 걸쳐 쓰인 약어·고유명사·기호를 정의. 네 핵심 사실을 먼저, 그 다음 용어 표, 패밀리·실리콘 맵을 읽는다.

부록 E
출처(Provenance)

모든 주장의 증거 표기(measured·decompile-derived·predicted)를 기록한다.

§ REFERENCES

관련 연구·참고문헌Related Work · References · 발췌

Core ML 아래에서 엔진에 도달하는 작업에는 동시·선행 선례가 있다. 가장 가까운 것은 Orion2026으로, LLM 훈련·추론을 위해 엔진을 특성화·프로그래밍한 동시 연구다. 커뮤니티 리버스 엔지니어링 계보가 이를 앞선다 — tinygrad(HWX 프로그램 포맷과 AppleH11ANEInterface IOKit 경로 복원), Yoon의 ane 프로젝트(리버스 엔지니어링 Linux 드라이버와 anecc 컴파일러), Singh의 M4 엔진 디코드 시리즈. 성능 처리는 루프라인 문헌(Williams 2009)과 그 정제, 그리고 신경 가속기 측정 연구(Jouppi 2017의 TPU 분석 등)에 기댄다.

[Orion2026] 동시 연구 — LLM 훈련·추론을 위한 ANE 특성화·프로그래밍.
[tinygrad] HWX 프로그램 포맷과 AppleH11ANEInterface IOKit 경로 복원.
[eilnANE] Yoon, ane — 리버스 엔지니어링 Linux 드라이버와 anecc 컴파일러.
[Singh2026] Singh — M4 엔진 디코드 시리즈.
[libane] 평범한 프로그램에 엔진을 노출하는 네이티브 런타임.
[whispercpp] Core ML 경유 경로로 엔진에 도달.
[Hollemans] 공개 지식 카탈로그.
[AppleANETransformers] Apple 자체 트랜스포머 배포 엔지니어링 노트.
[ANEForge2026] 본 문서가 동반하는 오픈소스 직접 경로 런타임.
[Williams2009] Roofline 모델 — 성능 처리의 조직 원리.
[Choi2013] 에너지 루프라인. [Ilic2014] 캐시 인식 루프라인.
[Ding2019] 명령 루프라인. [Yang2020] 계층적 루프라인 분석.
[Jouppi2017] 데이터센터 내 첫 TPU 분석.
[Verhelst2025] ML 가속기에의 루프라인 적용.
[Xu2025] 빠른 NPU 추론. [Moon2025] 장문 GPU-NPU 하이브리드 서빙.
[Benazir2026] Apple 실리콘 NPU의 MoE 추론.
[Hubner2025] HPC 효율 관점의 M-시리즈 평가.
[Zeus2025] ML.ENERGY — 프로그래밍 방식 에너지 측정.