19P by xguru 2020-12-21 | favorite | 댓글 8개

"M1은 패러다임 이동의 시작으로 RISC-V에 도움이 되겠지만, 당신이 생각하는 그 방식은 아닐 것이다"
"M1 칩은 왜 그렇게 빠를까?" 를 쓴 엔지니어의 후속 글. RISC-V의 미래를 재미난 관점으로 예상.

M1 성능의 요인은
1. 많은 수의 디코더와 OoO 비순차 실행
2. GPU,NPU,DSP 등 여러개의 전용칩

이 글은 2번 Heterogeneous(이기종) 컴퓨팅에 대한 더 자세한 내용
전용칩들은 여러가지로 부를 수 있는데 여기선 모두 Coprocessor(보조프로세서) 로 통칭(혹은 Accelerator 라고도 부를수 있음)
- 코프로세서는 완전히 새로운 트렌드는 아님
- 1985년에 나온 Amiga 1000도 오디오/그래픽을 위한 보조프로세서가 있었고, GPU도 보조프로세서이고,
ㅤ구글의 TPU(Tensor Processing Unit) 역시 머신러닝에 최적화된 보조프로세서

[ Coprocessor 는 무엇인가 ]
- CPU와 달리 혼자 살수 없음. 보조프로세서만 넣는다고 컴퓨터가 되지 않으며, 단순히 특정 작업을 잘 하는 특수 목적 프로세서
- 초기의 예시는 인텔의 8087 Floating Point Unit(FPU). 인텔의 8086은 정수 계산은 잘했지만, 부동소수점 연산은 잘 못했음
- 정수 계산으로도 부동소수점 연산을 에뮬레이트 할수 있지만 느렸음. 이건 마치 초기의 마이크로프로세서가 덧셈/뺄셈만 할수 있고 곱셈은 못해서 여러번의 덧셈을 반복해서 곱셈을 처리한 것과 비슷.
- 즉, "복잡한 수학계산은 간단한 것을 반복함으로서 처리가 가능"
- 모든 보조프로세서가 하는 일은 이것과 마찬가지. CPU가 보조프로세서가 하는 일을 할수는 있음. 단순 동작을 반복하면 됨
- 초기에 GPU가 필요했던 이유는 수백만개의 폴리곤/픽셀에 동일한 계산을 반복하는게 CPU에선 시간이 많이 필요하기 때문

[ 데이터는 보조프로세서에서 어떻게 In/Out 하는가 ]
- 마우스/키보드/스크린을 비롯하여 GPU/FPU/Neural Engine을 포함한 모든 보조프로세서는 특정 메모리 에 접근하여 데이터를 읽고 쓰는 것과 같음
- 이 작업들은 Device Driver가 처리하므로 일반 소프트웨어 개발자들은 볼일이 없음
ㅤ→ DMA(Direct Memory Access) 컨트롤러 등이 하는 일
- DOS시절 C/C++ 에서는 포인터로 비디오 메모리 주소에 직접 접근하여 픽셀을 바꾸는게 가능했음
- 보조프로세서는 이런방식으로 동작하여, NPU,GPU,T1 등이 각자 자신들과 통신하는 주소를 가지고 있고, 비동기적으로 통신이 가능
- CPU는 Neural Engine 또는 GPU로 보낼 전체 명령을 메모리에 나열한뒤 그 주소를 Neural Engine/GPU 에 알림
- CPU가 코프로세서가 그 명령과 데이터를 처리할동안 기다릴 필요는 없으니 이때 인터럽트가 필요해 짐

[ 인터럽트의 동작 방식 ]
- 그래픽/네트워크 카드는 PC에 꼽히고 지정된 인터럽트 라인이 있음
- 이건 CPU와 직접 연결된 라인처럼 동작해서, 활성화 되면 CPU가 다른일을 내려놓고 인터럽트를 처리
- 실제로는 현재 위치와 레지스터를 메모리에 저장해서 나중에 돌아갈수 있음
- 그 다음엔 인터럽트 테이블에서 수행할 작업을 찾음. 테이블에 인터럽트 트리거시 실행할 프로그램 주소가 들어있음
- 프로그래머한테는 이런게 보이지 않고, 특정 이벤트에 등록하는 콜백함수처럼 보임. 디바이스 드라이버가 저수준에서 이런 처리를 함
- 이런 설명을 하는 이유는 보조프로세서를 사용할 때 무슨일이 일어 나는지를 알고 있어야 실제 통신할때 어떤 일이 수반되는지를 알수 있기 때문
- 인터럽트를 사용하면 많은 일이 병렬로 일어남.
ㅤ→ CPU가 마우스에 의해 중단되는 동안 응용프그램은 네트워크카드에서 이미지를 가져올수 있고, 마우스가 옮겨지고 나면 CPU는 새 좌표를 얻고, 이걸 GPU로 보내서 새 위치에 마우스 커서를 그림. GPU가 마우스 커서를 그릴때 CPU는 네트워크에서 가져온 이미지처리를 시작
- 이런 인터럽트를 사용해서 M1의 뉴럴엔진에 복잡한 기계 학습작업을 보내서 WebCam에서 얼굴을 식별할수 있음. 뉴럴엔진이 이미지데이터를 처리하기 때문에 이때 컴퓨터와 CPU는 다른 작업을 하면서 사용자에게 반응이 가능

[ The Rise of RISC-V ]
- 2010년 UC 버클리의 병렬컴퓨팅 랩은 보조프로세서를 더 많이 사용하는 방향으로 발전.
- 범용 CPU코어를 쥐어짜서는 더 이상 쉽게 성능을 늘릴수 없다는 것에서 무어법칙의 끝을 보았음
ㅤ→ 특수한 하드웨어인 보조프로세서가 필요해짐
- 클럭주파수는 열과 전력소비등 때문에 쉽게 증가시킬수 없음.
ㅤ→ 많은 디코더와 OoO 비순차 실행을 하는게 하나의 방법
ㅤ→ "M1 칩은 왜 그렇게 빠를까?" 글을 참고 https://news.hada.io/topic?id=3315

[ 트랜지스터 예산을 CPU 코어에 쓸것인가 Coprocessor에 쓸 것인가 ]
- 128코어로 늘린다고 데스크탑 시스템이 더 효율적이 되지 않음
- 80년대 초반엔 2만개의 트랜지스터 예산이 있을때 15000개를 들여서 CPU를 만들면 되었음
- CPU가 100개의 다른 작업을 한다고 할때, 그중 한개의 작업을 처리하기 위한 보조프로세서를 만들면 1000개의 트랜지스터가 필요하면, 모든 작업에 대한 보조프로세서를 다 만들면 10만개의 트랜지스터가 필요해서 예산을 초과해 버림

[ 트랜지스터가 많아지면서 전략이 변경됨 ]
- 초기설계에서는 범용 컴퓨팅에 집중해야 했지만, 요즘은 엄청나게 많은 트랜지스터들이 들어가게 되므로, 그것들로 뭘 해야할지를 알 수 없음
- 그래서 보조프로세서를 설계하는 것이 큰 일이 됨. 다양한 새 보조프로세서를 만드는 많은 연구가 진행.
- 이 연구는 멍청한 가속기상태에서 기초부터 키워야하는 경우들이 많음
- CPU와 달리 모든 단계의 명령들을 읽고 처리하는게 아니기 때문에, 메모리에 접근하거나 정리하는 방법등을 모름
- 이에 대한 해결책은 간단한 CPU를 컨트롤러로 사용하는 것
- 즉, 전체 보조프로세서들은 간단한 CPU에 의해 제어되는 특수한 가속기 회로로서 특정 작업을 가속하도록 구성됨
ㅤ→ 예를 들어 Neural Engine/Tensor Processing Unit 같은 칩은 행렬을 저장할수 있는 큰 레지스터를 조작할 수 있음

[ RISC-V 는 Accelerator 를 제어하도록 맞춤 제작 되었음 ]
- 이게 RISC-V 가 설계된 목적
- 일반적인 CPU작업을 위한 40~50개의 최소 명령어 세트를 가지고 있음
ㅤ→ x86 CPU는 1500개의 명령어 셋이 있음
- 큰 고정 명령어 세트 대신, RISC-V는 확장 개념을 중심으로 설계됨
- 모든 보조프로세서는 다르므로, 따라서 RISC-V는 코어 명령어 세트와 보조프로세서가 필요로 하는 확장명령어 세트를 가지게 구성이 가능

이게 이 글에서 설명하고자 하는 것

- Apple의 M1은 업계 전체가 보조프로세서가 지배하는 미래로 향하게 할 것
- 그리고 이 보조프로세서를 만들기 위해 "RISC-V는 퍼즐의 중요한 부분"이 될 것

[ RISC-V로 Coprocessor를 만들면 좋은 점 ]
- 칩을 만드는 것은 복잡하고 비용이 많이 드는 일
- 칩 검증을 위한 도구 구축부터, 테스트 프로그램을 실행하고, 진단 및 기타 여러가지를 하려면 많은 노력이 많이 필요.
- 이게 요즘 ARM을 사용하는 가치의 일부. 큰 에코시스템이 있기때문에 디자인을 검증하고 테스트가 가능

- 그래서, 자신만의 명령어셋을 가지는 것은 좋은 생각이 아님
- RISC-V에는 여러회사에서 도구를 만들수 있는 표준이 있고, 에코시스템이 생겨서 여러 회사가 부담을 공유할수 있음

- 이미 있는 ARM을 사용하지 않는 이유는? ARM은 범용 목적 CPU로 만들어 져서, 큰 고정 명령어세트를 가짐
- 고객의 요청과 RISC-V 와의 경쟁때문에 ARM도 2019년에 확장용 명령어 세트를 공개했음
- 하지만 여전한 문제는 처음부터 이를 위해 설계된것이 아니라는 것
ㅤ→ 전체 ARM 툴체인은 대형 ARM 명령어 세트를 구현했다고 가정
ㅤ→ 하지만 보조프로세서는 큰 명령집합을 원하거나 필요로 하지 않음
ㅤ→ 보조프로세서는 확장기능이 있는 최소 고정 기본 명령어 세트라는 아이디어 기반으로 구축된 도구의 에코시스템을 원함

- 이게 왜 유익한지는 Nvidia 의 RISC-V 사용에서 인사이트를 얻을수 있음
ㅤ→ 대형 GPU는 컨트롤러로 사용할 일종의 범용 CPU를 필요로 함
ㅤ→ FALCON : FAst Logic CONtroller 라는 칩을 만들어서 사용
ㅤ→ 저비용 고효율

- RISC-V는 작고 간단한 명령어 세트를 가지고 있기때문에 ARM을 비롯한 모든 경쟁제품을 능가
- Nvidia는 RISC-V 를 선택함으로서 더 작은칩을 최소화된 전력으로 가능하게 만듦
- 확장 메커니즘을 사용하면 필요한 작업에 맞는 명령만 추가가 가능

[ ARM은 새로운 x86이 될 것 ]
- 아이러니컬 하게도 Mac 과 PC 가 ARM으로 구동되는 미래를 볼수 있을 것
- 그러나 그 주변의 커스텀 하드웨어들은 RISC-V로 지배된 보조프로세서들이 차지할 것
- 보조프로세서가 대중화 되면서, SoC 위에는 ARM보다 RISC-V 칩들이 더 많아 질 것
- 미래는 ARM or RISC-V 가 아니라, ARM and RISC-V 가 될 것

[ ARM 은 RISC-V 보조프로세서 군단을 지휘하게 될 것 ]
- 범용 ARM 프로세서는 그래픽,암호화,비디오 압축,머신 러닝,신호처리를 담당할 RISC-V 보조프로세서 군대와 함께 중심에 있게 될 것
- UC Berkeley 의 David Patterson 교수와 그의 팀은 이러한 미래가 다가오는 것을 보고, RISC-V 를 그거에 잘 맞게 조정 했음
- 모든 종류의 특수 하드웨어 및 마이크로 컨트롤러들이 RISC-V에 큰 관심을 보이고 있으며, 오늘날 ARM이 지배하는 많은 영역이 RISC-V가 될 것

[ RISC-V를 메인 CPU로 사용하면 안될까 ? ]
- 많은 사람들이 ARM을 RISC-V 로 완전히 교체하는 것은 어떤가함
- 혹자는 RISC-V의 너무도 간단한 명령어 셋이 ARM과 x86이 주는 고성능을 제공 못할 것이라고 함

- 하지만 RISC-V를 충분히 메인프로세서로 사용 가능하고, 성능은 문제가 되지 않음
ㅤ→ 다만, ARM 처럼 고성능 RISC-V를 만들사람이 필요함
ㅤ→ 즉, 가능은 하지만 모멘텀이의 문제라는 것. MacOS와 Windows가 이미 ARM에서 실행이 되고 있음
ㅤ→ 단기적으로 MS나 Apple이 또 다른 하드웨어 전환을 위한 노력을 하지는 않을 것임

재밌네요. 좋은 요약 감사합니다.
이제 학교에서도 x86이나 amd64가 아니라 arm 이나 risc-v를 기준으로 아키텍쳐 수업을 하는 날이 오겠군요..

예전에 ARM 출신 엔지니어가 RISC-V를 비판한 내용이 여기에 올라온 적이 있었죠.
https://news.hada.io/topic?id=3137

위 내용대로라면 RISC-V를 채택한 칩의 다양성이 높아지는 것은 의도된 것이겠군요.

점점 흥미진진해 지네요.
Intel과 AMD의 대응이 궁금해 집니다.

중국이 RISC-V에 거의 올인하다시피 하는 걸로 알고 있는데.. 정말 미래가 어떻게 될지 상상도 안되네요

저도 중국 생각이 들더군요. 미국의 견제를 계속 받는 화웨이가 앞에 나서서 메인 CPU로 만들어보면 어찌 되려나요 ㅎ

하웨이는 ARM 뿐만 아니라 TSMC를 못 쓰는 상황이라 어차피 고성능 CPU 개발 자체가 망했다고 봐도 될 거 같습니다. 그나마 성능을 덜 요구하는 자사의 네트워크장비라면 모를까요.

근데 다른 많은 업체들이 RISC-V 를 쓰고 있기 때문에 이 회사들에게서 성과가 나올 듯 합니다.

아 TSMC 자체가 막힌거를 생각못했네요. SMIC가 7나노를 넘어서 5나노 까지 공정을 만들지 않는한 어렵긴 할듯

이 분 정말 글 잘쓰네요. 이것도 재미나게 읽었습니다.
RISC-V 가 또 다른 대안이 될것이라는 예상들은 많았는데,
이런식으로 보조프로세서용으로는 최고의 칩이 될수 있겠다는 관점으로는 생각을 못해봤습니다.