【问题标题】:Simple OpenCL example in R with R code?R 中带有 R 代码的简单 OpenCL 示例?
【发布时间】:2015-07-23 00:56:32
【问题描述】:

是否可以使用 OpenCL 但使用 R 代码?我对 OpenCL 和 GPU 编程仍然没有很好的理解。例如,假设我有以下 R 代码:

aaa <- function(x) mean(rnorm(1000000))

sapply(1:10, aaa)

我喜欢我可以使用mclapply 作为lapply 的替代品。有没有办法为 OpenCL 做到这一点?或者使用 OpenCL 作为mclapply 的后端?我猜这是不可能的,因为我找不到示例,所以我有两个问题:

  1. 这可能吗?如果可以,您能否使用我上面的函数aaa 给出一个完整的示例?
  2. 如果这不可能,您能解释一下原因吗?我对GPU编程知之甚少。我看 GPU 就像看 CPU,为什么我不能并行运行 R 代码?

【问题讨论】:

    标签: r opencl


    【解决方案1】:

    我将首先查看High Performance Computing CRAN task view,特别是并行计算:GPU部分。

    那里列出了许多利用 GPGPU 来执行大量并行化的特定任务的包(例如gputoolsHiPLARM)。其中大部分使用 NVIDIA 自己的 CUDA,而不是 OpenCL。

    还有一个更通用的OpenCL 包,但它需要你自己学习如何编写 OpenCL 代码,并且只提供一个从 R 到该代码的接口。

    【讨论】:

      【解决方案2】:

      这是不可能的,因为 GPU 的工作方式与 CPU 不同,这意味着您无法向它们提供与 CPU 相同的指令。

      Nvidia 上演了一场精彩的表演,this video 描述了 CPU 和 GPU 处理之间的差异。本质上的区别在于,GPU 通常具有比 CPU 多几个数量级的内核。

      您的示例可以扩展到 GPU 代码,因为它是高度并行的。

      这是一些创建随机数的代码(尽管它们不是正态分布的)http://cas.ee.ic.ac.uk/people/dt10/research/rngs-gpu-mwc64x.html

      创建随机数后,您可以将它们分成块,然后将每个块并行求和,然后将块的总和相加得到总和Is it possible to run the sum computation in parallel in OpenCL?

      我意识到您的代码会使随机数向量及其总和以串行和并行方式进行 10 次操作,但使用 GPU 处理,仅有 10 个任务效率不高,因为您会让这么多内核闲置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-25
        • 2015-04-24
        • 1970-01-01
        • 1970-01-01
        • 2015-07-04
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        相关资源
        最近更新 更多