Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

浮点解析基准:常规 Visual Studio、ClangCL 和 Linux GCC

Posted on 2023-03-04

肖像2018facebook.jpg

Windows 用户在 C++ 编程方面有多种选择。您可以选择坚持使用常规的 Visual Studio。如果您愿意,Microsoft 提供了 ClangCL,它将 LLVM 编译器(通常由 Apple 使用)与 Visual Studio 后端结合在一起。此外,在 Windows 下,您可以使用Windows Subsystem for Linux轻松地为 Linux 构建软件。

程序员经常需要将字符串(例如 312.11)转换为二进制浮点数。在进行数据科学时,这是一项常见的任务。

我写了一小组基准程序来测量速度。为了运行,我使用最新的 Visual Studio (2022) 和最新的 ClangCL 组件,以及最新版本的 CMake。

在您的机器上下载后,您可以使用 CMake 构建它。在 Linux 下,你可以这样做:

 cmake -B 构建 && cmake --build 构建  
   

然后你可以像这样执行:

 ./build/benchmarks/benchmark -f data/canada.txt  
   

Microsoft Visual Studio 用法类似,只是您必须指定构建类型(例如,Release):

 cmake -B build && cmake --build build --config 发布  
   

对于 ClangCL,它几乎相同,除了您需要添加-T ClangCL :

 cmake -B build -T ClangCL && cmake --build build --config 发布  
   

在 Windows 下,二进制文件不是在build/benchmarks/benchmark中生成的,而是在build/benchmarks/Release/benchmark.exe中生成的,但命令在其他方面是相同的。我使用与发布版本对应的默认 CMake 标志。

我在配备Tiger Lake 英特尔处理器(i7-11370 @ 3.3 GHz) 的笔记本电脑上运行基准测试。它不是基准测试的理想机器,因此我在速度测量中指出了误差范围。

在其他库中,我的基准测试对fast_float 库进行了测试:它是用于浮点数和双精度数的 C++17 from_chars函数的实现。 Microsoft 有自己的此功能实现,我将其包含在组合中。

当我切换系统或编译器时,我的基准测试代码保持不变(在 C++ 中):我只是重新编译它。

Visual Studio std::from_chars 87 MB/秒(+/- 20 %)
Visual Studio 快速浮动 285 MB/秒(+/- 24 %)
ClangCL fast_float 460 MB/秒(+/- 36 %)
Linux GCC11 fast_float 1060 MB/秒(+/- 28 %)

我们可以观察到性能差异很大。所有测试都在同一台机器上运行。 Linux 构建在适用于 Linux 的 Windows 子系统下运行,您不希望子系统运行计算比 Windows 本身更快。基准测试不涉及磁盘访问。基准测试没有分配新内存。

这不是我第一次注意到Visual Studio 编译器提供令人失望的性能。我还没有读到一个很好的解释为什么会这样。有些人责怪内联,但我还没有发现 Visual Studio 的发布版本内联很差的情况。

我不排除方法论问题,但我几乎系统地发现在进行 C++ 微基准测试时,Visual Studio 下的性能较低,尽管使用了不同的基准测试方法和库(例如,Google Benchmark)。这意味着如果存在方法论问题,那么它比单纯的编程错字更深。

原文: https://lemire.me/blog/2023/03/03/float-parsing-benchmark-regular-visual-studio-clangcl-and-linux-gcc/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme