通过使用函数指针在游戏引擎数学库中使用 SIMD ~ 好主意吗?

3 c++ function-pointers simd game-engine

我从 14 岁起就开始阅读游戏引擎书籍(当时我什么都不懂:P)现在很多年后我想开始为我的游戏引擎编写数学基础。我一直在思考如何设计这个“图书馆”。(我的意思是“有组织的文件集”)每隔几年就会出现新的 SIMD 指令集,我不希望它们被浪费。(请告诉我我是否错了。)

我希望至少具有以下属性:

  • 使其能够在运行时检查是否有 SIMD,如果有则使用 SIMD,如果没有则使用普通的 C++ 版本。(可能会有一些调用开销,这值得吗?)
  • 如果我们在编译时已经知道目标,则可以针对 SIMD 或普通 C++ 进行编译。这些调用可以内联并适合交叉优化,因为编译器知道是使用 SIMD 还是 C++。

编辑 - 我想让源代码可移植,这样它也可以在其他设备上运行,然后是 x86(-64)

所以我认为使用函数指针是一个很好的解决方案,我将其设置为静态并在程序开始时初始化。以及适合的函数(例如矩阵/向量的乘法)将调用的函数。

您认为这种设计的优点和缺点是什么(哪个更重要?)?是否有可能创建具有上述两种属性的它?

基督教

Pau*_*l R 5

获得正确的粒度来决定调用哪个例程非常重要。如果你在太低的级别上执行此操作,那么函数调度开销就会成为一个问题,例如,如果通过某种函数指针调度机制调用而不是仅仅内联,那么只有几条指令的小例程可能会变得非常低效。理想情况下,特定于体系结构的例程应该处理合理数量的数据,以便函数调度成本可以忽略不计,而不会太大,以至于由于为每个受支持的体系结构编译额外的非特定于体系结构的代码而导致显着的代码膨胀。