# 参考文献:
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)