精华内容
下载资源
问答
  • 并行计算语言
    千次阅读
    2020-05-06 11:17:02

    最近经常要用R跑程序,每次都要跑好久- -。不加并行,CPU利用率实在低。在此记录下相关的语句。

    先导入相关包

    library(foreach)
    library(doParallel)
    library(parallel)
    
    no_cores <- detectCores(no_cores) - 1  # 检测核数,并设置使用的数量
    cl = makeCluster(no_cores);	  
    registerDoParallel(cl);
    # 由于程序中需要用igraph包,这里需给每个线程导入igraph包
    clusterEvalQ(cl, library(igraph))		 
    
    # 循环主体
    res <- foreach( i = 1:N, .combine = 'c')%dopar%     # .combine 设置了数据的输出格式,'c'代表按向量输出
    {
    	.....  # 计算的核心代码
    	result <- xxxx   		# xxxx是要输出的变量,R里会返回最后一句的变量,
    							# 因此要写上这句,保证输出的是想要的值
    }
    
    # 结束后,记得释放线程
    stopCluster(cl)
    
    更多相关内容
  • R语言 并行计算 向量是R语言最基本的数据类型,它的下标从1开始,正的下标用于提取向量中对应的元素,负的下标则去掉向量中对应的元素,通过逻辑运算提出向量中满足条件的元素
  • 但每个零模型的构建相互独立,可同时进行,R语言并行计算可加快beta-NTI的计算速度。本文内容包括以下三个部分:1.如何理解群落构建;2.如何理解beta-NTI;3.如何利用R语言并行计算beta-NTI。初学者可能对群落构建和...
  • Fortran多核并行计算

    2021-08-19 22:00:28
    讲义简要介绍采用Fortran语言和OpenMP技术进行并行计算的知识,配有视频教程,主要内容包括: 第一讲 OpenMP基础 第二讲 并行域 第三讲 OMP指令(上) 第四讲 OMP指令(下) 第五讲 THREADPRIVATE属性 第六讲 OMP并行...
  • 对spearman相关性分析进行并行化运行可大大节省计算时间,为此我们手写了spearman相关性分析函数来实现并行化运行。为方便讲解,本文以OTU table 数据为例,对OTU进行两两spearman相关性分析,获得相关系数r和显著性...
  • 之前我们介绍了计算beta-NTI(beta nearest taxon index)来进行群落构建分析,但利用beta-NTI推测群落构建有一个前提条件,即系统发育树必须要有遗传信号(phylogenetic signal),但某些功能基因(例如nifH)的...
  • 使用fortran语言进行mpi并行计算的编程教程,适合新手进行下载和学习
  • java并行计算圆周率

    2020-12-23 14:15:29
    实现4线程状态下3分钟计算圆周率小数点后62~63万位
  • 之前我们介绍了计算beta-NTI(beta nearest taxon index)来进行群落构建分析。|beta-NTI| >2说明决定性过程主导,其中beta-NTI >2说明OTU的遗传距离发散,为生物交互作用主导,beta-NTI 则说明OUT的遗传距离收敛为...
  • MapReduce是Google提出的分布式并行计算编程模型,用于大规模数据的并行处理。Ma-pReduce模型受函数式编程语言的启发,将大规模数据处理作业拆分成若干个可独立运行的Map任务,分配到不同的机器上去执行,生成某种格式的...
  • 多核和多CPU编程——并行计算模型

    千次阅读 2022-03-26 10:17:06
    PRAM(Parallel Random Access Machine,随机存取并行机器)模型是一种抽象的并行计算模型,即共享存储的SIMD模型。其假定有一个无限容量大的共享存储器,具有N个(N可达无限)功能、架构相同的处理器,相关处理器...

    一、几种并发模型

    一般来说,模型是抽象出来具有某些普遍特征的单元。它可能是一个(组)公式,也可能是一个算法等等。目前比较常见的几个模型有如下几个:
    1、PRAM
    PRAM(Parallel Random Access Machine,随机存取并行机器)模型是一种抽象的并行计算模型,即共享存储的SIMD模型。其假定有一个无限容量大的共享存储器,具有N个(N可达无限)功能、架构相同的处理器,相关处理器随时可以通过共享存储单元相互交互数据。根据处理器对共享存储单元同时读、同时写的限制,PRAM模型可以分为下面几种:
    a、互斥读和互斥写(Exclusive-Read and Exclusive-Write)的PRAM模型,简称为EREW
    b、并发读但互斥写(Concurrent-Read and Exclusive-Write)的PRAM模型,简称为CREW
    c、互斥读和并发写(Exclusive-Read and Concurrent-Write)的PRAM模型,简称为ERCW
    d、并发读和并发写(Concurrent-Read and Concurrent-Write)的PRAM模型,简称为CRCW
    但同时写是有困难的,因此对CRCW模型进一步描述:
    a、所有处理器并发写相同的数,即公共(common)的PRAM-CRCW(CPRAM-CRCW)
    b、按优先级的处理器写,即优先(Priority)的PRAM-CRCW(PPRAM-CRCW)
    c、任意处理器自由写,即任意(Arbitrary)的PRAM-CRCW(APRAM-CRCW)
    d、向存储器中写入所有处理器写的数的和,即求和(Sum)的PRAM-CRCE,(SPRAM-CRCW)

    2、LogP
    LogP是面向高性能并行计算的模型,1993年D.Culer等人提出了点对点通信的多计算机模型,即充分利用分布式网络存储、多处理理器网络通信机制等,在屏蔽具体的网络结构和算法通过消息机制来实现的一种模型。
    LogP模型是一种分布存储的、点到点通信的多处理机模型,网络通信抽象为4个主要参数:
    a、L(Latency) 最大通信延迟,即源模块到目的模块传递消息(一个或几个字)通信所需要的时间上限
    b、o(overhead)通信开销,即处理机发送或接收消息的时间长度,在这段时间里处理不能执行其它操作
    c、g(gap)通信间隔,即处理机连续发送或接收消息时的最小时间间隔,此值的倒数即通信带宽
    d、P(Processor)处理机/存储器模块个数,其每个周期即为处理器的单位运行时间
    假设每个周期完成一次操作,L,o和g都可以表示成处理器周期的整数倍

    3、BSP
    BSP(Bulk Synchronous Parallel)模型最早由Leslie和Valiant 在 1990 年提出,它是一种异步MIMD-DM模型(DM: distributed memory,SM: shared memory),BSP模型支持消息传递系统,块内异步并行,块间显式同步,其基于master/worker同步(lock-step)执行, 数据从输入的队列中读取。BSP并行计算模型由下面4个参数描述:
    P:处理器的数量(带有存储器)
    s:处理器的运行速度
    g:每秒本地计算操作的数目/通信网络每秒传送的字节数,即选路器吞吐率,视为带宽因子 (time steps/packet)=1/bandwidth
    L:路障同步器,全局的同步时间开销,即全局同步之间的时间间隔 (Barrier synchronization time)
    BSP计算模型既是体系结构模型也是并行设计的方法。整体上是一个同步设计,同时具有水平和垂直两个方向的结构。并且,其引入了超步(superstep)概念,它和LogP在效率是等效的。

    二、特点和简要分析

    1、PRAM
    PRAM模型适合于并行算法的表达、分析和比较,使用简单,隐藏了很多关于并行计算机的底层细节(处理器间通信、存储系统管理和进程同步),略加设计和修改就可以应用在不同的并行计算平台上。此模型中,可灵活的按实际情况增加进程通信及同步相关设计。
    其也有如下不足:
    a、此模型使用一个存储容量较小的全局共享存储器,不适合于分布存储结构的MIMD机器
    b、此模型是同步的,即通过同步来实现的异步,不能反映现实中很多系统的异步性
    c、此模型假定要求太高(如对处理机间通信无延迟、无限带宽和无开销)这个不现实
    d、此模型假设处理机有限或无限,对并行任务的增大无开销
    e、引模型对锁线程技术和流水线预取技术未能描述,略显滞后

    2、LogP
    LogP模型相对PRAM模型来说更接近实际,对通信和信息交换方面的开销都进行了处理,特别是对多线程的应用更是相对合理。
    a、正如上面所说,对网络IO和处理机之间的瓶颈进行了说明。抓住了网络与处理机之间的性能瓶颈。真正通过异步操作实现处理机间的消息通信
    b、较好的适应了多线程和虚拟处理机(VP)技术
    c、消息延迟不确定,但延迟上限不超过L
    d、LogP模型可以更适用一些好的策略,如作业分配,计算与通信平等以及平衡的通信模式等
    e、算法实际运行时间可估算。
    此模型的不足之处在于对网络通信模式描述模糊,对流水线和缓存等没有考虑,同时多线程的操作带来Context切换的开销,编程的复杂度上升且需要对P2P路由器通信有了解。

    3、BSP
    a、 BSP模型将计算划分为一个一个的超步(superstep),有效避免死锁
    b、 它将处理器和路由器分开,强调了计算任务和通信任务的分开,而路由器仅仅完成点到点的消息传递,不提供组合、复制和广播等功能,这样做既掩盖具体的互连网络拓扑,又简化了通信协议
    c、 采用障碍同步的方式以硬件实现的全局同步是在可控的粗粒度级,从而提供了执行紧耦合同步式并行算法的有效方式,而程序员并无过分的负担(BSP model eliminates the need for programmers to manage memory, assign communication and perform low-level synchronization. Threads of the program are assigned (typically in a randomized way) by the machine to the processors)
    d、 在分析BSP模型的性能时,假定局部操作可以在一个时间步内完成,而在每一个超级步中,一个处理器至多发送或接收h条消息。假定s是传输建立时间,所以传送h条消息的时间为gh+s,如果 ,则L至少应该大于等于gh。很清楚,硬件可以将L设置尽量小,而软件可以设置L的上限。在实际使用中,g可以定义为每秒处理器所能完成的局部计算数目与每秒路由器所能传输的数据量之比。如果能够合适的平衡计算和通信,则BSP模型在可编程性方面具有主要的优点,而直接在BSP模型上执行算法,这个优点将随着g的增加而更加明显
    e、提供对PRAM模型所设计的算法,可以模拟一些PRAM的方法实现

    三、总结

    不同串行化的模型结构只有冯诺伊曼计算模型,并行计算的设计其实不少,除了上面的常见的,还有SEDA阶段式事件驱动架构和C^3模型等。但是其实哪种优劣还是得看应用场景和具体情况。倒是BSP的应用中,有Google的Pregel和大数据分析的Spark,更为程序员们知道。目标要宏大,但实现要聚焦,这才是学习的目的和行动的方式。
    在这里插入图片描述

    展开全文
  • R语言并行计算

    千次阅读 2020-08-23 16:41:54
    一直以来,总觉得并行计算是种很高深的技术,需要系统性的学习才能掌握。直到最近工作中进行大量循环计算,动辄十几个小时,实在是被整崩溃了,于是百度了一下,惊喜的发现R有很傻瓜的并行计算用法,完全满足基本的...

      一直以来,总觉得并行计算是种很高深的技术,需要系统性的学习才能掌握。直到最近工作中进行大量循环计算,动辄十几个小时,实在是被整崩溃了,于是百度了一下,惊喜的发现R有很傻瓜的并行计算用法,完全满足基本的计算需求,这里简单记录一下。

      R语言的并行可以用parallel包,这个包是自带的,不用下载,直接library即可。它本质上相当于打开多个R控制台,然后将任务拆分后让这些控制台计算,等各部分计算完成后再合在一起呈现出来。

      完成一次并行计算需要的函数主要有:makeCluster、clusterExport、clusterEvalQ、clusterApply、parLapply、parSapply、parApply等。

      makeCluster(spec, type, ...)用于创建并行集合。参数spec可以理解为线程数,或并行计算“打开R控制台”的数量;参数type默认值为"PSOCK",是一种组织并行计算的底层结构,这个参数还可以选"FORK"。

      clusterEvalQ(cl = NULL, expr)用于在各线程中运行一些表达式,通常是用于加载各种包。参数cl表示要调用的并行集合(即makeCluster函数的运行结果);参数expr表示表达式。

      clusterExport(cl = NULL, varlist, envir = .GlobalEnv) 用于导入需要的变量。参数cl表示要调用的并行集合(即makeCluster函数的运行结果);参数varlist表示要导入的变量名称集合,相当于打开多个R控制台后在每个控制台中导入这些变量;参数envir,表示上述变量的来源,默认值.GlobalEnv表示变量从当前全局环境中导入。

      clusterApply、parLapply、parSapply、parApply等函数用于并行计算,用法类似apply函数族,只不过参数中要额外加入调用的并行集合cl。

      下面举一个简单的例子,使用quantmod包的getSymbols函数下载股票“600030.ss”和“000001.sz”的收盘价并输出最大值:

    library(parallel)
    ## 构建变量
    src <- "yahoo"
    codes <- c("600030.SS", "000001.SZ")
    ## 构建函数,提取数据并计算最大值
    FUN <- function(x){
      setSymbolLookup(XXX =list(name = x, src = src))
      getSymbols("XXX")
      res <- max(XXX[, paste0(x, '.Close')])
      return(res)
    }
    ## 构建线程数为2的并行集合
    cl = makeCluster(2)
    ## 函数FUN中需要src, 导入变量src
    clusterExport(cl, varlist = 'src')
    ## 加载使用的包quantmod
    clusterEvalQ(cl, expr = library(quantmod))
    ## 计算
    res <- clusterApply(cl = cl, x = codes, fun = FUN)
    ## 输出结果
    res
    
    
    > res
    [[1]]
    [1] 37.82
    
    [[2]]
    [1] 17.22

      计算结果显示两只股票的最高收盘价格分别是37.82和17.22。

      parallel包的基本用法就介绍完了,它的计算使用了类“apply”函数的计算方式,如果想用循环,可以尝试foreach包。

    展开全文
  • 编程语言Julia并行计算实现模式探讨
  • 中国科学院软件研究所并行实验室ppt,这个Julia编程语言的资料适合初学者。Julia 是一个新的高性能动态高级编程语言。...Julia 是个灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。
  • Fortran语言+MPI+并行计算程序设计
  • 本文实例讲述了Python基于pyCUDA实现GPU加速并行计算功能。分享给大家供大家参考,具体如下: Nvidia的CUDA 架构为我们提供了一种便捷的方式来直接操纵GPU 并进行编程,但是基于 C语言的CUDA实现较为复杂,开发周期...
  • R语言--并行计算(parallel、foreach包)

    万次阅读 2020-01-06 22:26:09
    ​R语言是单核计算语言,在数据建模或计算过程中,常常出现相同或相似任务的重复计算,一般操作是for循环处理或采用apply族函数处理,为了更快完成计算,采用并行计算是更优的选择。 本文采用R语言中的parallel包与...

    ​R语言是单核计算语言,在数据建模或计算过程中,常常出现相同或相似任务的重复计算,一般操作是for循环处理或采用apply族函数处理,为了更快完成计算,采用并行计算是更优的选择。

    本文采用R语言中的parallel包与foreach包实现并行计算,并针对单变量并行和多变量并行计算这两个常用场景做了函数封装。

    0.环境&软件

    • win10 64bit

    • R 3.6.1

       

    1.安装包

    install.packages("foreach")install.packages("parallel")install.packages("doParallel")

    2.单变量并行

    单变量并行计算,是最常见的应用场景,函数的动态参数只有一个,对动态参数进行遍历计算。采用parallel包实现。

    # 单变量并行计算single_parallel <- function(func,iterable,...){  "  :param func:被并行函数  :param iteralbe:func的1个动态参数(vector、list)  :param ...:func的静态参数  :return list,与iterable等长  "  #1.加载包  library(parallel)  #2.计算计算机内核数  cores <- detectCores(logical = FALSE)  #3.打开并行计算  cl <- makeCluster(cores)  #4.给每个单独内核传递变量,函数等  clusterExport(cl,deparse(substitute(func)))  #5.开始并行计算(用法与sapply类似)  result <- parSapply(cl,iterable,func,...)  #6.关闭并行计算  stopCluster(cl)  return(result)}

    其中,第4步比较重要,表示向每个进程的R session传入被并行遍历和一些全局变量。

    3.多变量并行

    多变量并行,是另一个常见的应用场景,是单变量并行的一个拓展,可以理解为mapply函数的并行版本,多变量并行允许传入多个动态参数,采用foreach包实现。

    # 多变量并行计算multi_parallel <- function(func,...,MoreArgs=NULL){  "  :param func:被并行函数  :param ...:func的多个动态参数  :param MoreArgs:func的静态参数(list)  :return list  "  # 加载包  library(foreach)  library(doParallel)  library(parallel)  # 内核数  cores <- detectCores(logical = FALSE)  # 打开  cl <- makeCluster(cores)  # 注册  registerDoParallel(cl)  # 并行计算  dots <- list(...)  # 动态参数list  result <- foreach(i=seq(length(dots))) %dopar%     do.call(func,c(lapply(dots,`[`,i),MoreArgs))  # 数据与参数组成list传入函数  # 关闭  stopCluster(cl)  return(result)}

    4.结果展示

    测试single_parallel和multi_parallel函数,代码以及结果如下。

    # 单变量并行测试代码single_parallel(log,1:10)single_parallel(round,runif(10),digits=1)# 多变量并行测试代码multi_parallel(paste,c("a","b"),c("c","d"),MoreArgs = list(sep="_"))

    结果:


    展开全文
  • R语言中的并行计算实现

    千次阅读 2019-07-29 12:31:20
    并行计算有显性并行和隐式并行, 隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLAS,H2O(参考我的博客)等 显性并行:parallel(主打lapply应用)、foreach(主打for循环)、SupR、还有利用GPU的办法(gpuR) 介绍...
  • 编程语言-基于面向云服务的Python并行计算的研究.pdf
  • Python 计算从1-N(N可以任何数)内的素数(并行计算、多线程优化计算)
  • 大量遗留的串行代码需要进行并行化改造,而并行程序复杂性及并行计算平台多样性导致改造成本较高.为此,设计了一种基于标记语言的三层并行编程框架,完成了从串行程序层到并行中间代码层、并行中间代码层到目标并行...
  • R语言中的并行计算汇总

    千次阅读 2019-02-26 21:02:02
    R语言运行在CPU单核单线程上,使用并行计算原因是程序运行时间太长。大部分程序都可以进行并行化改造以提高运算性能 1.lapply 只需要一个参数(list\vector\array\matrix\data.frame),和一个以该参数为输入的函数...
  • 以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称核好了),觉得去折腾并行没啥意义(除非在做IO密集型任务)。然后自从用上了32核128GB内存,看到 htop ...
  • R语言并行计算beta-NTI值

    千次阅读 热门讨论 2021-07-06 10:23:10
    R语言并行构建零模型,加快beta-NTI值的计算
  • R语言并行计算(kendall相关系数篇)

    千次阅读 2020-12-22 12:15:59
    对于属性较多的数据,我们一般都会去计算两两属性之间的相关性,用以探讨属性之间的关系.相对于皮尔森相关系数,我们更喜欢使用spearman和kendall相关系数,因为作为非参数相关系数,稳定性更好.一般来说,计算kendall相关...
  • 什么是并行计算

    万次阅读 多人点赞 2020-01-15 14:26:19
    原文出处:并行计算简介 并行计算简介 (本人刚刚完成这篇长文章的翻译,尚未认真校对。若里面有翻译错误和打字错误敬请谅解,并请参考原贴) 1 摘要 最近项目需要实现程序的并行化,刚好借着翻译这篇帖子的机会...
  • R语言实现并行计算[parallel,Rdsm]

    千次阅读 2020-04-29 21:34:53
    R语言实现并行计算[parallel,Rdsm] 最近在R中的学习并行计算 整个人被各种函数整的头都大了 所以准备专门写一条博文来总结 所谓R中的并行无非是 snow包multicore包和foreach包 但很遗憾的是只有第一个能够在win下...
  • 并行计算与MPI

    万次阅读 多人点赞 2019-06-01 16:54:08
    并行计算 1.1. 相关背景 (1)从1986年到2002年,微处理器的性能以平均50%的速度不断提升。但从2002年开始,单处理器的性能提升速度下降到每年大约20%,这个差距是巨大的。所以,从2005年起,大部分主流的CPU制造商...
  • 并行计算与云计算有什么关系?

    千次阅读 2021-06-29 06:08:39
    1、并行计算并行计算其实早就有了,所有大型编程语言都支持多线程,多线程就是一种简单的并行计算方式,多个线程并行地争抢CPU时间。并行计算(Parallel Cpmputing)是指同时使用多种计算机资源解决计算问题。并行计算...
  • R语言中的并行计算

    千次阅读 2016-06-12 15:06:35
    众所周知,在大数据时代R语言有两个弱项,其中一个就是只能使用单线程计算。但是R在2.14版本之后,R就内置了parallel包,强化了R的并行计算能力。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,475
精华内容 74,590
关键字:

并行计算语言