GPU上的foreach多并行

Posted

技术标签:

【中文标题】GPU上的foreach多并行【英文标题】:foreach doparallel on GPU 【发布时间】:2018-11-30 08:52:56 【问题描述】:

我有这段代码用于并行编写我的结果。我在 R 中使用 foreachdoParallel 库。

    output_location='/home/Desktop/pp/'
    library(foreach)
    library(doParallel)
    library(data.table)

    no_cores <- detectCores()
    registerDoParallel(makeCluster(no_cores))
    a=Sys.time()

    foreach(i=1:100,.packages = c('foreach','doParallel')
    ,.options.multicore=mcoptions)%dopar% 
    result<- my_functon(arg1,arg2)
    write(result,file=paste(output_location,"out",toString(i),".csv"))
    gc()
    

现在它在 CPU 中使用 4 个内核,因此使用此代码编写所需的时间非常少。但我希望使用 GPU 进行 foreach-doparallel。有什么方法可以在 GPU 上处理 foreach doParallel 循环。 gputools,gpuR 是一些支持 R 的 GPU 包。但它们主要用于数学计算,如 gpuMatMult()、gpuMatrix() 等。我正在寻找在 GPU 上运行循环。任何帮助或指导都会很棒。

【问题讨论】:

【参考方案1】:

使用foreach 或类似工具进行并行化是可行的,因为您有多个 CPU(或具有多个内核的 CPU),它们可以一次处理多个任务。 GPU 也有多个内核,但这些内核已经用于并行处理单个任务。因此,如果您想进一步并行化,您将需要多个 GPU

但是,请记住,GPU 仅在某些类型的应用程序中比 CPU 更快。大矩阵的矩阵运算就是一个很好的例子!请参阅性能部分here,了解最近对一个特定示例的比较。因此,考虑 GPU 是否适合您可能是有意义的。

此外:文件 IO 将始终通过 CPU。

【讨论】:

感谢@Ralf Stubner。我只有一个多核 GPU。所以我不能使用GPU进行foreach并行。对吗? @Aswathy 是的,没错。

以上是关于GPU上的foreach多并行的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 Parallel.ForEach,何时使用 PLINQ

何时使用 Parallel.ForEach,何时使用 PLINQ

并行化不适用于 foreach 包

带有异步 lambda 的并行 foreach

在并行 foreach 循环中使用 source()

Parallel.ForEach 使用多线遍历循环