14P by xguru 2021-01-18 | favorite | 댓글 2개

Apple Matrix Coprocessor
- M1 발표에서 전혀 얘기되지 않았던 행렬 전용 프로세서
- 행렬은 이미지처리, 머신러닝, 음성/필기인식, 얼굴인식, 압축, 음성/영상 미디어 처리등에서 많이 사용됨

- 그거 Neural엔진이 처리해주는거 아냐 ? Neural Engine과 뭐가 달라 ?
ㅤ→ GPU 나 Neural Engine 은 Accelerator(가속기)
ㅤ→ 가속기 들이 사용할 메모리 공간을 채우기 위해서 CPU가 작업하는 것은 비효율
ㅤ→ 이때 명령어들을 보고 있다가(spy) 이걸 Coprocessor가 대신 처리함
ㅤ→ 이걸 이용하려면 별도의 명령어 셋을 정의해야함
ㅤ→ ARM은 커스텀 명령을 넣는것을 거부해 왔지만 2019년부터는 가능한 확장을 제공하기 시작
ㅤ→ 이게 아마도 AMX명령이 공식 문서에 나와있지 않은 이유일 것

- 그럼 ARM에 들어있는 SIMD Vector Engine 이랑은 뭐가 달라 ?
ㅤ→ SIMD : Single Instruction Multiple Data
ㅤ→ 여러 개의 데이터에 같은 Operation을 실행할때 높은 성능을 내는 방법
ㅤ→ 매트릭스 연산과 관련되어 있음
ㅤ→ 하지만 SIMD는 ALU,FPU처럼 CPU내장이고, 코프로세서는 외장임
ㅤ→ 예전 인텔의 8087(FPU)은 8086보다도 트랜지스터 수가 많아서, 그 시절엔 같이 넣는게 어려웠음. 기술 발전으로 트랜지스터 갯수가 많아지고 CPU에 FPU가 내장되면서 사라짐

- 왜 AMX가 Firestorm 코어 안에 안 들어 간건지는 명확하지 않음
ㅤ→ 아마도 별도로 두어서 CPU와 병렬적으로 작업하도록 하는게 쉬웠을 것이고,
ㅤ→ 애플 입장에선 ARM표준이 아닌 것들을 외부에 두는걸 원했을 수도.

- 왜 그럼 AMX 는 숨겨둔거지 ?
ㅤ→ AMX가 공식 문서에 없는데, 어떻게 알게 된거야 ?
ㅤ→ Dougal Johnson 이 리버스 엔지니어링을 통해서 알아냄
ㅤ→ 애플은 행렬연산용 프레임워크인 Accelerate 를 통해서 다양한 기능을 제공함
ㅤㅤㅤ⇨ vImage : 고수준 이미지 처리. 포맷 변환 및 이미지 조작
ㅤㅤㅤ⇨ BLAS : 선형대수 ( 행렬과 벡터 연산 )
ㅤㅤㅤ⇨ BNNS : 신경망 및 학습
ㅤㅤㅤ⇨ vDSP : 푸리에 변환등의 디지털 신호처리. 이미지 또는 오디오 처리용 수학 연산
ㅤㅤㅤ⇨ LAPACK : 고수준 선형대수 함수, 선형방정식 등
ㅤ→ 이 Accelerate 라이브러리가 AMX를 이용해서 계산을 가속
ㅤ→ 명령 자체를 공개했다면 ARM 에코시스템이 파편화가 되었을 것(이건 ARM도 애플도 원하지 않음)
ㅤ→ 애플은 이걸 공개 안하고 프레임워크로 열어서, 고성능을 제공하면서도 언제라도 명령어 세트를 수정할 수 있게 됨
ㅤㅤㅤ⇨ 애플이 하드웨어/소프트웨어를 동시에 제어하는 것때문에 가능
ㅤㅤㅤ⇨ 개발자는 Accelerate 를 통해서만 작업하면 차후 개선되는 것도 누리게 됨

- Apple Matrix Coprocessor 의 장점은 ?
ㅤ→ Nod Labs가 ARMv8.6의 SIMD 표준 명령인 NEON이랑 비교한 바에 의하면 AMX가 2배 이상 빠름
ㅤ→ 모든 것에서 AMX가 좋다는 것은 아니지만, 적어도 머신러닝이나 고성능 컴퓨터(HPC)에서는 AMX가 우위를 차지 한다는 것

OpenCL사라지고 Metal 가속 이외에 Accelerate는 그렇게 강조하지는 않았지만
매년 라이브러리를 늘려가고 있었는데 하드웨어 가속을 하는 전용 코프로세스가 들어갔다니 놀랍네요.

아래 두 글을 쓴 엔지니어의 후속 글입니다. 같이 읽어보시는걸 추천해 드려요.

- Apple M1칩은 왜 그렇게 빠를까? https://news.hada.io/topic?id=3315
ㅤ→ 유튜브로 설명 듣기 : https://youtu.be/71LlixEBK0o
- M1은 RISC-V의 상승을 예고한다 https://news.hada.io/topic?id=3447
ㅤ→ 유튜브로 설명 듣기 : https://youtu.be/F5sIQZvlJc8