2026년 Rust SIMD 현황: Fearless SIMD 메인테이너가 정리한 생태계와 x86 분기 문제
- Fearless SIMD 메인테이너가 된 저자가 2026년 Rust SIMD 생태계를 정리했고, 이해충돌을 피하려고 std::simd, wide, pulp, macerator 저자들에게 초안 리뷰를 받음
- SIMD는 한 명령으로 여러 데이터를 처리하는 방식이며, 최신 x86 칩은 최대 512비트 벡터를 지원해 f64 8배, u8 64배의 이론 속도를 냄
- x86_64는 기본이 SSE2라 AVX2 이상을 쓰려면 함수 멀티버저닝으로 실행 시점에 CPU 기능을 확인해야 하고, 자체 서버 전용이면 RUSTFLAGS='-C target-cpu=x86-64-v3'로 컴파일함
- 64비트 ARM은 NEON이 필수라 같은 분기 문제가 없지만, WebAssembly는 SIMD 포함과 미포함 두 바이너리를 만들어 JavaScript로 갈라짐
- SIMD 사용법은 자동 벡터화, 이식성 SIMD 추상화, 플랫폼별 인트린직 세 가지이며, 자동 벡터화는 의존성이 없고 모든 명령어셋을 지원하지만 함수가 커질수록 실패 확률이 오르고 컴파일러 버전에 따라 성능이 크게 흔들림
Hacker News opinions
이식성 있는 SIMD 같은 건 없음. 성능을 원하면 플랫폼마다 수동으로 짜야 하고, 이식성을 원하면 성능을 포기해야 함. 소위 '포터블 SIMD' 라이브러리가 주는 건 이식성 있는 자동 벡터화일 뿐이고, 마이크로벤치만 잘 나옴.
JIT 컴파일러가 있는 언어에서는 가능하지 않나. 런타임에 CPU 보고 코드 생성하면 되니까.
numpy, numba, torch.compile은 어떻게 설명할 건데?
수동 인트린직으로 이론상 8배 뽑는 건 대부분 프로그램에서 애초에 안 일어남. 그러면 비교 대상은 스칼라 코드나 자동 벡터화 코드인데, 합리적인 SIMD 라이브러리로 내부 루프에서 2배든 4배든 뽑는 게 훨씬 낫지.
연속선상의 문제임. 4xf32 두 개 더하는 건 어디서나 이식 가능하게 짤 수 있음. 근데 그 정도 수준이면 그냥 비이식으로 가는 게 맞고. SVE나 RVV를 어셈블리 없이 다룬 사례가 있긴 한가?
자동 벡터화가 믿을 게 못 된다는 건 나도 동의함. 그래도 128, 256, 512비트 폭을 추상화해서 부동소수점 연산을 4~16배 빠르게 하는 건 충분히 가능하고, 그게 SIMD의 목표로 좋다고 봄.
과장이 좀 심한데. 자동 벡터화와 Fearless SIMD 같은 라이브러리의 이식성 프리미티브 사이엔 큰 간격이 있음. 자동 벡터화가 select나 swizzle을 해주는 걸 본 적이 없음. Fearless SIMD는 downcasting으로 특정 마이크로아키텍처에 특화하는 것도 지원함.
이식 가능한 코드 자체가 없다는 말이랑 같은 논리 아님? 결과가 최적은 아니어도 없는 것보단 나음.
x86과 ARM의 SIMD가 더 넓어지면 이 문제가 진짜 커질 거임.
ISPC가 꽤 근접함. 한번 봐봐.
난 lin_alg라는 내 라이브러리 쓰는데 core_simd를 흉내 내서 벡터랑 쿼터니언까지 확장했음. core::simd가 안정화되면 부동소수점 부분은 교체할 예정이고, 지금은 x86 전용이라는 게 단점.
포터블 SIMD 간절히 바라지만 수동으로 짠 게 더 빠를 거라 봄. Cranelift의 SIMD 지원은 아직 WIP고 128비트 벡터 일부만 됨. 내 실력으론 수동 인트린직으로 성능 뽑기가 어려우니, 복잡한 루프에서 자동 벡터화가 깨질 때 포터블 SIMD가 더 낫겠다는 생각임.
AArch64는 베이스라인이 x86-64보다 훨씬 낫지만 Crypto 확장이나 최신 dot product 명령처럼 상황에 따라 중요한 선택 확장이 있음. 문제는 ARM에 CPUID 같은 게 없고 어떤 인트린직이 어떤 FEAT_* 플래그를 요구하는지 문서가 형편없음. Apple M1 실행 특성은 리버스 엔지니어링으로 알아냈고 Oryon은 자료가 아예 없음.
이번이 마지막 x86-64 CPU이길 바람. AVX-512는 데스크톱에 풀지 말았어야 함. 언젠가 Neoverse 개발 머신으로 넘어갈 거고, Cortex-M도 타깃이라 문서 부족 문제는 똑같이 겪음.
게임은 요구사항을 5세대 전으로 잡으니까 AVX2를 무조건 써도 됨. CachyOS나 Clear처럼 아키텍처 레벨별로 세계를 다시 빌드해서 변형판으로 배포하는 배포판도 있음. 그것도 남에게 주는 바이너리로 봐야 함.