zoukankan      html  css  js  c++  java
  • R并行计算

    # 参考文献:
    https://cosx.org/2016/09/r-and-parallel-computing
    https://blog.csdn.net/sinat_26917383/article/details/52719232

    数据分析即服务(DAAS:Data Analyst as a Services)
    机器学习即服务(MLAS: machine learning as a services)

    #内存管理 
    memory.size(T)   	#查看系统分配R内存
    memory.size(F)   	#查看已使用内存    
    memory.limit() 	#查看内存上限   
    object.size()		#看每个变量占多大内存。  
    memory.size()		#查看现在的work space的内存使用  
    memory.limit()		#查看系统规定的内存使用上限。如果现在的内存上限不够用,可以通过memory.limit(newLimit)
    #更改到一个新的上限。注意,在32位的R中,封顶上限为4G,无法在一个程序上使用超过4G (数位上限)。这种时候,可以考虑使用64位的版本。  
    
    
    # apply实现方式
    # 原始
    system.time(
        res1.s <- lapply(1:len, FUN = function(x) { solve.quad.eq(a[x], b[x], c[x])})
    )
    
    # lilux
    library(parallel)
    # multicores on Linux
    system.time(
      res1.p <- mclapply(1:len, FUN = function(x) { solve.quad.eq(a[x], b[x], c[x])}, mc.cores = 2)
    )
    
    #windows
    #Cluster on Windows
    cores <- detectCores(logical = FALSE)
    cl <- makeCluster(cores)
    clusterExport(cl, c('solve.quad.eq', 'a', 'b', 'c'))
    system.time(
       res1.p <- parLapply(cl, 1:len, function(x) { solve.quad.eq(a[x], b[x], c[x]) })
    )
    stopCluster(cl)
    
    # for循环实现方式
    #原始
    # serial code
    res2.s <- matrix(0, nrow=len, ncol = 2)
    system.time(
        for(i in 1:len) {
            res2.s[i,] <- solve.quad.eq(a[i], b[i], c[i])
        }
    )
    
    # windows
    # foreach
    library(foreach)
    library(doParallel)
    # Real physical cores in the computer
    cores <- detectCores(logical=F)
    cl <- makeCluster(cores)
    registerDoParallel(cl, cores=cores)
    # split data by ourselves
    chunk.size <- len/cores
    system.time(
      res2.p <- foreach(i=1:cores, .combine='rbind') %dopar%
      {  # local data for results
         res <- matrix(0, nrow=chunk.size, ncol=2)
         for(x in ((i-1)*chunk.size+1):(i*chunk.size)) {
            res[x - (i-1)*chunk.size,] <- solve.quad.eq(a[x], b[x], c[x])
         }
         # return local results
         res
      }
    )
    stopImplicitCluster()
    stopCluster(cl)
    

      

  • 相关阅读:
    PowerDesigner学习 ---- 系列文章
    PowerDesigner基础使用 ---- 入门学习
    PowerDesigner ---- 数据库设计(概念模型CDM和物理模型PDM)
    PowerDesigner V16.5 安装及汉化
    在树莓派是安装并配置NTP服务
    RESTful Web API 理解
    Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限
    开启树莓派自带的VNC功能
    c#代码获取web.config配置文件里面设置的 <compilation debug="true"节点
    WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式
  • 原文地址:https://www.cnblogs.com/iupoint/p/10766387.html
Copyright © 2011-2022 走看看