gpt4 book ai didi

c++ - GCC __builtin_ 函数

转载 作者:太空狗 更新时间:2023-10-29 23:46:08 27 4
gpt4 key购买 nike

以下功能是否在单个时钟周期内执行?

__builtin_popcount
__builtin_ctz
__builtin_clz

同样的 ll(64 位)版本的时钟周期数是多少。它们是可移植的吗?为什么或为什么不?

最佳答案

这些函数是否在单个时钟周期内执行?

不一定。在可以使用单个指令实现它们的体系结构上,它们通常是计算该函数的最快方法(但不一定是单个时钟周期)。在无法作为单个指令实现的架构上,它们的性能不太确定。

在我的处理器(Core 2 Duo)上,__builtin_ctz__builtin_clz 可以用一条指令(位扫描正向和位扫描反向)实现。但是,__builtin_popcount 不能在我的处理器上用一条指令实现。对于 __builtin_popcount,gcc 4.7.2 调用一个库函数,而 clang 3.1 生成一个内联指令序列(实现此 bit twiddling hack )。显然,这两种实现的性能将不同。

它们便携吗?

它们不能跨编译器移植。它们起源于 GCC(据我所知),并且也在其他一些编译器(例如 Clang)中实现。

支持这些功能的编译器可能会为多种架构提供它们,但实现质量(性能)可能会有所不同。

__builtin 此类函数用于以比使用内联汇编更简单的方式访问特定的机器指令。如果您需要实现最高性能并愿意为此牺牲可移植性,或者为未提供这些功能的编译器或平台提供替代实现,那么使用它们是有意义的。如果最佳低级性能是您的目标,您还应该检查编译器的汇编输出,以确定它是否真的生成了您期望它使用的指令。

关于c++ - GCC __builtin_ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517232/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com