Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算点阵列到给定点的距离的最佳方法_C++_Multithreading_Opencv_Simd - Fatal编程技术网

C++ 计算点阵列到给定点的距离的最佳方法

C++ 计算点阵列到给定点的距离的最佳方法,c++,multithreading,opencv,simd,C++,Multithreading,Opencv,Simd,使用OpenCV计算点向量与给定点之间的距离 e、 g std::向量点位置 cv::Point2f中心 用于(常数自动和点位置) 自动d=cv::标准(中心点); 对于“足够大的数据集”,有哪些更有效的方法和替代方法?什么是合适的多线程方法来计算跨多个处理核心的距离(当使用4个核心而不是1个核心时,接近或接近4倍的改进) p、 我可以避免计算平方根并保持距离^2for循环有什么问题吗?您是否分析并发现它有点太慢了?然后请提供一个,典型的点位置大小,您的执行时间,以及测试后所需的执行时间,使用

使用OpenCV计算点向量与给定点之间的距离

e、 g

std::向量点位置
cv::Point2f中心
用于(常数自动和点位置)
自动d=cv::标准(中心点);
对于“足够大的数据集”,有哪些更有效的方法和替代方法?什么是合适的多线程方法来计算跨多个处理核心的距离(当使用4个核心而不是1个核心时,接近或接近4倍的改进)


p、 我可以避免计算平方根并保持距离^2

for循环有什么问题吗?您是否分析并发现它有点太慢了?然后请提供一个,典型的
点位置
大小,您的执行时间,以及测试后所需的执行时间,使用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);