Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++ OpenMP未使用Raspberry Pi 2上的所有可用内核_C++_Multithreading_Opencv_Openmp_Raspberry Pi2 - Fatal编程技术网

C++ OpenMP未使用Raspberry Pi 2上的所有可用内核

C++ OpenMP未使用Raspberry Pi 2上的所有可用内核,c++,multithreading,opencv,openmp,raspberry-pi2,C++,Multithreading,Opencv,Openmp,Raspberry Pi2,我正在Raspberry Pi 2项目中使用(使用OpenCV进行图像分析)进行对象跟踪。为了解决延迟问题(大约3秒的视频延迟),我在编译时启用了OpenMP支持。现在,我只有大约2秒的延迟。运行top告诉我,opentld最多只使用了约170%的CPU,这让我怀疑OpenMP只使用了Raspberry Pi 2的四个内核中的两个 据我所知,OpenMP应该能够利用所有四个核心。这是OpenMP无法识别所有内核的问题,还是其他问题?首先,您应该在控制台上导出OMP\u NUM\u THREADS

我正在Raspberry Pi 2项目中使用(使用OpenCV进行图像分析)进行对象跟踪。为了解决延迟问题(大约3秒的视频延迟),我在编译时启用了OpenMP支持。现在,我只有大约2秒的延迟。运行
top
告诉我,opentld最多只使用了约170%的CPU,这让我怀疑OpenMP只使用了Raspberry Pi 2的四个内核中的两个


据我所知,OpenMP应该能够利用所有四个核心。这是OpenMP无法识别所有内核的问题,还是其他问题?

首先,您应该在控制台上导出OMP\u NUM\u THREADS=4


CPU的最高使用率为170%,这并不一定意味着您只运行了两个线程。代码可能是内存受限的,这也可能会降低CPU使用水平。

尝试设置一些libgomp环境变量-
export GOMP_DEBUG=1
以获取更多调试信息(如果已实现);和导出OMP_WAIT_POLICY=ACTIVE GOMP_CPU_AFFINITY=0-3,以便更有效地将OpenMP线程锁定和绑定到内核。为什么不调用OMP_get_num_procs()来确定这确实是OpenMP可用的内核问题?@osgx,它成功了
top
现在显示
opentld
正在使用约370%的内存,我的CPU监视器显示为100%。但是,性能没有明显变化(仍有2秒的滞后)。CPU处理能力是否不是这里的瓶颈?如果没有,可能是什么?@faeophyta,
OMP\u WAIT\u POLICY=ACTIVE
总是会将CPU负载增加到较高的值,但有时没有有用的工作。请仅尝试导出GOMP\u CPU\u AFFINITY=0-3faeophyta,您从OpenTLD使用什么以及视频的参数是什么?谢谢您的回答!从osgx的回复中,我确实导出了GOMP_DEBUG=1 OMP_WAIT_POLICY=ACTIVE GOMP_CPU_AFFINITY=0-3。现在
top
显示约380%——这正是我想要的。然而,业绩没有增长。这可能是因为正如你所提到的,它可能是“内存受限”的吗?你能猜到为什么会是这样吗?我和OpenTLD的作者格内比海谈过,他说原因可能是OpenCV对相机图像的缓冲。你认为这有关系吗?