java - 我们可以用 OpenCL 做什么?

标签 java mapreduce opencl gpu

我一直在阅读有关 OpenCL 的文章,我发现了这一行:

OpenCL gives any application access to the Graphics Processing Unit for non-graphical computing.

假设我需要在 Java 或 Clojure 中执行 CPU 密集型操作或算法(甚至可能运行 Hadoop MapReduce),我可以使用 OpenCL 在 GPU 中执行操作吗?如果是,我为什么要这样做?

既然有 CPU,为什么还要用 GPU?

OpenCL的应用场景有哪些?

我读到 OpenCL 提供并行编程,这是否意味着它将在 CPU 和 GPU 之间划分目标作业?还是单独跨 GPU?

最佳答案

OpenCL 为并行机器上的编程提供了一个可移植的接口(interface)。 OpenCL 程序可以在 CPU 或 GPU 上运行。我还没有见过可以同时在 CPU 和 GPU 上运行代码的技术。

将 GPU 用于通用计算利用了这样一个事实,即 GPU 实际上是由数百甚至数千个简单的小型处理元素 (PE) 构建而成。对于某些任务,此架构可能能够在 CPU 所需时间的一小部分内完成任务。

GPU 的一个缺点是它们实际上是变异的 SIMD(单指令多数据)机器;因此,大量的 PE 被限制在同一时间执行相同的操作,但在不同的数据上。这种限制使程序的设计有点困难。

GPU 非常适合任何可以并行化的任务,而无需在不同线程之间进行大量通信。 NVIDIA 的 CUDA 和 OpenCL 等技术已开始在科学应用和高性能计算中得到大量应用,这两者都相当重视并行性。

关于java - 我们可以用 OpenCL 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710047/

相关文章:

java - Spring WS : How to apply Interceptor to a specific endpoint

hadoop - 将 mapreduce 的输出合并到另一个目录结构中

在另一张卡上运行的 OpenCL 字节码

java - 如何根据下拉框重新加载页面

java - 使用嵌套 TestConfiguration 覆盖 Spring Boot 2.1 切片测试中的 bean

hadoop - mapreduce作业中的应用程序主控数量?并在YARN中mapreduce处理步骤

c++ - Boost.Compute 比普通 CPU 慢?

python - PyOpenCL 2D 数组内核 get_global_id(1) 错误

java - 在 Controller 中处理删除请求的正确方法是什么?

hadoop - 使用 hadoop + mapreduce 在 couchdb 中处理数据