【问题标题】:What can we do with OpenCL?我们可以用 OpenCL 做什么?
【发布时间】:2014-12-09 07:06:18
【问题描述】:

我一直在阅读有关 OpenCL 的信息,发现这一行:

OpenCL 允许任何应用程序访问图形处理单元以进行非图形计算。

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

如果我们有 CPU,为什么要使用 GPU?

OpenCL应用场景有哪些?

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

【问题讨论】:

  • 为什么要投反对票?否决投票时,请详细说明几行来解释。
  • 我投了反对票,因为我对花时间回答这个问题感到不安,这个人不知道他想问什么。如何回答“OpenCL 应用的场景有哪些?”反正?这个问题100%愚蠢......对不起......

标签: java mapreduce opencl gpu


【解决方案1】:

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

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

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

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

【讨论】:

  • "OpenCL programs can be run on the CPU or the GPU." - ...或在任何其他设备上(支持 OpenCL)。
  • @virtuallinux 我对 OpenCL 在 java(或 Clojure)上下文中的应用很感兴趣。
【解决方案2】:

OpenCL 是在科学家发现 GPU 架构能够非常高效地执行线性代数计算之后开发的。

线性代数问题往往很容易并行化并且在单个元素上非常简单。在大多数向量和矩阵运算中,只需要四个基本数学函数 +、-、/ 和 *。此外,对 Max 和 Min 搜索进行一些比较,并且可以在并行环境中完成大量工作。如果问题规模足够大,数据从 RAM 复制到 GPU 并返回的额外时间远小于 GPU 的速度增益,则性能提升幅度很大。

这些技术是从那时起开发的。通过将问题转换为图形问题并返回来执行第一次计算。 OpenCL 旨在为计算提供一个干净的界面。

OpenCL 适用于可以并行运行而没有太多依赖关系且需要大量计算能力的问题。线性代数、搜索算法、信号转换和 3D 场景以及碰撞检查都是经典示例。

【讨论】:

  • 等等.. 科学家发现设计用于渲染实时 3D 的处理器架构擅长向量和矩阵运算?大声笑:D
  • 是的,有点。我记得我关于高性能计算机的演讲以及一些数学家连接 PS2 以在瑞士进行 HPC 的故事。这是在 OpenCL 之前。 ;-) 科学的用途是在将其用于图形之后。
  • 我在开玩笑 :) GPU 基本上是 SIMD 实现,设计时考虑了一个目标。惊人的快速线性代数性能。说一位科学家发现他们恰好擅长 LA 就像是在说,“有一天,一位科学家发现 DSP 在某些类型的数字信号处理方面非常出色”;)
【解决方案3】:

英特尔对 openCL 的热情肯定不高。我不认为我将能够在我的 linux 系统上安装驱动程序,它们让它变得如此尴尬。还有其他技术,例如德州仪器的数字信号处理芯片。 如果可以的话,我会使用 openCL。然而,在很多应用中使用一组便宜的 ARM 板有一些优势。易于编程非常重要,而不是假设存在但从未实际使用过的东西。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2021-03-24
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多