OpenMP vs OpenCL 用于计算机视觉



我正在创建一个计算机视觉应用程序,通过网络摄像头检测物体。我目前专注于应用程序的性能

我的问题在于使用 Haartraining 文件生成 XML 级联文件的应用程序的一部分。这很慢,大约需要 6天 .为了解决这个问题,我决定使用多处理,以尽量减少生成Haartraining XML文件的总时间。

我找到了两个解决方案:opencl和(openMp和openMPI)。

现在我对使用哪一个感到困惑。我读到opencl是在同一台机器上使用多个CPU和GPU。是吗?另一方面,OpenMP 用于多处理,使用 openmpi,我们可以通过网络使用多个 CPU。但是OpenMP不支持GPU。

您能否建议使用任一库的优缺点。

OpenCL 用于使用 GPU 流处理器。 http://en.wikipedia.org/wiki/Opencl

OpenMP 用于使用 CPU 内核。 http://en.wikipedia.org/wiki/Openmp

OpenMPI 用于使用分布式网络集群。 http://en.wikipedia.org/wiki/Openmpi

哪个最好使用取决于您的问题规范,但我会首先尝试使用 OpenMP,因为它是将单线程程序移植到它上的最简单方法。 有时你可以放一个编译指示,告诉它对主循环进行平行化,你可以按照CPU内核数量的顺序获得加速。

如果你的问题非常数据并行和浮点 - 那么你可以从GPU中获得更好的性能 - 但你必须用类似C的语言编写内核,并在主机和GPU之间映射或读/写内存缓冲区。 这很麻烦,但在某些情况下,性能提升可能达到 100 倍,因为 GPU 是专门为数据并行工作而设计的。

OpenMPI将为您提供最高的性能,但您需要一个集群(同一网络上的一堆服务器),而且它们很昂贵。

性能问题可能出在 XML 文件本身吗?

您是否尝试过使用不同的、更轻的文件格式?

我认为需要 6 天才能生成的 XML 文件一定相当长且复杂。如果您可以控制此数据格式,请尝试使用 Google 的协议缓冲区。

在深入研究OpenMP,OpenCL或其他任何东西之前,请检查访问硬盘所花费的时间;如果这是问题所在,并行库将不会改善情况。

研究OpenCV,看看是否有帮助。

最新更新