我正在创建一个计算机视觉应用程序,通过网络摄像头检测对象.我目前专注于应用程序的性能
我的问题在于使用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,因为最简单的方法是将单个线程程序移植到它上面.有时你可以把一个pragma告诉它来准确一个主循环,你可以按CPU核心数量级的顺序获得加速.
如果您的问题非常数据并行并且浮点数 - 比您可以从GPU获得更好的性能 - 但您必须使用类似C语言编写内核并在主机和GPU之间映射或读/写内存缓冲区.它很麻烦,但在某些情况下,性能提升可以达到100,因为GPU是专为数据并行工作而设计的.
OpenMPI将为您带来最大的性能,但您需要一个集群(同一网络上的一堆服务器),而且它们很昂贵.