gpt4 book ai didi

c - 计算距离平方的最快方法

转载 作者:太空狗 更新时间:2023-10-29 16:35:14 24 4
gpt4 key购买 nike

我的代码在很大程度上依赖于计算 3D 空间中两点之间的距离。为了避免昂贵的平方根,我始终使用平方距离。但它仍然占用了大部分计算时间,我想用更快的东西替换我的简单函数。我现在有:

double distance_squared(double *a, double *b)
{
double dx = a[0] - b[0];
double dy = a[1] - b[1];
double dz = a[2] - b[2];

return dx*dx + dy*dy + dz*dz;
}

我也尝试过使用宏来避免函数调用,但效果不大。

#define DISTANCE_SQUARED(a, b) ((a)[0]-(b)[0])*((a)[0]-(b)[0]) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + ((a)[2]-(b)[2])*((a)[2]-(b)[2])

我考虑过使用 SIMD 指令,但找不到很好的示例或完整的指令列表(最好是在两个 vector 上进行乘法+加法)。

GPU 不是一个选项,因为每次函数调用时只有一组点是已知的。

计算距离平方的最快方法是什么?

最佳答案

一个好的编译器会尽可能优化它。一个好的编译器会使用 SIMD 指令,如果它认为它们是有益的。确保为编译器启用所有此类可能的优化。不幸的是,3 维 vector 不太适合 SIMD 单元。

我怀疑您将不得不接受编译器生成的代码可能非常接近最佳,并且无法取得显着的 yield 。

关于c - 计算距离平方的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com