全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1257 0
2020-08-31
在多处理,R或Python中哪个更快?
第一个是R中的不同种类的循环。建议根据迭代的复杂性和大小使用不同种类的循环。
第二篇文章是Loop-Runtime Compare R,RCPP,Python,展示了非昂贵任务的并行和顺序处理性能。
这篇文章是关于昂贵的任务。
通常,对于不昂贵的任务,多处理是不合适的。直到一定程度的复杂性,将任务分配到内核(处理器管理)的成本要比按顺序运行循环的成本更高。具体来说,在Python的情况下,这是由于全局解释器锁定(GIL)引起的问题。
面临的挑战是研究哪种(R或Python)更适合处理大量昂贵的任务。为了进行比较,在Python和R中都使用了顺序for循环和多处理。
在这种特定情况下,任务是检查某个数字是否为质数。为了简化,测试从3开始而不是2。
机器是:
             i7 8700k,16Gb GDDR5 RAM
R代码:
################################################ ###############################################
library(parallel)
NumOfCores <-detectCores()-1个
集群<-makeCluster(NumOfCores)
大小<-c(100,1000,10000,20000,30000,40000,50000)
rep <-rep(0,时间=长度(大小))
z = 1
原始<-函数(i){
             chech_vec =(i-1):2
             P = i %% chech_vec
             如果(任何(P == 0)){
                 return(“ n”)
              }其他{
                 return(“ y”)
              }
}
for(大小为j){
             开始= Sys.time()
             PrimNum <-parSapply(cl =簇,X = 3:j,FUN = Prim)
             结束= Sys.time()
             rep [z] =结束-开始
             z = z + 1
}
z = 1
for(大小为j){
             PrimNum = rep(NA,次=(j))
             开始= Sys.time()
             for(3:j中的i){
                 PrimNum [i-2] <-Prim(i)
             }
             结束= Sys.time()
              rep [z] =结束-开始
              z = z + 1
}
################################################ ###############################################
等效的Python代码:
################################################ ################################# ################
导入时间
将numpy导入为np
导入多处理
从joblib导入延迟,并行,parallel_backend
核心= multiprocessing.cpu_count()-1
大小= [101、1001、10001、20001、30001、40001、50001]
rep = [0] * len(大小)
z = 0
def Prim(i):
             chech_vec = list(range(2,(i)))
             P = np.mod(i,chech_vec)
             如果有(P == 0):
                  返回“ n”
             其他:
                  返回“ y”
#更改  inner_max_num_threads没关系。此外,对于此任务,后端“线程”甚至更慢。
对于j的大小:
             开始= time.time()
             如果__name__ ==“ __main__”:
                   与parallel_backend(“ loky”,inner_max_num_threads = 2):
                           PrimNum = Parallel(n_jobs = cores)(i范围(3,j)中的延迟(Prim)
             结束= time.time()
             rep [z] =结束-开始
             z + = 1
z = 0  
对于j的大小:
             PrimNum = [0] * j
             开始= time.time()
             对于范围(3,j)中的i:
                  PrimNum = Prim(i)
             结束= time.time()
             rep [z] =结束-开始
             z + = 1
################################################ ################################# ################
结果是:

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群