Java线程或Cuda线程

时间:2012-02-09 18:30:31

标签: java cuda parallel-processing

我将使用并行处理开始一个项目,我想知道我是否会通过使用Java线程或Cuda编程获得更多优化?我也不是这两种方案的专家,哪条路线的学习曲线较小?

2 个答案:

答案 0 :(得分:4)

答案简短:这取决于您要解决的问题。

答案很长:

Java和Cuda中的并行处理之间存在一些非常根本的区别。一个很大的区别是作业的打包和执行方式。在Java中,您将编写一个加载数据的程序,然后您将使用类似ExecutorService的程序来执行您的任务。在Cuda中,您将加载数据,但随后编写一段实际执行的代码(在Cuda中,这称为内核)。听起来很相似吧?但不是真的。 Cuda还有额外的内存开销。 GPU具有有限的内存,因此您的软件必须首先加载数据,然后将其打包为内核的一部分,然后将其发送到GPU,然后GPU存储数据并执行计算。然后您的应用程序必须检索结果。这对于某些计算问题非常有效,但对于其他计算问题来说效率非常低。这一切都取决于你想要完成的事情。

答案 1 :(得分:0)

如果您需要执行多次(数千或更多)的简单任务,GPU非常有用您可以使用OpenCL访问GPU。这是一个Java包装器http://www.jocl.org/其他的是http://jogamp.org/jocl/www/http://code.google.com/p/nativelibs4java/wiki/OpenCL,但我还没有尝试过。

CPU通用编程要好得多。您可能会惊讶于您可以在单个线程中完成多少工作,更不用说在具有多个内核的Socket上完成。