【问题标题】:Java Threads or Cuda ThreadsJava 线程或 Cuda 线程
【发布时间】:2012-02-10 16:04:31
【问题描述】:

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

【问题讨论】:

  • 我不知道 Cuda,但是当我想到 Java 和并行处理时,我想到了 Scala 和/或 Akka。
  • 什么样的应用程序?哪个平台?问题域是什么?所涉及的工作规模如何?
  • 我也不知道能够从 JVM 访问 GPU。
  • 你在解决什么样的问题? cuda 在某些情况下会很有帮助,而在其他情况下则完全没有。
  • 对于较小的学习曲线,我建议在 Java 中使用多线程。但是,除非您指定您正在做什么,否则我真的无法评论任何有关性能的内容。

标签: java cuda parallel-processing


【解决方案1】:

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

长答案:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我不推荐将 GPU 用于通用计算。你能推荐更好的 Java 库吗?
    猜你喜欢
    • 2013-11-28
    • 2013-12-21
    • 1970-01-01
    • 2020-08-29
    • 2012-04-09
    • 2012-07-19
    • 2012-05-13
    • 2010-12-11
    • 2011-04-25
    相关资源
    最近更新 更多