使用OpenCl Vs java的异构计算

时间:2012-05-09 09:03:15

标签: java parallel-processing opencl heterogeneous

Java和OpenCL都支持异构计算;具有多个架构并行协同工作的系统(任务和数据并行)。

可移植性是这两种情况下的主要目标,并且两者都在很大程度上实现了这一目标。事实上,由于工具不可用,OpenCl不能在FPGA和DSP上运行。可以为GPU,ARM等GPU开发JVM。

两者都生成中间代码。

尽管有很多相似之处,为什么以及什么时候应该更喜欢OpenCL而不是Java用于异构计算?

EDITED

请具体到我的问题:尽管有很多相似之处,为什么以及何时应该更喜欢OpenCL而不是Java用于异构计算?为什么我选择OpenCL而不是Java?  如果你说openCl具有更好的性能,那么我的直接问题将是它为什么会这样(因为两者都生成需要转换为特定h / w的二进制文件的中间代码)。

1 个答案:

答案 0 :(得分:4)

OpenCL通常用于处理大量并行操作(计算等)。这就是OpenCL蓬勃发展的地方,程序的吞吐量确实增加了。

Java是一种用于编写在各种平台/设备上运行的应用程序的通用语言。

它们具有不同的工具目的,但您可以使用JOCL从Java程序中使用OpenCL。我还使用了AMD的一个名为Aparapi的工具。因为我希望我的应用程序进行一些计算,我的华硕AMD 6970卡似乎比我的6核AMD 1090T Phenom黑色版本更快完成。

只是为了让你知道Aparapi是什么(取自google code site):

  

Aparapi允许Java开发人员利用计算能力   通过执行数据并行代码片段来实现GPU和APU设备   GPU而不是局限于本地CPU。它通过这样做   在运行时将Java字节码转换为OpenCL并在其上执行   GPU,如果由于任何原因Aparapi无法在GPU上执行它   在Java线程池中执行。


  

尽管有很多相似之处,但为什么以及何时应该更喜欢OpenCL   over Java for heterogeneous Computing?

可以选择OpenCL进行并行处理任务,否则这些任务会花费大量时间在CPU上执行。在这种情况下的缺点是额外的热量和功耗成本。还要记住,某些任务会在CPU上执行得更快。这一切都取决于应用程序,大多数时候需要在两种类型的芯片上进行试验,以便决定哪一个最适合工作。

  

为什么我选择OpenCL而不是Java?

可以选择OpenCL over Java来进行面向并行处理的任务。 OpenCL是为此目的而构建的工具。 OpenCL不是您用于构建企业或桌面应用程序的东西。 Java是几乎在任何平台上运行的任何域的编程语言。如果有人知道使用OpenCL可以节省他们对Java的24小时计算;当然,Java会被排除在外,OpenCL将成为可行的方法,或者只需通过Java应用程序就可以使用OpenCL。

  

如果你说openCl有更好的性能,那么我的直接问题   将是这样的原因(因为两者都产生需要的中间代码)   转换为特定h / w的二进制文件。

它在特定应用程序上具有更好的性能,因为GPU拥有比CPU更多的内核。它们的频率虽然很低,但这意味着它们在并行任务上更好,而不是顺序。您必须记住,OpenCL用于基本计算,而不是用于构建完整的风味应用程序......至少据我所知。