RISC-V는 왜 "더 잘 알았어야 했다"는 말을 들었나
RISC-V 이야기를 꺼내면 대부분 좋은 말만 나옵니다. 로열티가 없고, 누구나 만들 수 있고, ARM 대신 쓸 수 있다는 식이죠. 그런데 임베디드 바닥에서 오래 굴러본 사람들 이야기를 들어보면 평가가 꽤 다릅니다. 그중 제일 날이 선 표현이 “They Should Have Known Better”, 그러니까 “그들은 더 잘 알았어야 했다"입니다. 학계가 만든 깔끔한 설계가 현실의 칩에 내려앉으면 어떤 청구서가 날아오는가, 그런 이야기입니다.
먼저 하나 밝혀둡니다. 이 주제로 최근 30일치 커뮤니티 데이터를 훑었는데 새로 잡힌 스레드가 거의 없었습니다. 그래서 실시간 여론 정리 대신, 몇 년째 같은 자리에서 반복되는 기술적 쟁점을 짚는 쪽으로 씁니다. 어차피 논점은 시간이 지나도 잘 안 변합니다.
“우아함"은 공짜가 아니었다
RISC-V의 설계 철학은 단순합니다. 명령어 집합을 최소한으로 유지하고 나머지는 확장으로 붙인다. 교과서로 보면 아름답습니다. 실제로 대학에서 컴퓨터 구조를 가르칠 때 RISC-V만큼 편한 ISA도 드뭅니다.
문제는 그 철학이 어디서 나왔느냐입니다. RISC-V의 기본 정수 명령어 집합인 RV32I는 명령어가 40여 개뿐입니다. 곱셈도 나눗셈도 원자적 연산도 없습니다. 전부 별도 확장입니다. 교육용 프로세서를 만들 때야 축복이지만, 실제 제품을 만드는 쪽에서는 “그래서 내가 쓸 칩엔 뭐가 들어있는데?“를 매번 물어야 한다는 뜻입니다.
Dmitry Grinberg 같은 베테랑 임베디드 해커들이 찌르는 지점이 여기입니다. 8비트 마이크로컨트롤러부터 ARM까지 온갖 아키텍처를 직접 만져본 사람들이고, 리눅스를 8비트 AVR에서 돌려보는 부류죠. 이런 사람 눈에 RISC-V는 이론적 순수성을 지키려고 실무자의 편의를 계속 깎아낸 설계로 보입니다.
코드 밀도라는 눈에 안 보이는 비용
제일 자주 나오는 구체적 비판은 코드 밀도입니다. 같은 프로그램을 컴파일했을 때 바이너리가 얼마나 커지느냐 하는 이야기죠.
RISC-V는 기본적으로 모든 명령어가 32비트 고정 길이입니다. 압축 확장인 C 확장을 켜면 자주 쓰는 명령어를 16비트로 줄일 수 있어서 상당 부분은 만회합니다. 그래도 ARM의 Thumb-2나 x86보다 불리하다는 측정 결과가 꾸준히 나옵니다. 조건부 실행이 없고 주소 계산에 복합 어드레싱 모드가 없어서, 한 줄이면 끝날 일을 명령어 두세 개로 나눠 써야 하는 상황이 자주 생기거든요.
“몇 퍼센트 커지는 게 대수인가” 싶겠지만, 임베디드에서는 대수입니다. 플래시 메모리 용량이 곧 단가니까요. 코드가 10% 커져서 64KB 칩에 안 들어가면 128KB 칩으로 올려야 하고, 백만 대 양산이면 그게 그대로 돈입니다. 명령어 캐시 적중률도 떨어집니다. 캐시가 작은 저전력 코어일수록 아픕니다.
게다가 컴파일러가 나중에 손봐줄 수 있는 문제도 아닙니다. ISA에 없는 명령어는 컴파일러도 만들어내지 못합니다. 설계할 때 정한 건 설계할 때만 되돌릴 수 있습니다.
확장이 난립하면 “RISC-V 칩"이 무슨 뜻이 되나
두 번째 비판은 파편화입니다. 실무자에게는 이쪽이 더 아픕니다.
RISC-V는 기본 명령어 집합 위에 확장을 붙이는 구조입니다. M(곱셈), A(원자적 연산), F/D(부동소수점), C(압축), V(벡터), B(비트 조작)… 여기까지는 표준화가 됐습니다. 문제는 표준 확장이 계속 늘어나는 데다, 그 위에 벤더마다 자체 확장을 얹는다는 겁니다.
그래서 “RISC-V를 지원한다"는 말이 알려주는 정보가 거의 없어졌습니다. A사 RISC-V 코어에 맞춰 짠 최적화 코드가 B사 코어에서 안 돕니다. 툴체인도 갈라집니다. 벤더가 자체 확장을 넣으려고 GCC나 LLVM을 포크하고, 그 포크는 업스트림에 안 올라가고, 몇 년 지나면 유지보수가 끊깁니다. ARM 쪽에서 Cortex-M4라고 하면 뭐가 들어있는지 바로 아는데, RISC-V에서는 데이터시트를 처음부터 읽어야 합니다.
RISC-V International도 프로파일을 도입해 이 문제를 잡으려 합니다. RVA23 같은 프로파일은 “이 프로파일을 따르면 이 확장들은 반드시 있다"고 못 박는 방식입니다. 방향은 맞습니다. 다만 파편화가 이미 한참 진행된 뒤에 나온 처방이라는 게 아쉽죠. 표준이 시장을 뒤따라가는 모양새입니다.
그런데도 왜 다들 RISC-V로 가는가
여기까지만 보면 RISC-V가 곧 망할 것 같습니다. 현실은 반대입니다. 출하량은 계속 늘고, 특히 두 군데서 강합니다.
첫째, 중국입니다. 이유는 기술이 아니라 지정학이고요. ARM 라이선스는 결국 영국과 미국 관할권에 걸립니다. 수출 통제가 실제 리스크가 된 마당에, 라이선스 없이 쓸 수 있는 ISA는 다른 걸로 대체가 안 됩니다. 알리바바의 XuanTie 계열을 비롯해 중국 주요 업체가 RISC-V에 자원을 쏟아붓는 이유죠. 코드 밀도가 몇 퍼센트 나쁜 것과 공급망이 끊기는 것 중 뭐가 더 큰 문제인지는 물어볼 것도 없습니다.
둘째, AI 가속기입니다. 여기서 좀 얄궂어집니다. 방금 비판한 “확장으로 뭐든 붙일 수 있다"는 성질이 AI 칩 설계자에게는 딱 원하던 기능이거든요. 텐서 연산용 커스텀 명령어를 직접 정의해 넣을 수 있고, 라이선스 협상도 필요 없습니다. 가속기 제어 코어로 RISC-V를 쓰는 설계가 늘어나는 배경입니다. 이쪽은 범용 소프트웨어 생태계와 호환될 이유가 애초에 없습니다. 자기 컴파일러로 자기 코드만 돌리면 되니까요.
파편화는 범용 컴퓨팅에서는 독이지만 전용 가속기에서는 오히려 상품입니다. 같은 성질이 시장에 따라 정반대로 평가받습니다.
이 논쟁을 어떻게 읽어야 할까
비판하는 쪽과 채택하는 쪽이 애초에 다른 이야기를 한다고 보는 게 맞습니다.
Grinberg류의 비판은 기술적으로 대체로 맞습니다. 코드 밀도는 실제로 불리하고 파편화는 실제로 비용입니다. 몇몇 설계 결정은 지금 와서 보면 되돌리기 어려운 선택이었고요. “더 잘 알았어야 했다"는 말도 과장이 아닙니다. 이미 쌓여 있던 30년치 CISC/RISC 실무 경험을 들여다봤다면 피할 수 있었던 문제라는 지적이니까요.
그렇다고 RISC-V가 기술이 앞서서 퍼지는 것도 아닙니다. 라이선스 구조와 지정학이 만든 흐름이죠. x86이 우아해서 30년을 지배한 게 아니듯이요. ISA의 승패는 명령어 인코딩보다 그 바깥의 생태계와 힘의 배치가 갈라 왔습니다.
RISC-V는 기술적으로 완벽하지 않고, 그 결함은 지금도 실제 비용을 냅니다. 그리고 그것과 상관없이 계속 퍼질 겁니다. 두 문장 모두 참입니다. 개방형 표준이 시장을 얻으면서 원래 설계 철학이 어디까지 깎이는지는 앞으로 몇 년 안에 답이 나올 겁니다. 다음 프로젝트에서 MCU를 고른다면 로열티 없음과 툴체인 안정성 중 어디에 무게를 두시겠어요?
댓글
댓글을 불러오는 중...