OpenCL,TBB,OpenMP

时间:2011-08-19 19:42:55

标签: multithreading opencl openmp tbb

我在OpenMP,TBB和OpenCL中实现了很少的正常循环应用程序。在所有这些应用程序中,当我在CPU上运行它而没有在内核中进行特定优化时,OpeCL也提供了比其他应用程序更好的性能。 OpenMP和TBB也提供了良好的性能,但远低于OpenCL,可能是因为它们都是CPU专用框架,并且至少应该提供与OpenMP / TBB相当的性能。

我的第二个问题是,当谈到OpenMP和TBB时,在我的实现中,OpenMP总是比TBB更好,因为我不是很专业,因此我没有对其进行优化。有没有理由认为OpenMP的性能通常比TBB更好?因为我认为他们两个甚至OpenCL都在低级别使用相同类型的线程池....任何专家意见?感谢

3 个答案:

答案 0 :(得分:3)

OpenCL相对于TBB和OpenMP的一个优势是它可以更好地利用硬件中的SIMD并行性。一些OpenCL实现将运行您的代码,使得每个工作项在机器的SIMD矢量通道中运行,以及在单独的核上运行。根据算法,这可以提供许多性能优势。

使用自动向量化,C编译器也可以利用SIMD并行性,但C语言中的内存别名规则使得在某些情况下难以实现。由于OpenCL要求程序员明确地调出工作项和围栅内存访问,因此OpenCL编译器可能更具侵略性。

最后,这取决于您的代码。可以找到OpenCL,OpenMP或TBB中最好的算法。

答案 1 :(得分:1)

英特尔提供的CPU和MIC的OpenCL运行时使用TBB。它远非只是在低级别的线程池中“#”;因为它利用了TBB提供的复杂调度和分区算法来实现更好的负载平衡,从而更好地利用CPU。

至于TBB与OpenMP。通常,它归结为不正确的测量。例如,TBB没有像OpenMP那样的隐式障碍,因此预热循环是不够的。您必须确保创建所有线程,并且此开销不包含在您的测量中。另一个例子:有时,编译器无法使用使用OpenMP进行矢量化的TBB对相同的代码进行矢量化。

答案 2 :(得分:0)

为给定的硬件编译OpenCL内核。供应商/硬件特定优化的潜力巨大。