Java和OpenCL都支持异构计算;具有多个体系结构的系统协同工作(任务和数据并行)。
可移植性是这两种情况下的主要目标,两者都在很大程度上实现了这一目标。事实上,OpenCl仍然不能在FPGA和DSP上运行,因为这些工具是不可用的。JVM可用于GPU、FPGA、ARM等。
两者都生成中间代码。
尽管有这么多相似之处,为什么和何时人们应该更喜欢OpenCL而不是Java来进行异构计算呢?
编辑的
请具体回答我的问题:尽管有这么多相似之处,为什么和何时人们应该更喜欢OpenCL而不是Java来进行异构计算呢?为什么我选择OpenCL而不是Java?如果您说openCl具有更好的性能,那么我的直接问题将是为什么会这样(因为两者都生成需要转换为特定h/w的二进制文件的中间代码)。
发布于 2012-05-09 09:20:20
OpenCL通常用于处理大量并行操作(计算等)。这就是OpenCL蓬勃发展的地方,它确实提高了程序的吞吐量。
Java是编写运行在各种平台/设备上的应用程序的通用语言。
它们作为工具有不同的用途,但您可以使用OpenCL程序使用JOCL。我还使用了来自AMD的一个叫做阿帕拉皮的工具。因为我希望我的应用程序进行一些计算,我的ASUS AMD 6970卡的工作似乎比我的6核心AMD 1090 T显影黑版完成得更快。
只想让您知道Aparapi是什么(摘自谷歌代码站点):
Aparapi允许Java开发人员利用GPU和APU设备的计算能力,在GPU上执行数据并行代码片段,而不是局限于本地CPU。它通过在运行时将Java字节码转换为OpenCL并在GPU上执行来实现这一点,如果由于任何原因,Aparapi不能在GPU上执行,它将在Java线程池中执行。
尽管有这么多相似之处,为什么和何时人们应该更喜欢OpenCL而不是Java来进行异构计算呢?
一个人会选择OpenCL来执行并行处理任务,否则要在CPU上执行这些任务需要花费大量时间。在这种情况下,缺点将是额外的热量和电力消耗成本。还请记住,有些任务在CPU上执行得更快。这一切都取决于应用程序,大多数时候都需要对两种类型的芯片进行试验,以决定哪种芯片做得最好。
为什么我选择OpenCL而不是Java?
对于面向并行处理的任务,人们可以选择OpenCL而不是Java。OpenCL是为此目的而构建的工具。OpenCL不是用来构建企业或桌面应用程序的东西。Java是一种编程语言,适用于在许多平台上运行的几乎任何域。如果人们知道使用OpenCL可以在Java上节省24小时的计算时间;当然,Java将被排除在外,OpenCL将是可行的方法,或者简单地说,OpenCL可以通过Java应用程序使用。
如果您说openCl具有更好的性能,那么我的直接问题将是为什么会这样(因为两者都生成需要转换为特定h/w的二进制文件的中间代码)。
它有更好的性能在特定的应用程序,因为GPU有更多的核心比一个CPU。尽管它们的频率很低,所以这意味着它们在并行任务上比顺序任务更好。您必须记住,据我所知,OpenCL用于基本计算,而不是构建完整风格的applications...at。
https://stackoverflow.com/questions/10512927
复制相似问题