本篇介绍一组非常简单却又很常用的数值计算的宏实现。本篇所提到的数值计算问题,相信C语言初学者都能做得出来,但是本篇中给出的例子实现却更注重效率。这些例子实现的最大特点是,消除了逻辑跳转。这样做的好处是避免了分支预测的风险,或者换句话说,可以更好地发挥处理器流水线的性能。由于本篇的问题都很简单,笔者就废话少说,直接看例子了。
/* 高位全0,低N位全1 */
#define Low_N_Bits_One(N) ((1<<N) -1)
/* 高位全1,低N位全0 */
#define Low_N_Bits_Zero(N) (~((1<<N) -1))
/* 低位第N位置1 */
#define Set_Bit_N(NUM, N) (NUM | (1 << (N - 1)))
/* 低位第N位置0 */
#define Clear_Bit_N(NUM, N) (NUM & (~(1 << (N - 1))))
/* 低位第N位反转 */
#define Reverse_Bit_N(NUM, N) ((NUM) ^ (1 << (N - 1)))
/* 上取整 */
#define UpRoun8(Num) (((Num) + 0x7) & (~0x7))
#define UpRoun16(Num) (((Num) + 0xf) & (~0xf))
#define UpRoun32(Num) (((Num) + 0x1f) & (~0x1f))
/* 下取整 */
#define LowRoun8(Num) ((Num) & (~0x7))
#define LowRoun16(Num) ((Num) & (~0xf))
#define LowRoun32(Num) ((Num) & (~0x1f))
/* 求商 */
#define Div8(Num) ((Num)&

本文介绍了C语言中实现高性能数值计算的一些宏技巧,重点在于消除逻辑跳转以提高处理器流水线性能。内容包括常见的数值计算示例,并提及了gcc的内置位操作函数,如__builtin_ffs、__builtin_clz、__builtin_ctz等,用于高效地处理位操作和计数1、0的位数。
最低0.47元/天 解锁文章
2360

被折叠的 条评论
为什么被折叠?



