2

我阅读了 OpenCL 概述,它指出它适用于运行 CPU、GPGPU、DSP 等的代码。但是,通过查看命令参考,它似乎都是数学和图像类型的操作。我没有看到任何说字符串的东西。

这让我想知道你通过 OpenCL 在 CPU 上运行什么?

此外,我知道 OpenCL 可用于在 GPGPU 上执行排序。但是有人会使用它(或者,就此而言,当前的 GPGPU)来执行字符串处理,例如模式匹配、变音提取、字典查找或任何其他需要处理字符串数组的事情。

编辑 我注意到英特尔即将推出的 Ivy Bridge 就其图形单元而言被吹捧为“兼容 OpenCL”。这是否推断 CPU 内核不兼容 OpenCL,或者没有这样的推断?

编辑 为了非辩论和建设性的利益,如果有人能指出我的官方参考资料来回答我的问题,我将不胜感激。

4

3 回答 3

1

没有链接,但我认为这是因为使用字符串的算法可能会进行大量动态内存分配和分支,而 GPGPU 并不适合这两种情况。GPGPU 与矢量处理也有很多共同点,因此使用不同大小的内存块(通常使用字符串算法,您通常没有同质的字符串组)进行工作单元会产生较差的性能并且是很难编程。

GPU 被设计为在同质数据组(例如每向量或每像素操作)上执行相同的工作,几乎没有分支。可以模仿这种行为的算法在 GPU 上非常有用。

于 2012-01-30T15:31:16.457 回答
1

这让我想知道你会通过 OpenCL 在 CPU 上运行什么?

我更喜欢使用 ocl 将工作从 cpu 卸载到我的图形硬件上。有时我的显卡有限制,所以我喜欢有一个备用内核供 cpu 使用。这些限制可能是内存大小、内存瓶颈、低时钟速度或 pci-e 总线阻碍。

我说我喜欢为 cpu 使用单独的内核,因为我认为应该调整所有内核以在其目标硬件上运行。我什至喜欢有一个 openmp 备份计划,因为我使用的大多数算法都会提前以这种方式进行测试。

我认为最好在 cpu 上测试 gpu 内核以确保它按预期运行。如果您的软件用户安装了 opencl,但只安装了一个 cpu(或低端 gpu),那么能够在不同的设备上执行相同的代码是件好事。

于 2012-01-31T14:13:13.583 回答
1

您可以将 OpenCL 视为运行时(用于设备发现、排队)和基于 C 的编程语言的组合。这种编程语言具有原生向量类型和内置函数和操作,可以对这些向量进行各种有趣的操作。这很好,因为您可以在 OpenCL 中编写矢量化内核,并且实现的责任是将其映射到硬件的实际矢量 ISA。

从这篇 4/2011文章中,可能会消失:

目前有两种主要的 CPU 架构,x86 和 ARM,它们都应该很快运行 OpenCL 代码。

如果您编写一个针对这两种架构的 OpenCL 应用程序,您就不必担心编写两个版本,一个 SSE 和一个 NEON。只需编写 OpenCL C 并完成它。是的,我知道。这假设供应商已经完成了他的工作并编写了一个充分利用底层 ISA 的可靠实现。但如果他不这样做,请抱怨!

此外,一些 CL 实现提供标量内核的自动矢量化,这通常更容易编写。一个好的自动矢量化器可以毫不费力地为您提供可靠的性能提升。由于 CL 内核是“在线”编译的,因此获得这样的好处不需要交付重建的代码。

于 2012-01-31T00:59:12.430 回答