首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POPCNT指令的可移植测试

POPCNT指令的可移植测试
EN

Stack Overflow用户
提问于 2016-01-12 07:03:31
回答 1查看 994关注 0票数 2

我希望我的配置脚本能够检测各种Unix类系统中POPCNT指令的可用性。现在我做这些测试:

  1. 在/proc/cpuinfo中查找"popcnt“。这适用于Linux和Cygwin。
  2. 在"sysctl -n machdep.cpu.features“的输出中查找"popcnt”。这适用于MACOSX和(未经测试的) BSD,
  3. 在"isainfo -v -x“的输出中查找"popcnt”。这在solaris中是有效的(未经测试的)。

打招呼是独立办案的。你能看到这些问题吗?你知道还有其他的测试吗?

需要根权限的测试是没用的。

EN

回答 1

Stack Overflow用户

发布于 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构建的情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34737401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档