zoukankan      html  css  js  c++  java
  • R语言的并行运算(CPU多核)

    通常R语言运行都是在CPU单个核上的单线程程序。有时我们会有需求对一个向量里的元素应用相同的函数,最终再将结果合并,并行计算可以大幅节约时间。

    为了支持R的并行运算, parallel包已经被纳入了R的BASE库中,可以被直接调用,来实现在同一个CPU上利用多个核Core同时运算相同的函数。

    版本一、Window版本的R程序

    对比普通的LAPPLY函数和Parallel包下的多核makeCluster + parLapply函数效率

    library(parallel)
    fun <- function(x){
    return (x+1);
    }
    funcTwoPara<-function(x,a){
        return (x+a);
    }
     
    #单核的普通LAPPLY函数
    system.time({
    res <- lapply(1:5000000, fun);
    });
    # 用户  系统  流逝
    # 20.91  0.03 21.35
    # 超过一个参数的 Function模型
    x=c(1:500)
    system.time({
    res <- lapply(x,funcTwoPara,a=1);
    });
     
    #多核的 MakeCluster 函数,这里利用了本机CPU的2个物理核心同时跑程序
    detectCores()   # 4 core
    detectCores(logical = F)  # 2 core 物理核心
    cl <- makeCluster(getOption("cl.cores", 4));
    system.time({
    res <- parLapply(cl, 1:10000000,  fun)
    });
    stopCluster(cl);

    版本二、Linux版本的R程序

    library(parallel)
    fun <- function(x){
    return (x+1);
    }
    # 单核计算
    system.time({
    res <- lapply(1:5000000, fun);
    });
     
    # 多核并行计算
    detectCores(logical = F)  # 8
    mc <- getOption("mc.cores", 8)
    system.time({
    res <- mclapply(1:5000000, fun, mc.cores = mc);
    });
    stopCluster(mc);
     
    # 8核的 结果
    user  system elapsed
      7.175   1.187   3.416
    # 4核的结果
    user  system elapsed
     13.415   1.443   8.946
    # 2核的结果
    user  system elapsed
     16.882   1.726   8.139
    # 单核 计算 结果
     user  system elapsed
     16.760   0.039  16.807

    Reference:

    http://blog.sina.com.cn/s/blog_6f194ed30101blpu.html

    http://blog.itpub.net/24229571/viewspace-1120592/

  • 相关阅读:
    学习进度(第十四周)
    学习进度(第十三周)
    程序员修炼之道阅读笔记03
    程序员修炼之道阅读笔记02
    学习进度(第十二周)
    冲刺进度条10
    冲刺进度条09
    冲刺进度条08
    寒假学习进度报告2
    寒假学习进度报告1
  • 原文地址:https://www.cnblogs.com/xinping-study/p/6897891.html
Copyright © 2011-2022 走看看