OpenCL 通常用于处理大量并行操作(计算等)。这就是 OpenCL 蓬勃发展的地方,它确实增加了程序的吞吐量。
Java 是一种通用语言,用于编写在各种平台/设备上运行的应用程序。
它们作为工具有不同的用途,但您可以使用JOCL从 Java 程序中使用 OpenCL 。我还使用了 AMD 的一个名为Aparapi的工具。因为我希望我的应用程序执行一些计算,我的 ASUS AMD 6970 卡似乎比我的 6 核 AMD 1090T Phenom Black Edition 完成得更快。
只是为了让您知道 Aparapi 是什么(取自谷歌代码网站):
Aparapi 允许 Java 开发人员通过在 GPU 上执行数据并行代码片段而不是局限于本地 CPU 来利用 GPU 和 APU 设备的计算能力。它通过在运行时将 Java 字节码转换为 OpenCL 并在 GPU 上执行来实现这一点,如果由于某种原因 Aparapi 无法在 GPU 上执行,它将在 Java 线程池中执行。
尽管有这么多相似之处,为什么以及何时应该更喜欢 OpenCL 而不是 Java 来进行异构计算?
人们会选择 OpenCL 来处理并行处理任务,否则这些任务将花费大量时间在 CPU 上执行。这种情况下的缺点是额外的热量和功耗成本。还要记住,有些任务在 CPU 上执行得更快。这完全取决于应用程序,大多数情况下需要对两种类型的芯片进行试验,以确定哪一种芯片做得最好。
为什么我选择 OpenCL 而不是 Java?
对于面向并行处理的任务,人们会选择 OpenCL 而不是 Java。OpenCL 是为此目的而构建的工具。OpenCL 不是用于构建企业或桌面应用程序的东西。Java 是一种编程语言,适用于在许多平台上运行的几乎所有领域。如果有人知道使用 OpenCL 可以为他们节省 24 小时的 Java 计算时间;当然,Java 将被排除在外,而 OpenCL 将是可行的方法,或者可以通过 Java 应用程序简单地使用 OpenCL。
如果您说 openCl 具有更好的性能,那么我的直接问题将是为什么会这样(因为两者都生成需要转换为特定硬件的二进制文件的中间代码)。
由于 GPU 的内核比 CPU 多,因此它在特定应用程序上具有更好的性能。虽然它们的频率非常低,所以这意味着它们在并行任务上比顺序任务更好。您必须记住,OpenCL 用于基本计算,而不是用于构建完整的应用程序……至少据我所知。