我从14岁开始阅读游戏引擎书籍(当时我什么也不懂:P)。现在已经过了好多年,我想开始为我的游戏引擎编写数学基础。我已经长时间考虑如何设计这个“库”(我指的是“有组织的文件集”)。每隔几年就会出现新的SIMD指令集,我不想让它们浪费掉。(如果我对此有误,请告诉我。)
我希望至少具备以下特性:
- 能够在运行时检查是否具有SIMD,并在具有SIMD时使用SIMD,在没有时使用正常的C++版本。(可能会有一些调用开销,这值得吗?) - 如果我们已知目标在编译时能够编译为SIMD或正常的C++。调用可以被内联并适用于交叉优化,因为编译器知道是否使用了SIMD或C++。
编辑-我想使源代码可移植,以便在除x86(-64)之外的其他设备上运行。
因此,我认为使用函数指针会是一个好的解决方案,我会将其设置为静态并在程序开始时进行初始化。适当的函数(例如矩阵/向量的乘法)将调用它们。
你认为这种设计的优缺点是什么(哪个更重要?)?是否可能创建具有上述两个属性的函数指针?
我希望至少具备以下特性:
- 能够在运行时检查是否具有SIMD,并在具有SIMD时使用SIMD,在没有时使用正常的C++版本。(可能会有一些调用开销,这值得吗?) - 如果我们已知目标在编译时能够编译为SIMD或正常的C++。调用可以被内联并适用于交叉优化,因为编译器知道是否使用了SIMD或C++。
编辑-我想使源代码可移植,以便在除x86(-64)之外的其他设备上运行。
因此,我认为使用函数指针会是一个好的解决方案,我会将其设置为静态并在程序开始时进行初始化。适当的函数(例如矩阵/向量的乘法)将调用它们。
你认为这种设计的优缺点是什么(哪个更重要?)?是否可能创建具有上述两个属性的函数指针?