GCC与Clang生成Intel DL Boost bfloat16指令的编译选项是什么?
问题:如何让GCC/Clang生成Intel DL Boost的bfloat16硬件指令?
测试代码
#include <stdfloat> std::bfloat16_t foo(std::float32_t f) { return f; }
当前GCC生成的汇编(软件实现)
foo(_Float32): sub rsp, 8 call __truncsfbf2 add rsp, 8 ret
其中call __truncsfbf2对应libgcc中的软件实现(libgcc/soft-fp/truncsfbf2.c)。
背景信息
- bfloat16指令是Intel DL Boost技术的组成部分
- DL Boost特性首次在Cascade Lake架构中推出
问题描述
针对Cascade Lake架构编译时,预期生成Intel DL Boost的VCVT...系列bfloat16硬件指令,但已尝试添加-march=cascadelake选项后,GCC仍生成软件实现的调用。需要明确GCC和Clang分别需要设置哪些选项才能生成硬件指令。
GCC 所需编译选项
除了指定目标架构-march=cascadelake,还需添加**-mfloat16-hardware**选项,该选项会启用硬件加速的bfloat16指令生成,前提是目标架构支持DL Boost(Cascade Lake及以上)。
完整编译命令示例:
g++ -march=cascadelake -mfloat16-hardware your_code.cpp
注意:
-mfloat16-hardware选项仅在GCC 11及以上版本支持,若使用旧版GCC需先升级编译器。
Clang 所需编译选项
Clang在指定支持DL Boost的架构时会自动启用bfloat16硬件指令生成,直接使用:
clang++ -march=cascadelake your_code.cpp
若需显式控制,也可配合-mavx512bf16选项(DL Boost的bfloat16指令属于AVX512BF16扩展):
clang++ -march=cascadelake -mavx512bf16 your_code.cpp
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

