首个 GCC 16 正式版发布:默认开启 C++20,支持英特尔 Nova Lake 与 AMD Zen 6

GCC 16.1 于 4 月 30 日发布,作为 GCC 16 系列首个稳定版。此次默认 C++ 前端语言标准从 GNU C++17 切换为 GNU C++20,且 C++20 运行库 libstdc++ 相关组件不再为实验性;同时对多项 C++26 特性提供实验性支持并增强了矢量化与底层性能优化。新增实验性 Algol 68 前端 ga68;诊断输出新增实验性 HTML 格式并将 SARIF 作为机器可读诊断的推荐格式(旧版 JSON 诊断被移除)。硬件与平台支持方面,加入对 AMD Zen6、Intel Wildcat Lake 与 Nova Lake 的选项,x86-64 在启用 AVX512 时尝试使用掩码向量化以优化代码,OpenMP/OpenACC 对 AMD Instinct MI300 的启动开销下降,LoongArch 增加通过 target_clones 的函数多版本支持等改进。

5 月 3 日消息,作为 GNU 编译器套件(GCC)16 系列的首个稳定版,GCC 16.1 已于当地时间 4 月 30 日正式发布,标志着该编译器进入了全新的里程碑。

本次更新最显著的变化是 C++ 前端默认语言标准从原来的 GNU C17 切换为 GNU C20,这意味着开发者在不手动指定标准的情况下,将默认使用 C20 规范。此外,GCC 16 现已将 C20 运行库(libstdc++)相关组件标记为非实验性,整体稳定性大幅提升。

在 C++ 语言特性方面,GCC 16.1 引入了对多项 C++26 功能的实验性支持。在底层性能与矢量化(Vectorizer)方面,GCC 16 展现了更强的灵活性。

本次发布还新增了一个实验性的 Algol 68 编译器前端 ga68。根据 GCC 项目组的说明,该前端旨在实现《修订报告》(Revised Report)中所描述的 Algol 68 语言,包括经 IFIP WG2.1 下属 Algol 68 支持小组批准的勘误内容,同时实现了部分 GNU 扩展和一套 POSIX 预定义环境。

编译器诊断功能迎来多项改进。GCC 16.1 现已支持以实验性 HTML 格式输出诊断信息,SARIF 输出中新增了控制流信息。旧版的 JSON 诊断格式已被移除,官方推荐需要机器可读诊断输出的用户改用 SARIF 格式。

在硬件支持方面,x86 架构新增了针对 AMD Zen6 的支持,同时加入了 Intel Wildcat Lake 和 Nova Lake 的编译选项。

对于 x86-64 平台,新版本在开启 AVX512 支持时,会自动尝试使用掩码矢量余弦(Epilog)来优化代码大小与性能。而在 GPU 卸载计算方面,OpenMP 与 OpenACC 针对 AMD Instinct MI300 等设备的启动开销也得到了大幅缩减。

另外,GCC 16.1 还为龙芯 LoongArch 架构新增了函数多版本技术(Function Multi-Versioning)支持,可通过 target_clones 属性为不同 CPU 特性(IT之家注:如 LSX、LASX)生成多个函数版本,并在运行时自动选择最优版本。

参考资料:

  • 《GCC 16 Release Series — Changes, New Features, and Fixes- GNU Project》

版权声明:本站文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

评论加载中...