首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨平台SIMD调用可能只有一个可执行文件?

跨平台SIMD调用可能只有一个可执行文件?
EN

Stack Overflow用户
提问于 2018-06-27 14:47:28
回答 1查看 695关注 0票数 0

我最近对SIMD优化产生了兴趣,因为我想要在C++中重新编程,在没有这么做之后。请,请描述,因为我仍然是一个初学者与SIMD指令。

我的问题是:是否有可能在C++中编译一个跨平台的可执行文件,它支持各种SIMD指令集,并实时选择最佳使用的指令集?在性能方面最好,通常最近的指令集更好。

示例:我用一个i7-7700K在Windows 10上编译了一个游戏,并将它放在Steam上。不同的用户很可能有不同的CPU支持不同的SIMD指令集。在游戏启动时,检测并使用了最佳SIMD指令集。

自然,我将不得不调整我的代码和支持几个手动选择SIMD指令集。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-28 06:35:57

通常问题是您想要使用SIMD的粒度级别.较早的数学库(如D3DXMath )使用间接跳转(即虚拟方法)在运行时选择为该指令集优化的函数的版本。虽然这在理论上是可行的,但函数必须做足够的工作来支付间接调用的开销。

例如:如果调用D3DXVec3Dot,并且它为SSE/SSE 2、SSE3或SSE 4.1选择了不同的版本,那么调用函数的成本一开始就比性能节省更昂贵。要想从这种优化中获得真正的好处,您需要有更大的例程,可以同时执行数千次计算,而不是微型函数。

请注意,这就是为什么DirectXMath是一个完全内联的库,根本不使用间接跳转/分派。您可以指望SSE/SSE 2始终支持x64,而且基本上总是支持x86。如果您正在为始终具有AVX的平台(如Xbox )构建EXE/DLL,则使用/arch:AVX,DirectXMath库将在有意义的地方使用AVX、SSE4.1、SSE3、SSE 2/SSE。见这个博客文章系列

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

https://stackoverflow.com/questions/51065757

复制
相关文章

相似问题

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