美文网首页
DataCamp课程 <高效率代码> Chapter4. 多线程

DataCamp课程 <高效率代码> Chapter4. 多线程

作者: Jason数据分析生信教室 | 来源:发表于2021-07-23 08:03 被阅读0次

    高效率代码课程目录

    Chapter1. Benchmarking
    Chapter2. R语言高效化基础
    Chapter3. 查看Code内部
    Chapter4. 多线程计算

    查看CPU线程数

    会用到多线程包parallel。镜像服务器是8线程。

    # Load the parallel package
    library(parallel)
    
    # Store the number of cores in the object no_of_cores
    no_of_cores <- detectCores()
    
    # Print no_of_cores
    no_of_cores
    
    [1] 8
    

    常规parallel操作流程

    detectCores()
    [1] 8
    # Create a cluster via makeCluster
    cl <- makeCluster(2)
    # Parallelize this code
    parApply(cl,dd, 2, median)
     [1] -0.053946179 -0.168234607 -0.056308656 -0.103888726  0.202869314
     [6]  0.019541928 -0.258089759 -0.006198904 -0.054646615  0.094430957
    # Stop the cluster
    stopCluster(cl)
    
    • 指定线程数
    • 根据线程数或者实际需要创建cluster
    • parApply等多线程专用指令
    • 结束多线程

    如果是自己编写的函数的话,还需要多一步传递函数到cluster的步骤

    library("parallel")
    # Create a cluster via makeCluster (2 cores)
    cl <- makeCluster(2)
    # Export the play() function to the cluster
    clusterExport(cl,"play")
    # Re-write sapply as parSapply
    res <- parSapply(cl, 1:100, function(i) play())
    # Stop the cluster
    stopCluster(cl)
    

    最后再举个例子来比较一下多线程和单线程到底差多少。

    # Set the number of games to play
    no_of_games <- 1e5
    ## Time serial version
    system.time(serial <- sapply(1:no_of_games, function(i) play()))
       user  system elapsed 
      9.370   0.016   9.512 
    ## Set up cluster
    cl <- makeCluster(4)
    clusterExport(cl, "play")
    ## Time parallel version
    system.time(par <- parSapply(cl,1:no_of_games, function(i) play()))
       user  system elapsed 
      0.064   0.008   3.216 
    ## Stop cluster
    stopCluster(cl)
    

    4线程比单线程快了3倍。
    当然并不是什么情况下都是多线程快,大多数需要用到for循环的情况下,多线程的优势会比较明显。

    相关文章

      网友评论

          本文标题:DataCamp课程 <高效率代码> Chapter4. 多线程

          本文链接:https://www.haomeiwen.com/subject/pkpjmltx.html