是否可以使用OpenCL但使用R代码?我仍然不太了解OpenCL和GPU编程。例如,假设我有以下R代码:
aaa <- function(x) mean(rnorm(1000000))
sapply(1:10, aaa)
我喜欢我可以使用mclapply
作为lapply
的替代品。有没有办法为OpenCL做到这一点?或者使用OpenCL作为mclapply
的后端?我猜这是不可能的,因为我找不到一个例子,所以我有两个问题:
aaa
提供完整的示例吗?答案 0 :(得分:3)
我首先看一下High Performance Computing CRAN task view,特别是并行计算:GPU 部分。
其中列出了许多软件包,这些软件包利用GPGPU来完成大规模并行化的特定任务(例如gputools,HiPLARM)。其中大多数使用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个任务是非常有效的,因为你离开了许多核心空闲。