1
目前我使用下面的代码来计算两个float3之间的欧氏距离,我从一个Nvidia采样中获取。CUDA - 计算2个float3之间的欧几里得距离的最有效方法是什么?
inline __host__ __device__ float3 operator-(float3 a, float3 b)
{
return make_float3(a.x - b.x, a.y - b.y, a.z - b.z);
}
inline __host__ __device__ float dot(float3 a, float3 b)
{
return a.x * b.x + a.y * b.y + a.z * b.z;
}
inline __host__ __device__ float euclideanDistance(float3 v)
{
return sqrtf(dot(v, v));
}
有没有(也许更低级别)的方式来做到更快?
你真的需要的距离?你能以平方距离工作吗? – talonmies
建立在talonmies暗含的意义上....'sqrtf'将主宰距离的计算时间。 –
请注意,CUDA具有函数'norm3d {f}()',它在计算3-矢量的欧几里得距离时最为合适,因为它们可以确保最大的准确性并避免中间计算中的溢出。如果你需要对矢量进行归一化,那么你应该看看'rnorm3d {f}()'。 – njuffa