我希望我的配置脚本能够检测各种Unix类系统中POPCNT指令的可用性。现在我做这些测试:
打招呼是独立办案的。你能看到这些问题吗?你知道还有其他的测试吗?
需要根权限的测试是没用的。
发布于 2016-01-14 04:10:56
因此,您有启用-mpopcnt并使用__builtin_popcount的代码,如果这样做很快的话。否则,您使用的是不同的东西,因为您的自定义解决方案胜过gcc的实现?
请记住,在某些情况下,宿主是目标。构建时CPU检测不适合于制造必须在其他机器上运行的二进制文件。例如Linux发行版制作二进制文件。交叉编译也是一件事,并且通常是针对嵌入式系统或旧的慢系统时进行的。
也许可以编写一个自定义C程序来返回您想要的结果。
在x86上,您只需使用运行时CPU检测的结果:运行CPUID指令并检查是否支持popcnt。最好不要无条件地运行popcnt指令,因为运行非法指令的进程会在一些现代发行版(例如Ubuntu)上生成syslog条目。
使用最近的GNU扩展,最简单的方法是:__builtin_cpu_init()和__builtin_cpu_supports("popcnt"),省去了手工解码CPUID结果的麻烦。
然后,您可以根据您的自定义宏返回__builtin_popcount的微基准,并选择哪个更快。即使在非x86体系结构中,宏也可能比gcc的实现更有用。(例如,总是有popcnt指令可用的体系结构)。然后,您必须处理应该使用__builtin_popcount但不使用-mpopcnt构建的情况。
https://stackoverflow.com/questions/34737401
复制相似问题