Skip to main content
QUICK REVIEW

[논문 리뷰] Is Rust C++-fast? Benchmarking System Languages on Everyday Routines

Nikolay Ivanov|arXiv (Cornell University)|2022. 09. 19.
Parallel Computing and Optimization Techniques인용 수 6
한 줄 요약

이 논문은 동일한 하드웨어에서 일반적인 시스템 수준 알고리즘과 자료구조—예를 들어 정렬 루틴과 사전 연산—을 Rust와 C++에서 벤치마킹한다. 결과적으로 Rust는 병합 정렬과 하이브리드 정렬에서 C++와 동일하거나 略적으로 뛰어나지만, 삽입 정렬과 사전 연산에서는 C++가 일관되게 Rust를 앞서며, 성능 격차는 컴파일러 최적화와 언어 고유의 런타임 특성에 기인한다.

ABSTRACT

Rust is a relatively new system programming language that has been experiencing a rapid adoption in the past 10 years. Rust incorporates a memory ownership model enforced at a compile time. Since this model involves zero runtime overhead, programs written in Rust are not only memory-safe but also fast, leading to performance comparable to C and C++. Multiple existing benchmarks comparing the performance of Rust with other languages focus on rarely used superficial algorithms, leading to somewhat inconclusive results. In this work, we conduct a comparative performance benchmark of Rust and C++ using commonly used algorithms and data structures rather than exotic ones. Our evaluation shows that the overall performance of Rust is similar to C++, with only minor disadvantage. We also demonstrate that in some Rust routines are slightly faster than the ones of C++.

연구 동기 및 목표

  • 합성적이거나 특수한 벤치마크가 아닌, 일반적으로 사용되는 시스템 프로그래밍 알고리즘과 자료구조에서 Rust와 C++의 성능을 평가하기 위해.
  • Rust가 실제 일상적인 프로그래밍 루틴에서 C++ 수준의 성능을 달성하는지 확인하기 위해.
  • 두 언어 간에 삽입 정렬, 병합 정렬, 하이브리드 정렬 등의 정렬 알고리즘과 해시맵, 균형 이진 탐색 트리 등의 사전 연산 간의 성능 격차를 규명하기 위해.
  • 컴파일러 최적화와 언어 고유의 설계(예: Rust의 소유권 모델)가 런타임 성능에 미치는 영향을 분석하기 위해.

제안 방법

  • C++와 Rust 양쪽 모두 표준 라이브러리 컨테이너(vector<double>와 Vec<f64>)를 사용하여 삽입 정렬, 병합 정렬, 하이브리드 정렬의 의미적으로 동일한 버전을 구현하였다.
  • 입력 크기당 10,000번의 반복 측정을 수행하여 평균 정렬 시간을 계산하였으며, 난수 생성 시간은 측정에서 제외하였다(입력 크기 25에서 1,000까지 25단위 간격).
  • 최적화 및 비최적화 빌드를 각각 C++(-O2 옵션 사용)과 Rust(--release 플래그 사용)로 설정하여 여러 구성에서 성능을 측정하였다.
  • 동일한 하드웨어와 시스템 부하 조건에서 두 언어의 해시맵과 균형 이진 탐색 트리에서의 삽입 및 삭제 연산 성능을 벤치마킹하였다.
  • 환경적 변동성을 최소화하기 위해 고성능 단일 머신(AMD Ryzen Threadripper 2950x, 72GB RAM, Ubuntu 20.04)을 사용하였다.
  • 16개의 하이브리드 정렬 구성(K = 16에서 512까지)과 8개의 사전 연산 비교를 수행하여 성능 데이터를 수집하고 분석하였으며, 결과를 성능 그래프로 시각화하였다.

실험 결과

연구 질문

  • RQ1병합 정렬이 삽입 정렬을 앞서기 시작하는 입력 크기는 Rust와 C++에서 각각 얼마이며, 이는 최적화 수준에 따라 어떻게 달라지는가?
  • RQ2하이브리드 정렬의 최적 임계 크기 K는 Rust와 C++에서 각각 얼마이며, 두 언어 간에 이 값은 어떻게 다를까?
  • RQ3동일한 최적화 조건에서 Rust가 병합 정렬에서 C++를 초월하는가? 만약 그렇다면, 그 성능 향상은 어느 정도인가?
  • RQ4Rust와 C++에서 해시맵과 균형 이진 탐색 트리의 삽입 및 삭제 연산 성능은 어떻게 비교되는가?
  • RQ5C++가 사전 연산에서 Rust를 얼마나 뛰어나게 성능을 내며, 이는 컴파일러 최적화 때문인가, 언어 수준의 설계 때문인가?

주요 결과

  • 최적화된 Rust 구현이 모든 입력 크기에서 최적화된 C++ 버전보다 빠른 실행 시간을 보이며, Rust가 병합 정렬에서 C++를 앞서는 것으로 나타났다.
  • 삽입 정렬에서 C++가 Rust를 항상 앞서며, 입력 크기와 최적화 수준에 관계없이 일관된 성능 격차가 존재한다.
  • 하이브리드 정렬의 최적 임계 크기 K는 C++에서는 128, Rust에서는 16으로, 두 언어 간 성능 특성의 상당한 차이를 보였다.
  • 하이브리드 정렬은 두 언어 모두에서 순수 병합 정렬과 삽입 정렬보다 뛰어난 성능을 보였으며, C++에서의 성능 향상 폭이 Rust보다 뚜렷하게 컸다.
  • 모든 입력 크기에서 C++의 하이브리드 정렬 최적화 구현이 Rust의 해당 구현보다 빠르며, C++가 저수준 성능 튜닝에서 우월함을 확인하였다.
  • C++에서 해시맵과 이진 탐색 트리의 삽입 및 삭제 연산 성능이 Rust의 해당 구현보다 항상 빠르며, C++에서는 삭제가 삽입보다 빠르지만 Rust에서는 두 연산 간 성능이 유사했다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.