C++ 计算点阵列到给定点的距离的最佳方法
使用OpenCV计算点向量与给定点之间的距离 e、 gC++ 计算点阵列到给定点的距离的最佳方法,c++,multithreading,opencv,simd,C++,Multithreading,Opencv,Simd,使用OpenCV计算点向量与给定点之间的距离 e、 g std::向量点位置 cv::Point2f中心 用于(常数自动和点位置) 自动d=cv::标准(中心点); 对于“足够大的数据集”,有哪些更有效的方法和替代方法?什么是合适的多线程方法来计算跨多个处理核心的距离(当使用4个核心而不是1个核心时,接近或接近4倍的改进) p、 我可以避免计算平方根并保持距离^2for循环有什么问题吗?您是否分析并发现它有点太慢了?然后请提供一个,典型的点位置大小,您的执行时间,以及测试后所需的执行时间,使用
std::向量点位置
cv::Point2f中心
用于(常数自动和点位置)
自动d=cv::标准(中心点);
对于“足够大的数据集”,有哪些更有效的方法和替代方法?什么是合适的多线程方法来计算跨多个处理核心的距离(当使用4个核心而不是1个核心时,接近或接近4倍的改进)
p、 我可以避免计算平方根并保持距离^2for循环有什么问题吗?您是否分析并发现它有点太慢了?然后请提供一个,典型的
点位置
大小,您的执行时间,以及测试后所需的执行时间,使用5亿个随机点,2.621秒用于使用简单方法计算距离…{d[i]=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));},3.403秒用于使用cv::norm…{d[i]=cv::norm(a-pts[i])和0.734秒。使用OpenMP的简单方法(似乎太好了,将进一步研究)。将在进行更多基准测试和SSE/AVX优化后报告。是否需要特定的保证精度?如果OpenMP/SIMD计算不够快(不太可能)WIP:顺便说一句,我仍然相信这个问题是不适定的,因为OP最多可能有几百个点,执行时间可以忽略不计
std::vector<cv::Point2f> pointPositions
cv::Point2f center
for(const auto& pt : pointPositions
auto d = cv::norm(center-pt);