首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证与旧的Intel处理器的兼容性

验证与旧的Intel处理器的兼容性
EN

Stack Overflow用户
提问于 2015-09-29 19:37:26
回答 1查看 140关注 0票数 3

我有一个应用程序,目的是针对一个广泛的英特尔处理器家族,从仿古(奔腾,奔腾II)到现代(哈斯韦尔,Skylake)。它具有为x86指令集(SSE、AVX等)的各种扩展量身定制的特定代码路径。但是,我只能访问可以追溯到Sandy的计算机,并且无法验证应用程序实际上将运行在支持的最老的体系结构上。诚然,旧的CPU不太可能用于任何目的,但从代码质量的角度来看,最好知道名为my_routine_sse2的函数不会意外地使用来自SSE3之类的指令。

面对这种问题,人们通常会采取什么方法?是否有自动工具可以扫描功能并确保不存在非法指令?是否有服务(web或其他服务)为测试和调试提供对旧的计算机体系结构的访问?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 12:12:28

进行可以在bochs下运行的单元测试,测试所有的my_routine_sse2等函数。

您仍然需要偶尔测试整个应用程序,以确保您没有搞砸CPU调度程序,或者在由调度程序控制的功能之外包含一些非基线指令。

顺便说一句,函数指针非常适合CPU调度。启动时,检查CPUID并设置一些函数指针.稍后,函数通过函数指针调用,以获取dispatcher为该主机选择的函数的任何版本。然后,您不需要在任何地方都有一个条件分支树,您想要使用一个具有优化版本的函数。x264 (开源h.264视频编码器)将这种技术用于广泛的asm例程集合。

您是对的,您的sse2函数不应该超出sse2,但是如果您在SSE2上设置了基线,您可以在任何地方使用它而不进行检查。自动矢量化有时会做一些好事。如果您使用浮点,您可以让gcc使用不同的ABI,其中浮动/双在SSE寄存器中传递/返回,而不是x87。(或者可能还在堆栈上传递,就像过时的32位x86 ABI中的其他东西一样。)

在过去的10年里,所有CPU都可以运行64位代码,尽管有些人在较新的CPU上有32位Windows。不幸的是,通常仍然需要为具有遗留系统的人提供32位构建。

不过,SSE2可能是基线的合理选择。您可以排除的最新CPU是在第一个AthlonXP内核之前的AMD AMD64 k8 CPU。

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

https://stackoverflow.com/questions/32852386

复制
相关文章

相似问题

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