并行计算 Parallel Computing 方匡南 厦门大学教授 博士生导师.

Slides:



Advertisements
Similar presentations
四川财经职业学院会计一系会计综合实训 目录 情境 1.1 企业认知 情境 1.3 日常经济业务核算 情境 1.4 产品成本核算 情境 1.5 编制报表前准备工作 情境 1.6 期末会计报表的编制 情境 1.2 建账.
Advertisements

主编:邓萌 【点按任意键进入】 【第六单元】 教育口语. 幼儿教师教育口 语概论 模块一 幼儿教师教育口语 分类训练 模块二 适应不同对象的教 育口语 模块三 《幼儿教师口语》编写组.
第一組 加減法 思澄、博軒、暐翔、寒菱. 大綱 1. 加減法本質 2. 迷思概念 3. 一 ~ 七冊分析 4. 教材特色.
海南医学院附 院妇产科教室 华少平 妊娠合并心脏病  概述  妊娠、分娩对心脏病的影响  心脏病对妊娠、分娩的影响  妊娠合病心脏病的种类  妊娠合并心脏病对胎儿的影响  诊断  防治.
植树节的由来 植树节的意义 各国的植树节 纪念中山先生 植树节的由来 历史发展到今天, “ 植树造林,绿化祖国 ” 的热潮漫卷 了中华大地。从沿海到内地,从城市到乡村,涌现了多少 造林模范,留下了多少感人的故事。婴儿出世,父母栽一 棵小白怕,盼望孩子和小树一样浴光吮露,茁壮成长;男 女成婚,新人双双植一株嫩柳,象征家庭美满,幸福久长;
客户协议书 填写样本和说明 河南省郑州市金水路 299 号浦发国际金融中 心 13 层 吉林钰鸿国创贵金属经营有 限公司.
浙江省县级公立医院改革与剖析 马 进 上海交通大学公共卫生学院
第二章 环境.
教师招聘考试 政策解读 讲师:卢建鹏
了解语文课程的基本理念,把握语文素养的构成要素。 把握语文教育的特点,特别是开放而有活力的语文课程的特点。
北台小学 构建和谐师生关系 做幸福教师 2012—2013上职工大会.
福榮街官立小學 我家孩子上小一.
第2期技職教育再造方案(草案) 教育部 101年12月12日 1 1.
企业员工心态管理培训 企业员工心态管理培训讲师:谭小琥.
和 解 剂.
历史人物的研究 ----曾国藩 组员: 乔立蓉 杜曜芳 杨慧 组长:马学思 杜志丹 史敦慧 王晶.
教育部高职高专英语类专业教学指导委员会 刘黛琳 山东 • 二○一一年八月
每周法治热点幻灯版:个人信息倒卖产业链悄然形成 小心,千万别让自己在网上“裸奔”
淡雅诗韵 七(12)班 第二组 蔡聿桐.
第七届全国英语专业院长/系主任高级论坛 汇报材料
小數怕長計, 高糖飲品要節制 瑪麗醫院營養師 張桂嫦.
回归教材、梳理知识、突出能力 ——2015年历史二轮复习思考 李树全 西安市第八十九中学.
制冷和空调设备运用与维修专业 全日制2+1中等职业技术专业.
高职高专院校人才培养工作水平评估指标体系解读
会计信息分析与运用 —浙江古越龙山酒股份有限公司财务分析 组员:2006级工商企业管理专业 金国芳 叶乐慧 魏观红 徐挺挺 虞琴琴.
第六章 人体生命活动的调节 人体对外界环境的感知.
芹菜 英语051班 9号 黄秋迎 概论:芹菜是常用蔬菜之一,既可热炒,又能凉拌,深受人们喜爱。近年来诸多研究表明,这是一种具有很好药用价值的植物。 别名:旱芹、样芹菜、药芹、香芹、蒲芹 。 芹菜属于花,芽及茎类。
2012年 学生党支部书记工作交流 大连理工大学 建工学部 孟秀英
北京市职业技能鉴定管理中心试题管理科.
2014吉林市卫生局事业单位招聘153名工作人员公告解读
各類所得扣繳法令 與申報實務 財政部北區國稅局桃園分局 103年9月25日
初級游泳教學.
爱国卫生工作的持续发展 区爱卫办 俞贞龙.
第八章 数学活动 方程组图象解法和实际应用
本课内容提要 一、汇率的含义 二、汇率变化与币值的关系 三、汇率变化的影响. 本课内容提要 一、汇率的含义 二、汇率变化与币值的关系 三、汇率变化的影响.
散文鉴赏方法谈.
比亚迪集成创新模式探究 深圳大学2010届本科毕业论文答辩 姓名:卓华毅 专业:工商管理 学号: 指导老师:刘莉
如何撰写青年基金申请书 报 告 人: 吴 金 随.
点击输 入标题 点击输入说明性文字.
泻下剂 泻下剂 定义: 凡以泻下药为主组成, 具有通便、泻热、攻积、 逐水等作用,治疗里实证的 方剂,称为泻下剂。 1.
财富涌动 合作共赢 湖州丝绸府与您共创辉煌.
教学目的、重点及难点 教学目的:主要分析构建社会主义和谐社会的重要性和紧迫性,介绍我们党提出构建社会主义和谐社会的理论渊源和现实依据,论述构建社会主义和谐社会的指导思想、基本原则和目标任务,帮助学生深刻认识构建社会主义和谐社会的科学涵义和重要意义,了解关于构建社会主义和谐社会的主要方针政策。 重点:
儿科护理 说课 李国琴.
觀念‧許文龍和他的奇美王國 組別:第13組 組員:陳欣婷 24號 陳子瑄 35號 陳彥良 50號 指導老師:邱素伶老師.
征 管 改 革 的 变 化 您感受到了吗 (纳税服务版) 开封市地方税务局宣 尊敬的纳税人,尊敬的领导,同志们大家好:
仰望星空与脚踏实地 深一模反思 龙城高级中学 高三年级 政治科组 邢晨钟.
湖南师大附中高三政治第二次月考 试题讲评 试题讲评.
高考历史答题 技巧与方法.
厘清监管边界 畅通券商创新通道 吴晓灵 清华大学五道口金融学院院长 全国人大常委、财经委副主任委员
舆情管理与危机应对 主讲人:杨博智.
跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾. 跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾.
营业税改征增值税试点 政策培训 货物和劳务税科 2012年9月27日.
技术试验及其方法 制作者 : 贾琼瑞
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
夯实基础 提质增效 促进机关工作规范化再上新水平
黑色产业链行情分析及展望 浙商期货研究中心 同创,同享,同成长。.
我是情緒管理小高手 黃玲蘭老師.
建筑业营改增专项政策解析 天坛分局 都小粉.
9/12/2017 保养 客房的清洁与 高安市职教中心.
R 基础培训 Mango - Solutions ShangHai China.
【STL標準樣版函式庫】 STL(Standard Template Library),即標準樣版函式庫,是一個具有工業標準、高效率的C++函式庫。它包含於C++標準函式庫(C++ Standard Library)中,是ANSI/ISO C++標準中,最新的、也是極具革命性的一部分。STL包含了諸多在電腦科學領域裏所常用的基本資料結構和基本演算法。為廣大C++程式師們提供了一個可擴展的應用框架,高度實現了軟體的可複用性。這種現象有些類似於Microsoft.
Introduction to Bioinformatics
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
网页计费优质业务申请说明 ***公司.
MATLAB 程式設計入門篇 初探MATLAB
105學年度 新北市英語歌曲演唱競賽 志工工作會議 105年11月18日 9:30-10:00 碧華國小演講廳 新北市三重區碧華國小.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
基础信贷法律知识 讲解人:岳杨.
本中心主要研究者: 申办者: 合同研究组织:
判斷(選擇性敘述) if if else else if 條件運算子.
Presentation transcript:

并行计算 Parallel Computing 方匡南 厦门大学教授 博士生导师

R是一个统计计算语言,虽然功能非常强大,但是有一个比较严重的缺陷就是计算速度比较慢(这其实是所有高级语言面临的共同问题),尤其当要处理大数据或者需要计算很多循环的时候,R在计算速度上的缺陷就更为明显。

目录 Contents 一、提高R语言的计算速度 二、R语言的并行计算 三、HPC多线程并行计算

Improve computing speed of R 1 提高R语言计算速度 Improve computing speed of R

改进R语言运算速度的方法 最简单的方法就是尽量少使用循环,能用矩阵运输尽量用矩阵来运算(这也是我们在初级教程《R数据分析-方法与案例详解》一书中推荐的)。该方法的好处是相对简单,不需要学习其他语言,但不是所有程序都可以完全简化到矩阵运算,还会使程序的可读性降低。 用C或者Fortran编写核心的运算,然后再用R调用编译这些函数。这种方法是目前运算效率最高的方法,也是很多统计编程大牛常用的方法,比如Stanford统计系那几个大牛(Hastie、Tibshirani、Friedman等)编写的packages就是用的这种方法。但并不是所有人都懂C或者Fortran。而且前期投入成本较大。 利用compiler package提高运算速度。这是一种折中的方法,即将属于解释性语言的R代码提前编译为低级语言的字节代码(byte code)来提升R的运算速度,简单地讲就是将R的程式码编译后再执行,可提高执行的速度。该方法的好处是简单方便,可以很大程度上提升计算速度,

我们这里重点介绍一下compiler 包的运用。compiler包的作者是University of Iowa的Luke Tierney,下面是在R语言中使用compiler包的一个例子,操作环境要求R 2.13以上的版本。 > library ( compiler ) > f <- function ( x ) { + s <- 0 + for ( y in x ) s <- s + y + return ( s ) + } > fc <- cmpfun ( f ) > x <- 1 : 10000000 > system.time ( f ( x ) ) 用户系统流逝 4.757 0.018 4.773 > system.time ( fc ( x ) ) 1.287 0.001 1.288

Parallel Computing of R 2 R语言的并行计算 Parallel Computing of R

上一节介绍了几种常用的提高R计算速度的方法,它们在具体使用时都会存在一些 局限性。其实,还有一种强大的方法用来提高R的计算速度,那就是并行计算。 所谓并行计算,是指同时使用多种计算资源解决计算问题的过程,是提高计算机系 统计算速度和处理能力的一种有效手段。 它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干 个部分,各部分均由一个独立的处理机来并行计算。 并行计算又分为数据并行和任务并行两种,R的并行计算主要通过它内置的任务并 行包来实现,包括parallel包和foreach包,接下来我们会分别介绍这两个包。

并行计算的基本思路 建立M个工作节点,对每个进程做基本的初始化 将所需数据传输到每个工作节点 将任务分割成M份传输到各个工作节点进行计算 重复上述过程进行进一步的计算 关闭工作节点

(一)parallel包 在进行并行计算前,首先需要了解计算机或者服务器的性能。 R提供了detectCores()来查看计算机的逻辑核心数,detectCores ( logical = FALSE ) 来查看计算机的物理核心数。逻辑核心一般会大于其物理核心, 是采用多线程方式对物理核心处理器的性能提升。 当然,该函数只是显示的计算机的可用核心,并不代表执行当前任务时可 用核心数。 parallel包的思路和lapply()函数类似,都是将输入数据分割成几份,然后计 算并把结果整合在一起,只不过,parallel并行计算是用不同的CPU来运算

Parallel包并行计算步骤 设置需要调用的工作节点,如调用两个节点进行并行计算: cl <- makeCluster ( getOption ( "cl.cores" , 2 ) 采用不同的函数进行并行计算 关闭开辟的节点:stopCluster ( cl ) 接下来我们使用4个例子对上述步骤2进行说明,在这之前先运行library ( parallel ) 加载parallel包。

例:16. 1 (1)clusterExport ( cl = NULL , varlist , envir = 例:16.1 (1)clusterExport ( cl = NULL , varlist , envir = .GlobalEnv ),将全局变量传输到各个工作节点上;clusterCall ( cl = NULL , fun , ... ),在各个工作节点上,执行函数fun > cl <- makeCluster ( getOption ( "cl.cores" , 2 ) ) > xx <- 1 : 2 > yy <- 3 : 4 > clusterExport ( cl , c ( "xx" , "yy" ) ) > clusterCall ( cl , function ( z ) xx + yy + sin(z) , pi ) > stopCluster ( cl ) [[1]] [1] 4 6 [[2]]

例:16.1 (2)clusterEvalQ ( cl = NULL , expr ),这个函数与clusterCall功能相似,区别在于clusterCall调用的是函数,而clusterEvalQ调用的是表达。 > clusterEvalQ ( cl , { + # set up each worker. Could also use clusterExport ( ) + library ( boot ) + cd4.rg <- function ( data , mle ) MASS :: mvrnorm ( nrow ( data ) , mle$m , mle$v ) + cd4.mle <- list ( m = colMeans ( cd4 ) , v = var ( cd4 ) ) + } )

例:16. 1 (3)clusterApply ( cl = NULL , x , fun , 例:16.1 (3)clusterApply ( cl = NULL , x , fun , ... ),这个函数表示将向量x的每一个值带入函数fun 进行计算。例如clusterApply ( cl , 1 : 2 , get ( "+" ) , 3 ),cl为集群数,1:2为输入变量值,"+" 为即将进行的计算,3为 "+" 函数的另一参数 > fxy <- function ( x , y ) { + x ^ 2 + sin ( y ) – 1 + } > Z <- clusterApply ( cl , 1 : 10 , fxy , y = 2 ) > z <- unlist ( Z ) > z [1] 0.9092974 3.9092974 8.9092974 15.9092974 24.9092974 35.9092974 48.9092974 [8] 63.9092974 80.9092974 99.9092974

例:16.1 (4) > M <- matrix ( rnorm ( 50000000 ) , 100 , 500000 ) > Mysort <- function ( x ) { + return ( sort ( x ) [ 1 : 10 ] ) + } > do_apply <- function ( M ) { + return ( apply ( M , 2 , mysort ) ) > do_parallel <- function ( M , ncl ) { + cl <- makeCluster ( getOption ( "cl.cores" , ncl ) ) + ans <- parApply ( cl , M , 2 , mysort ) + stopCluster ( cl ) + return ( ans )

例:16.1 (4) > system.time ( ans <- do_apply ( M ) ) 用户系统流逝 70.92 0.28 71.71 > system.time ( ans2 <- do_parallel ( M , 2 ) ) 10.22 5.89 43.43

例:16.1 (5) > set.seed ( 123 ) > clusterCall ( cl , function ( ) rnorm ( 1 ) ) [[1]] [1] 0.4499589 [[2]] [1] -1.50794 [1] 1.010458 [1] 0.9822696

例:16.1 (5) > clusterSetRNGStream ( cl , iseed = 123 ) # 给集群内的随机数的生成设置随机种子 > clusterCall ( cl , function ( ) rnorm ( 1 ) ) [[1]] [1] -0.9685927 [[2]] [1] -0.4094454 > clusterCall (cl , function ( ) rnorm ( 1 ) )

(二)foreach包与doParallel包 doParalle多与foreach包一同使用,doParallel包使foreach并行计算成为可能。foreach的功能类似于for 或者lapply函数,其最大的好处在于代码简单而且容易采用并行方式进行计算。foreach可进行并行或串行计算,为了提示计算机foreach将采用并行计算的方式,在开辟工作节点的基础上,1需声明并行计算将要用到的节点数。声明方式如下: > library ( foreach ) > library ( doParallel ) > cl <- makeCluster ( getOption ( "cl.cores" , 2 ) ) > registerDoParallel ( cl ) …… > stopCluster ( cl )

在进行并行节点数目的声明后,可以采用getDoParWorkers()对目前的工作节点 数进行确定。 接下来我们同样使用几个例子来说明foreach包的基本应用和注意事项。

例:16.2 (1)foreach与for loop的关系 > X <- matrix ( 0 , nr = 10 , nc = 10 ) > for ( i in 1 : 10 ) { + X [ i , ] <- 5 * i – rnorm ( 10 , mean = i ) + } # 改写成foreach为 > X <- foreach ( i = 1 : 10 , .combine = 'rbind' ) %do% { 5 * i – rnorm ( 10 , mean = i ) } # 改写为并行计算格式为 > X <- foreach ( i = 1 : 10 , .combine = 'rbind' ) %dopar% { 5 * i – rnorm ( 10 , mean = i ) }

在例16.2(1)中,我们对矩阵X进行了赋值操作。其中%do%与%dopar%都为 二进制操作,而且%dopar%将原问题分配到不同的工作节点进行并行计算。另 外,有一个需要注意的地方是 .combine的使用。.combine为%do%或%dopar%计 算结果的结合方式。例16.2(1)中的 .combine = rbind表示将各个节点返回的 结果作为行进行合并处理。常见的 .combine的形式有“c”,“cbind”,“rbind” 或者其他函数形式。详细情况见例16.2(2)。

例:16.2 (2) .combine的函数形式 > cfun <- function ( x , y ) { + c ( x [ 1 ] , y [ 2 ] ) + } > foreach ( i = 1 : 3 , .combine = 'cbind' ) %do% { z <- i : ( i + 5 ) } result.1 result.2 result.3 [1,] 1 2 3 [2,] 2 3 4 [3,] 3 4 5 [4,] 4 5 6 [5,] 5 6 7 [6,] 6 7 8 > foreach ( i = 1 : 3 , .combine = 'rbind' ) %do% { z <- i : ( i + 5 ) } [,1] [,2] [,3] [,4] [,5] [,6] result.1 1 2 3 4 5 6 result.2 2 3 4 5 6 7 result.3 3 4 5 6 7 8 > foreach ( i = 1 : 3 , .combine = 'cfun' ) %do% { z <- i : ( i + 5 ) } [1] 1 4

例16. 2(2)中的前两个例子比较容易理解,我们着重解释一下第3个例子。在 第3个例子中, 例16.2(2)中的前两个例子比较容易理解,我们着重解释一下第3个例子。在 第3个例子中,.combine整合结果的方式为首先取result.1的第一个元素与result.2 的第二个元素结合形成向量c ( 1 , 3 ),然后取c ( 1 , 3 ) 的第一个元素1与result.3 的第二个元素4 合并形成 c ( 1 , 4 )。 例16.2(1)和例16.2(2)中用于迭代运算的变量i是一个向量,但foreach的迭 代运算并不局限于向量,可以为列表矩阵等任意一种格式。在进行计算时, foreach函数首先将该变量自动转化为迭代器iterator格式,之后进行迭代运算。 例16.2(3)给出了一个更为一般的例子。

例:16.2 (3) iterator格式的迭代 > library ( iterators ) > foreach ( i2 = iter ( list ( x = 1 : 3 , y = 10 , z = c ( 7 , 8 ) ) ) , .combine = 'c' ) %do% { i2 } [1] 1 2 3 10 7 8 在例16.2(3)中第一次迭代带入运算的是x = 1 : 3,而第二次迭代带入运算的 是y = 10,第三次迭代带入运算的是z = c ( 7 , 8 )。 在很多时候,程序中可能存在多重循环或者条件选择。这时可用%:%进行条件 嵌套,用例16.2(4)和例16.2(5)分别说明条件选择嵌套情况,以及两重循 环嵌套情况。

例:16.2 (4)条件选择嵌套 # a quick sort function > qsort <- function ( x ) { + n <- length ( x ) + if ( n == 0 ) {x + } else { + p <- sample ( n , 1 ) + # 统计比x [ p ] 小的值 + smaller <- foreach ( y = x [ -p ] , .combine = c ) %:% when ( y <= x [ p ] ) %do% y + # 统计比x [ p ] 大的值 + larger <- foreach(y=x[-p], .combine=c) %:% when(y > x [ p ] ) %do% y + c ( qsort ( smaller ) , x [ p ], qsort ( larger ) ) # 采用递归的方法排序。 + } + } > qsort ( runif ( 12) ) # 对随机生成的12个数进行排序

例:16.2 (5)多重循环嵌套 > sim <- function ( x , y ) {10 * x + y} > avc <- 1 : 4 > bvc <- 1 : 4 > x <- matrix ( 0 , length ( avc ) , length ( bvc ) ) > for ( j in 1 : length ( bvc ) ) { + for ( i in 1 : length ( avc ) ) + x [ i , j ] <- sim ( avc [ i ] , bvc [ j ] ) + } # 改写为foreach格式 > x <- foreach ( b = bvc , .combine = 'cbind' ) %:% + foreach ( a = avc , .combine = 'c' ) %do% { + sim ( a , b ) + }

在本节的最后,我们就工作节点等返回节点的顺序做一个说明。 在本节的最后,我们就工作节点等返回节点的顺序做一个说明。.inorder = TRUE可以控制results的产生顺序与迭代变量的顺序相同。当结果顺序并不影响分析目的时,可采用 .inorder = FALSE的设置提高程序的运行效果。

Multithreading Parallel 3 HPC多线程并行计算 Multithreading Parallel

接下来这一节具体说明在计算机集群中如何将R程序并行。具体 的实现步骤包括: 单机DOS执行命令测试 计算机集群执行命令(多进程运行程序)

这个过程有以下的注意事项: 并行计算首先需要在HPC上进行,可能不同地方的HPC执行方 式有些不同,本例以厦门大学经济学院的HPC为例。执行路径 和文件存储路径均应设置在网络路径内,在HPC内显示的是Z 盘 并行计算时,传到各个核心上的参数只能是一个,且取值范围 为正整数

并行计算过程中,有些核心会由于出错而终止某一项任务。在 显示任务失败时,并不是全部都失败而是有部分程序失败了

被传输核心上的程序的输出必须以文件的形式保存而后汇总。 命名需和传输到该核心的参数值相关,方便区分

由于采用的是多进程,尽量避免在程序中嵌套并行计算 如果需要调用R包,需在程序里首先进行安装,且安装时要提 供镜像

接下来我们通过一个例子进行说明,比如要并行名为exp_111.R的程序。 其中,前三行程序为必需的,第1句表示读入dos系统中的操作,第2句是 找到参数位置并读入,第3句将参数转化为数值。之所以Args [ ] 中是6, 和后面的输入有关系。 另外,ncvreg包是需要安装的,如果要安装其他包则有两种途径:(1)由 HPC管理员安装;(2)在library之前加install.packages ( ‘ncvreg’ , repos = ’ http://mirrors.xmu.edu.cn/CRAN/’ )。

> Args <- commandArgs ( ) > T <- Args [ 6 ] > T <- as.numeric ( T ) > library ( ncvreg );library ( MASS ) > source ( 'AIC_CV.R' );source ( 'beta_calculate.R' );source ( 'cross_log.R' ) # 相应的文件AIC_CV.R 等需要提前放在相应路径下。 > nfold <- 2;n <- 10; p <- 50;ro <- 0.5;g <- 5; K <- p / g;gama <- 5 > Lambda1 <- c ( 0.03 , 0.05 , 0.07 , 0.09 , 0.1 , 0.3 ) > Lambda2 <- c ( 0.07 , 0.08 , 0.09 , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 ) > sigma <- matrix ( , g , g ) > for ( ii in 1 : g ) { + for ( jj in ii : g ) { + sigma [ ii , jj ] <- ro ^ abs ( ii - jj ) + sigma [ jj , ii ] <- sigma [ ii , jj ] + } + }

> b <- vector ( ) > b [ 1 ] <- 0 > b [ 2 : 26 ] <- rep ( c ( 1 , 1 , 1 , 1 , 1 ) , each = 5 ) > b [ 27 : ( p + 1 ) ] <- 0 > b0 <- rep ( 0 , (p + 1 ) ) > as.numeric ( Sys.time ( ) ) -> t > set.seed ( ( t - floor ( t ) ) * 1e8 -> seed) > print ( seed ) > set.seed ( T * 200000 ) > X <- matrix ( , n , p ) > for ( i in 1 : K ) { + X [ , ( g * ( i - 1 ) + 1 ) : ( g * i ) ] <- mvrnorm ( n = 100 , rep ( 0 , g ) , sigma ) + } > X <- cbind ( 1 , X ) > prob1 <- 1 / ( 1 + exp ( - X %*% b ) ) > y = rbinom ( n , 1 , prob = prob1 )

给出上述exp_111.R程序之后,下面我们就来详细叙述将它并行的过程。 > A <- diag ( 1 , nc = ( p + 1 ) , nr = ( p + 1) ) > A [ 2 : ( p + 1 ) , 2 : ( p + 1 ) ] <- ( cor ( X [ , 2 : ( p + 1 ) ] ) ) ^ 3 > beta <- AIC_CV ( X, y , b0 , Lambda1 , Lambda2 ) # 执行的函数结果必须保存,保存在“//hpcserver-soe/HPCUserFile$/fanxinyan/”之后的文件里 > write.csv ( beta , paste0 ( '//hpcserver-soe/HPCUserFile$/fanxinyan/R 并行/parallel with R/' , + 'beta' , T , '.csv' ) ) 给出上述exp_111.R程序之后,下面我们就来详细叙述将它并行的过程。

(一)单机DOS执行命令测试 1) 打开DOS界面:开始 → Command Prompt,或开始 → 运行,输入“cmd”, 回车。

(一)单机DOS执行命令测试 2)将路径设置到存放文件的(\\hpcserver-soe\HPCUserFile$\fanxinyan\)Z盘。方 法:

(一)单机DOS执行命令测试 3) 执行R 和exp_111 文件,输入参数值为10 4)检查输出文件

(二)计算机集群执行命令(多进程运行程序) 1) 打开 HPC job Manager。 2)点击新建参数扫描作业。

(二)计算机集群执行命令(多进程运行程序) 3)进入如下配置界面,主要设置红色圈起来的位置。其中起始值和最终值 表示传输参数的取值范围。命令行表示执行的DOS界面下的操作。工作目录 必须设置且按如下格式设置到Z盘。任务名可以自己命名,也可以保留默认。

(二)计算机集群执行命令(多进程运行程序) 4)设置完成后单击“提交”按钮。可以从“我的作业”观察程序运行情况。

谢 谢! Thank You 方匡南 xmufkn@xmu.edu.cn 请扫描加微信