【发布时间】:2020-10-20 02:45:56
【问题描述】:
基本上,正如标题所说。我想知道一种计算floor(log2(x / y)) 的方法,其中x 和y 是非零无符号机器整数,在尽可能少的周期内(尽可能避免使用分支、内存带宽、除法等在像这样的一小段代码中很昂贵)。这里需要准确的(整数)答案。我在考虑如何通过有效地计算来优化Adaptive Shivers Sort 的外循环,因为它需要计算floor(log2(r / c)),其中r 是运行长度,c 是算法的元参数;假设x <= y 的解决方案适用于此类离线版本,其中c 被选择为等于输入的长度,但一般解决方案在其他设置中可能有用。
您可以假设使用 PopCount 和 CountLeadingZeros/CountTrailingZeros、常见的 SSE 样式指令,甚至是浮点计算——但它必须是处理器可以在几个周期内完成的事情。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c assembly optimization micro-optimization