LLVM 9.0 已经发布,LLVM 9.0 与 Clang9.0 C/C++
编译器一起发布,该版本的主要亮点内容如下:

翻译自:http://clang.llvm.org/docs/UsersManual.html

LLVM/Clang 6.0 和 5.0 的编译器 Benchmark
测试这次会在四个不同的系统上进行,包括了 Intel/AMD Linux 平台,其中
Intel 和 AMD 各占两个。

  • 支持 ASM Goto,例如,使用 Clang 为 x86_64 构建主线 Linux 内核
  • RISC-V target 不再是实验性,而是默认构建的
  • 对 OpenCL 实验性支持 C++

简介

Clang编译器是C系列编程语言的开源编译器,它的目标是成为它们的最好类实现。LLVM优化器和代码生成器允许构建之上的Clang为许多目标提供高质量的优化和代码生成支持。
更多信息可以参阅Clang网站或澳门新葡萄京官网注册,LLVM网站。

本文介绍了使用Clang作为终端用户的编译器,记录支持的特征,命令行选项等重要注意事项。如果您有兴趣使用Clang构建成处理代码的工具,请参阅“Clang”
CFE Internals
Manual。
如果您对Clang Static
Analyzer感兴趣,请参阅它的网页。

Clang是C系列编程语言的完整工具链中一个组成部分。
单独的文档描述了assemble a complete
toolchain所需的其他部分。

Clang旨在支持包括C,Objective-C,C ++和Objective-C
++以及其他许多方言在内的C系列编程语言。
有关特定于语言的信息,请参阅相应的语言特定部分:

C
Language:
K&R C, ANSI C89, ISO C90, ISO C94 (C89+AMD1), ISO C99 (+TC1, TC2,
TC3).
Objective-C
Language:
ObjC 1, ObjC 2, ObjC 2.1, plus variants depending on base language.
C++
Language
Objective C++
Language
OpenCL C
Language:
v1.0, v1.1, v1.2, v2.0.

除了这些基础语言和方言外,Clang还支持被记录在相应语言中的各种各样语言扩展。
GCC,Microsoft,以及其他主流编译器能兼容这些扩展。同样的,Clang特定功能可以改进这些语言扩展的功能。
Clang驱动和语言功能有意与GNU
GCC编译器兼容,这样就可以直接从GCC迁移到Clang中。
在大多数情况下,代码“只是工作”。
Clang还提供了一个替代驱动程序,clang-cl,旨在与Visual
C ++的cl.exe编译器兼容。

除了语言特定功能之外,Clang还具有多种取决于正在编译的CPU架构或操作系统的功能。
有关详细信息,请参阅Target-Specific Features and
Limitations
部分。

最后介绍了这个手册中使用的一些基本的compiler
terminology,其中包含作为命令行编译器的introduction
to using
Clang

四个系统都运行了 Ubuntu Linux x86_64,Intel 和 AMD
平台分别的配置如下:Intel Core i7 8700K (Coffeelake)、dual Xeon Gold
6138 (Skylake X)、Ryzen 7 1700 (Znver1) 以及 AMD EPYC 7601 (Znver1)。

其他改进包括 AMD Navi 支持、AMDGPU LLVM 编译器后端增强、AMD Zen
2“znver2” 支持和新的 Intel CPU 功能等内容。另外还有许多 bug
修复、优化和诊断改进。 

术语

前端,解析器,后端,预处理器,未定义行为,诊断,优化器

除了默认的 C++14/GNU++14,Clang 6.0 还正式完成了 AMD Zen “znver1”
的程序调度模型,而英特尔方面也对多代 CPU 进行了调度程序的改进。

详情见发布说明:

基本用途

介绍新手如何使用C编译器。

澳门新葡萄京官网注册 1

参与测试的 LLVM 5.0.1 和 LLVM 6.0.0
稳定版都是来自 apt.llvm.org。测试期间,每个系统都将其
CFLAGS/CXXFLAGS 设置为 “-O3 -march=native”。这次编译器 Benchmark
测试使用了开源的 Phoronix Benchmark 测试套件。

(文/开源中国)    

接下来,我们看看测试结果如何:

澳门新葡萄京官网注册 2

从 PolyBench-C Benchmark 测试可以看到,Clang 6.0  在 AMD Zen
系统似乎有明显的回落,而在英特尔平台上,性能没有太大的变动。

澳门新葡萄京官网注册 3

在大多数 benchmark 测试中,Clang 6.0 的表现与 Clang 5.0.1
相比几乎没有什么变化,这里也省略了许多结果。

澳门新葡萄京官网注册 4

使用 Clang 6.0 时,BLAKE2 似乎对英特尔 Skylake/Coffeelake
的设置稍有改进,而对于 Znver1 处理器则保持不变。

澳门新葡萄京官网注册 5

澳门新葡萄京官网注册 6

在一些测试中,我们发现 Core i7 8700K Coffeelake 系统在全新的 Clang
编译器更新中拥有更好的性能。

澳门新葡萄京官网注册 7

在 SciMark2 的 FFT 测试中,i7-8700K 明显是最大的赢家。

澳门新葡萄京官网注册 8

在其他的子测试中,i7-8700K的运行时间更短。在某些情况下,AMD
方面也有一些小幅度的改进。

澳门新葡萄京官网注册 9

TSCP chess benchmark 测试显示,i7-8700K
的速度稍慢,而其他系统则略有改善。

澳门新葡萄京官网注册 10

我们发现,强大的 EPYC 和 Xeon 系统在使用 Clang 6.0 时确实有更快的 John
The Ripper 性能。

澳门新葡萄京官网注册 11

除了 dual Xeon Gold 外,其他系统的 AVX-heavy Himeno
压力求解器的性能都得到了改善。

澳门新葡萄京官网注册 12

澳门新葡萄京官网注册 13

但随着 LLVM 和 Clang 增加更多的优化和功能,在这项测试中,6.0
版本的编译时间显然比在 5.0 版本下显着减慢。

澳门新葡萄京官网注册 14

C-Ray 多线程射线追踪器(ray-tracer) z在 LLVM 6.0 上也变慢。

澳门新葡萄京官网注册 15

澳门新葡萄京官网注册 16

澳门新葡萄京官网注册 17

不过在其他一些测试中,Core i7 8700K 再次显示出 LLVM Clang 6.0
的一些小的性能改进。

可以看到,在使用 Linux x86_64 的流行英特尔和 AMD 平台上,LLVM Clang 5.0
和 6.0 之间的性能只发生了微小的变化。不过随着 LLVM/Clang
在过去的几年里已经成熟了许多,而且现在几乎与 GCC
在很多工作负载上并驾齐驱。

原文:phoronix
编译:开源中国

(文/开源中国)