GSL:样条之间共享加速器

GSL: Sharing accelerators between splines

我正在使用 GSL 进行大量三次样条插值。假设我有三个自变量 abc,所有这些变量都在相同的物理数据点上制表(它可能是以米、英尺和英里为单位测量的同一组位置),以及两个因变量 yz,列在相同的点。即,函数 y(a)y(b)y(c)z(a)z(b)z(c) 的数据被制成表格。我现在为这些函数制作了 6 个三次样条,如下所示 y(a) 样条:

gsl_interp_accel *acc = gsl_interp_accel_alloc();
gsl_spline *spline = gsl_spline_alloc(gsl_interp_cspline, size);
gsl_spline_init(spline, a, y, size);

其中 sizeay 数组的大小(所有六个数组的大小都相等)。

我的问题:我真的需要为每条样条曲线设置一个单独的加速器吗?这种方式是否更快,跨多个样条共享加速器是否安全?

是的,每个样条曲线都需要一个加速器,而且在多个样条曲线之间使用同一个加速器对您来说绝对不安全。正如您自己已经猜到的那样,我假设加速器是一种预处理,在最好的情况下会减慢给定混合输入的插值。
如果您担心创建加速器并经常释放它们的性能方面,只需保留加速器并在每次使用后重置它们。
编译期间使用 -DHAVE_INLINE=1 取决于二进制文件的大小和影响内存查找的其他因素,这对性能有很大的好处。它将从 header 内联 gsl_interp_accel_find 而不是使用 libgsl 中的编译版本。