如果您使用 Microsoft 工具在 C++ 中编程,则可以使用传统的 Visual Studio 编译器。或者您可以使用 LLVM 作为前端 (ClangCL)。
让我们将它们的性能特征与快速字符串转码库 ( simdutf ) 进行比较。我使用最新的 Visual Studio (2022) 和最新的 ClangCL 组件(基于 LLVM 15)。为了构建库,我们使用最新版本的 CMake。我将放弃并行构建:我使用默认设置。在硬件方面,我使用Microsoft Surface Laptop Studio :它有一个Tiger Lake Intel 处理器(i7-11370 @ 3.3 GHz)。
从 GitHub 获取 simdutf 库后,我准备了标准 Visual Studio 的构建目录:
> cmake -B buildvc
我为 ClangCL 做同样的事情:
> cmake -B buildclangcl -T ClangCL
对于每个构建目录,我可以使用以下命令在调试模式 ( --config Debug ) 或发布模式 ( --config Release ) 中构建
> cmake --build buildvc --config 调试
该项目默认构建了一个广泛的测试套件。我经常依赖我的 Apple macbook,并且我使用 Amazon (AWS) 节点构建了很多软件。我使用 AWS c6i.large 节点(Intel Icelake 运行频率为 3.5 GHz,2 个 vCPU)。
simdutf 库及其测试套件在合理的时间内构建,如下表(发布构建)所示。为了进行比较,我还在 Microsoft 笔记本电脑(适用于 Linux 的 Windows 子系统)上使用“WSL”构建了库。
苹果电脑空气 | ARM M2 处理器 | LLVM 14 | 25 秒 |
AWS/Linux | 英特尔冰湖处理器 | 海湾合作委员会 11 | 54 秒 |
AWS/Linux | 英特尔冰湖处理器 | LLVM 14 | 54 秒 |
WSL(微软笔记本电脑) | 英特尔 Rocket Lake 处理器 | 海湾合作委员会 11 | 3 分 40 秒 |
WSL(微软笔记本电脑) | 英特尔 Rocket Lake 处理器 | LLVM 14 | 3 分 15 秒 |
在 Intel 处理器上,我们构建了多个内核来支持各种处理器系列。在 64 位 ARM 处理器上,我们只构建一个内核。因此AWS/Linux系统和macbook的性能有些可比性。我的 Microsoft Surface 笔记本电脑在 Linux 模式下速度较慢。
让我们切换回 Windows 并构建库。
调试 | 发布 | |
---|---|---|
Visual Studio(默认) | 2分钟 | 2 分 15 秒 |
ClangCL | 2 分 51 秒 | 3 分 12 秒 |
让我们运行一个执行基准。我们选择一个UTF-8 阿拉伯语文件,将其加载到内存中,然后使用快速 AVX-512 算法将其转码为 UTF-16。 (确切的命令是benchmark -P convert_utf8_to_utf16+icelake -F Arabic-Lipsum.utf8.txt )。
调试 | 发布 | |
---|---|---|
Visual Studio(默认) | 0.789 GB/秒 | 4.2GB/秒 |
ClangCL | 0.360 GB/秒 | 5.9 GB/秒 |
WSL 海湾合作委员会 11 | (略) | 6.3GB/秒 |
WSL LLVM 14 | (略) | 5.9 GB/秒 |
AWS 服务器 (海湾合作委员会) | (略) | 8.2GB/秒 |
AWS 服务器 (clang) | (略) | 7.7 GB/秒 |
我得出以下初步结论:
- 调试代码和发布代码之间可能存在显着的性能差异(例如,5 倍到 15 倍的差异)。
- 使用 ClangCL 编译 Windows 软件可能会带来更好的性能(在发布模式下)。在我的测试中,我使用 ClangCL 获得了 40% 的加速。但是,使用 ClangCL 进行编译需要更长的时间。我已经推荐 Windows 用户使用 ClangCL 构建他们的库,并且我坚持这个建议。
- 在调试模式下,常规 Visual Studio 生成的代码性能更高,编译速度比 ClangCL 更快。
因此,在调试模式下使用常规 Visual Studio 编译器可能是有意义的,因为它可以快速构建并在测试代码时提供其他好处,然后在发布模式下使用 ClangCL 以提高性能。
尽管“Microsoft Surface Laptop Studio”拥有出色的 CPU,可与最好的 AWS 节点提供的性能相媲美。我不确定为什么在 Microsoft 笔记本电脑上构建代码比在云中花费那么多时间。笔记本电脑很贵,它有一个很好的 CPU。该驱动器不是顶级驱动器,但获得了好评。我很困惑。
原文: https://lemire.me/blog/2023/02/27/visual-studio-versus-clangcl/