Skip to main content
QUICK REVIEW

[论文解读] Is Rust C++-fast? Benchmarking System Languages on Everyday Routines

Nikolay Ivanov|arXiv (Cornell University)|Sep 19, 2022
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>)。
  • 对每个输入大小(25至1,000,步长为25)进行10,000次重复测量,计算平均排序时间,排除随机数生成时间的影响。
  • 在多种配置下测量性能:C++使用-O2优化,Rust使用--release标志进行优化和非优化构建。
  • 在相同硬件和系统负载下,对两种语言中的哈希表和平衡二叉树进行字典操作(插入和删除)的基准测试。
  • 使用单台高端机器(AMD Ryzen Threadripper 2950x,72GB内存,Ubuntu 20.04)以最小化环境变量影响。
  • 收集并分析16种混合排序配置(K = 16至512)和8组字典操作对比的性能数据,通过性能图表可视化结果。

实验结果

研究问题

  • RQ1在何种输入大小下,Rust和C++中的归并排序开始优于插入排序?这一临界点如何受优化级别影响?
  • RQ2Rust和C++中混合排序的最优阈值大小K是多少?两种语言之间的差异为何?
  • RQ3在同等优化条件下,Rust是否在归并排序中优于C++?若是,优势有多大?
  • RQ4在Rust和C++中,哈希表与平衡二叉树操作在插入和删除性能上表现如何?
  • RQ5C++在字典操作中多大程度上优于Rust?这是由于编译器优化还是语言层面的设计所致?

主要发现

  • Rust在归并排序中表现优于C++,其优化后的实现版本在所有输入大小下均比优化后的C++版本执行更快。
  • C++在插入排序中表现优于Rust,性能差距在所有输入大小和优化级别下保持一致。
  • 混合排序的最优阈值大小K在C++中为128,在Rust中为16,表明两种语言在性能特性上存在显著差异。
  • 混合排序在两种语言中均优于纯归并排序和插入排序,且C++中的性能提升幅度远大于Rust。
  • C++优化后的混合排序实现始终快于Rust对应版本,确认C++在底层性能调优方面具有优势。
  • C++中哈希表和二叉树操作(插入和删除)的实现始终快于Rust对应版本,且C++中删除操作快于插入操作,而Rust中两者性能相近。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。