openmp vs opencl用于计算机视觉

时间:2012-04-07 18:22:36

标签: c++ opencl openmp

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

我的问题在于使用Haartraining文件生成XML级联文件的应用程序的一部分。这非常慢,需要 6days 。为了解决这个问题,我决定使用多处理,以最大限度地减少生成Haartraining XML文件的总时间。

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

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

请您建议使用其中任何一个库的优缺点。

3 个答案:

答案 0 :(得分:6)

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

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

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

哪个最好使用取决于您的问题规范,但我会先尝试使用OpenMP,因为最简单的方法是将单个线程程序移植到它上面。有时你可以把一个pragma告诉它来完成一个主循环,你可以按照CPU核心数量级的顺序获得加速。

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

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

答案 1 :(得分:0)

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

您是否尝试过使用其他更轻的文件格式?

我认为生成需要6天的XML文件必须非常复杂。如果您可以控制此数据格式,请尝试使用Google的Protocol Buffers

在深入研究OpenMP,OpenCL等之前,请检查访问硬盘所花费的时间;如果这是问题,并行库将无法改进。

答案 2 :(得分:-2)

研究opencv,看看它是否有帮助。

为什么选择downvote? ......只是略微提出问题的建议,但可以帮助提高绩效和生产力。我的意思是OpenCV实现OpenCL直接利用GPU提供的性能。例如,用于计算机视觉应用的ocl :: BaseRowFilter_GPU。