c++ - 为性能库制作高效包装器的聪明方法

标签 c++ performance numerical-computing

假设,我们有一个外部库可以对 double float 数组进行非常快速的计算(大多数情况下是多线程的)。为方便起见,我以面向对象的方式编写代码,以便获得对象数组。每个对象都有一个包含 double 值的属性。使用强大的外部库的简单方法是这样的:

double temp[N];
for i from 1 to N
   temp[i] = objectArray[i].property;
end

但是,这需要时间和额外的内存来保存 temp 数组。有更好的方法吗?

这是一个一般性的问题,但我基本上想用 C++ 来回答这个问题。

最佳答案

如果您确定您的对象只包含一个double 数据成员,没有添加数据成员的基,也没有virtual 函数——检查一个静态断言sizeof(*objectArray) == sizeof(double) - 并假设您的外部库函数不在线,您可以将外部库 a double* 传递给 objectArray[0].

如果库函数在您包含的 header 中内联,您可能会遇到别名问题,应查阅编译器文档以获取选项。

如果您的 objectArray 元素只是每个double,您 如果这是外部库所期望的,则必须将它们复制到压缩数组中。 (您可能会考虑的一个选择是将 double 值保存在数组中,并让更复杂的对象存储对数组元素的引用)。

关于c++ - 为性能库制作高效包装器的聪明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857871/

相关文章:

c++ - 如何在不完全 boost 的情况下使用 boost.xpressive ?

c++ - 使用 GLFW 一次处理多个键输入

c - 运行时分配的影响超出初始开销

c++ - 通过 C++ 中的另一个结构成员访问结构

c++ - 用GPU计算小于某个值的像素数

performance - 如何在 Julia 中最有效地使用 QR 分解?

函数的计算速度

matlab - 为什么在 MATLAB 中 realmax 减去一些值仍然等于 realmax?

algorithm - 符号与数值数学 - 性能

matlab - 如何将符号包中的符号表达式转换为 Octave 函数?