R中带R代码的简单OpenCL示例?

时间:2015-07-19 01:32:53

标签: r opencl

是否可以使用OpenCL但使用R代码?我仍然不太了解OpenCL和GPU编程。例如,假设我有以下R代码:

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

sapply(1:10, aaa)

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

  1. 这是否可行?如果可以,您可以使用上面的函数aaa提供完整的示例吗?
  2. 如果无法做到,请解释原因吗?我对GPU编程知之甚少。我像CPU一样查看GPU,为什么我不能并行运行R代码?

2 个答案:

答案 0 :(得分:3)

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

其中列出了许多软件包,这些软件包利用GPGPU来完成大规模并行化的特定任务(例如gputoolsHiPLARM)。其中大多数使用NVIDIA自己的CUDA而不是OpenCL。

还有一个更通用的OpenCL包,但它要求您自己学习如何编写OpenCL代码,并且仅提供来自R的代码的接口。

答案 1 :(得分: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个任务是非常有效的,因为你离开了许多核心空闲。