Java线程还是Cuda线程

Java线程还是Cuda线程,java,cuda,parallel-processing,Java,Cuda,Parallel Processing,我将开始一个使用并行处理的项目,我想知道我是否会从使用Java线程或Cuda编程中获得更多优化?另外,我不是这两种方案的专家,哪种方案的学习曲线更小?简单的回答是:这取决于你试图解决的问题 答案很长: Java和Cuda中的并行处理之间有一些非常根本的区别。一个很大的区别是作业的打包和执行方式。在Java中,您将编写一个加载数据的程序,然后使用ExecutorService之类的东西来执行任务。在Cuda中,您将加载数据,然后编写一段在Cuda中实际执行的代码,这称为内核。听起来很像,对吧?但不

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

简单的回答是:这取决于你试图解决的问题

答案很长:


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

简单的回答是:这取决于你想要解决的问题

答案很长:


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

如果您有一个简单的任务需要执行数千次或更多次,那么GPU非常有用,您可以使用OpenCL访问GPU。这是一个Java包装器,其他人都有,但我还没有尝试过


CPU更适合于通用编程。您可能会惊讶于在一个线程中可以完成多少任务,更不用说在一个具有多个内核的套接字上了。

如果您有一个简单的任务需要执行数千次或更多,那么GPU非常有用,您可以使用OpenCL访问GPU。这是一个Java包装器,其他人都有,但我还没有尝试过


CPU更适合于通用编程。你可能会惊讶于你能在一个线程中完成多少工作,更不用说在一个多核的套接字上了。

我不知道Cuda,但当我想到Java和并行处理时,我想到Scala和/或Akka。什么样的应用程序?哪个站台?问题域是什么?所涉及的工作规模有多大?我也不知道能够从JVM访问GPU。你在解决什么样的问题?cuda在某些情况下非常有用,而在其他情况下则完全没有帮助。对于较小的学习曲线,我建议在Java中使用多线程。但是,除非你具体说明你在做什么,否则我真的不能对性能发表任何评论。我不知道Cuda,但当我想到Java和并行处理时,我想到Scala和/或Akka。什么样的应用程序?哪个站台?问题域是什么?所涉及的工作规模有多大?我也不知道能够从JVM访问GPU。你在解决什么样的问题?cuda在某些情况下非常有用,而在其他情况下则完全没有帮助。对于较小的学习曲线,我建议在Java中使用多线程。但是,除非你具体说明你在做什么,否则我真的不能对性能发表任何评论。我不推荐GPU用于通用计算。你能推荐更好的Java库吗?我不推荐GPU用于通用计算。你能为Java推荐更好的库吗?