Java 并行度:OpenCL/GPUs 对比 actors/threads

Java parallelism: OpenCL/GPUs vs. actors/threads

APARAPI project 自我描述为:

Aparapi allows Java developers to take advantage of the compute power of GPU and APU devices by executing data parallel code fragments on the GPU rather than being confined to the local CPU. It does this by converting Java bytecode to OpenCL at runtime and executing on the GPU...

我想知道与 gpars or Akka 等传统并发框架相比,它有什么好处。

在什么情况下将 JVM 字节码转换为 OpenCL 比这些替代方案提供的更快或更可取?为什么 OpenCL/GPU 范式 "faster"(至少在某些情况下)而不是 Java/CPU?什么情况下需要这样做?

我想说的是,akka 是一种非常高级的并发抽象,而 CUDA、OpenMP、MPI 等东西是计算量大的东西。所以 akka 非常适合实现诸如任务调度系统以及处理和限制请求之类的东西,但如果它们在计算上很昂贵并且可以并行化,那么对于任务执行本身就不那么好了。但是你有这个非常高的抽象,并且可以将 futures 与它们一起使用,使整个系统具有反应性,这样它就不会在任何地方锁定。所有 GPU 库都非常适合执行大规模并行任务,在这些任务中,你可以让成堆的无人机几乎都在做同样的事情。这就是 BLAS 之类的东西。它们最近变得更受欢迎,我认为是因为与 CPU 相比,图形卡取得了更大的进步,尽管与 OpenMP 相比,恕我直言,它仍然是一个非常专业的领域,但与 OpenMP 相比,您可以只在您的设备上安装一些预处理器衍生物循环,或类似 java8 新的并行集合。不管怎样,那是我的 2 美分。