【发布时间】:2011-11-07 22:58:12
【问题描述】:
有没有比较 OpenCL 和 OpenMP 性能的研究?具体来说,我对使用 OpenCL 启动线程的开销成本感兴趣,例如,如果要将域分解为大量单独的工作项(每个工作项由一个执行小工作的线程运行),而 OpenMP 中较重的线程是域被分解为子域,其数量等于核心数。
OpenCL 编程模型似乎更针对大规模并行芯片(例如 GPU),而不是内核更少但功能更强大的 CPU。
OpenCL 能否成为 OpenMP 的有效替代品?
【问题讨论】:
-
我也很想知道同时使用 OpenMP 和 OpenCL 是否/何时有效。 OpenCL 是线程安全的(clSetKernelArg() 方法除外),因此似乎有可能利用这两种技术。
-
如果您对“有效”的定义包括可读性和进化性,那么答案必须是“否”。 OpenCL 不能像 OpenMP 那样被固定到现有代码上,而且与 OpenMP 相比,它有大量的语法膨胀。另一方面,编写能够有效利用内存层次结构的 OpenMP 代码通常比在 OpenCL 中的可读性要低得多。
-
我可以在这里找到 OpenMP 和 OpenCL 之间的良好和科学比较:Comparison of OpenMP & OpenCL Parallel Processing Technologies,作者 Krishnahari Thouti 和 S.R.Sathe
-
您的问题需要缩小一点。您是否正在寻找 GPU 与多线程 CPU 或 OpenMP 与 OpenCL 的比较?要比较这两种语言,它们确实需要在相同的架构上运行。否则,就是苹果和橙子。