https://medium.com/swlh/apples-m1-secret-coprocessor-6599492fc1e1
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가 우위를 차지 한다는 것
Detect language Afrikaans Albanian Amharic Arabic Armenian Azerbaijani Basque Belarusian Bengali Bosnian Bulgarian Catalan Cebuano Chichewa Chinese (Simplified) Chinese (Traditional) Corsican Croatian Czech Danish Dutch English Esperanto Estonian Filipino Finnish French Frisian Galician Georgian German Greek Gujarati Haitian Creole Hausa Hawaiian Hebrew Hindi Hmong Hungarian Icelandic Igbo Indonesian Irish Italian Japanese Javanese Kannada Kazakh Khmer Korean Kurdish Kyrgyz Lao Latin Latvian Lithuanian Luxembourgish Macedonian Malagasy Malay Malayalam Maltese Maori Marathi Mongolian Myanmar (Burmese) Nepali Norwegian Pashto Persian Polish Portuguese Punjabi Romanian Russian Samoan Scots Gaelic Serbian Sesotho Shona Sindhi Sinhala Slovak Slovenian Somali Spanish Sundanese Swahili Swedish Tajik Tamil Telugu Thai Turkish Ukrainian Urdu Uzbek Vietnamese Welsh Xhosa Yiddish Yoruba Zulu
Afrikaans Albanian Amharic Arabic Armenian Azerbaijani Basque Belarusian Bengali Bosnian Bulgarian Catalan Cebuano Chichewa Chinese (Simplified) Chinese (Traditional) Corsican Croatian Czech Danish Dutch English Esperanto Estonian Filipino Finnish French Frisian Galician Georgian German Greek Gujarati Haitian Creole Hausa Hawaiian Hebrew Hindi Hmong Hungarian Icelandic Igbo Indonesian Irish Italian Japanese Javanese Kannada Kazakh Khmer Korean Kurdish Kyrgyz Lao Latin Latvian Lithuanian Luxembourgish Macedonian Malagasy Malay Malayalam Maltese Maori Marathi Mongolian Myanmar (Burmese) Nepali Norwegian Pashto Persian Polish Portuguese Punjabi Romanian Russian Samoan Scots Gaelic Serbian Sesotho Shona Sindhi Sinhala Slovak Slovenian Somali Spanish Sundanese Swahili Swedish Tajik Tamil Telugu Thai Turkish Ukrainian Urdu Uzbek Vietnamese Welsh Xhosa Yiddish Yoruba Zulu
Text-to-speech function is limited to 200 characters