版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、fortran语言mpi 并行计算程式设计 编 着: 郑 守 成 期 间: 民国92年 2月 12日 电 话: (03) 5776085 x 305 e-mail : .twfortran語言1mpi 并行計算程式設計1第一章 前言51.1 mpi 并行計算軟體61.2 國家高速網路與計算中心的并行計算環境71.3 在ibm 電腦系統上如何使用mpi81.3.1 ibm 電腦系統的mpi fortran程式編譯指令81.3.2 ibm 電腦系統的 job command file81.3.3 ibm 電腦系統的并行程式的執行指令111.4 在pc cluster
2、上如何使用mpi131.4.1 pc cluster上的mpi fortran程式編譯指令131.4.2 pc cluster 上的 job command file141.4.3 pc cluster 上的并行程式執行指令15第二章 無邊界資料交換的并行程式162.1 mpi 基本指令172.1.1 mpif.h include file172.1.2 mpi_init, mpi_finalize172.1.3 mpi_comm_size, mpi_comm_rank182.1.4 mpi_send, mpi_recv192.2 無邊界資料交換的循序程式 t2seq212.3 資料不切割的并
3、行程式 t2cp232.4 mpi_scatter,mpi_gather,mpi_reduce282.4.1 mpi_scatter,mpi_gather282.4.2 mpi_reduce, mpi_allreduce302.5 資料切割的并行程式 t2dcp32第三章 需要邊界資料交換的并行程式363.1 mpi_sendrecv, mpi_bcast373.1.1 mpi_sendrecv373.1.2 mpi_bcast373.2 邊界資料交換的循序程式 t3seq393.3 資料不切割的邊界資料交換并行程式 t3cp403.4 資料切割的邊界資料交換并行程式(一) t3dcp_147
4、3.5 資料切割的邊界資料交換并行程式 (二) t3dcp_252第四章 格點數不能整除的并行程式574.1 格點數不能整除的循序程式 t4seq584.2. mpi_scatterv、mpi_gatherv604.3 mpi_pack、unpack、barrier、wtime624.3.1 mpi_pack、mpi_unpack624.3.2 mpi_barrier、mpi_wtime654.4 資料切割的并行程式 t4dcp67第五章 多維陣列的并行程式725.1 多維陣列的循序程式 t5seq735.2 多維陣列資料不切割的并行程式 t5cp765.3 多維陣列末維資料切割的并行程式 t
5、5dcp855.4 與二維切割有關的 mpi 副程式925.4.1 垂直座標圖示法則 (cartesian topology)925.4.2 界定二維切割的 mpi 副程式mpi_cart_create、93mpi_cart_coords、mpi_cart_shift935.4.3 定義固定間隔資料的 mpi 副程式96mpi_type_vector、mpi_type_commit965.5 多維陣列末二維切割的并行程式 t5_2d98第六章 mpi程式的效率提昇1126.1 nonblocking資料傳送1136.2 資料傳送的合併1226.3 以邊界資料計算取代邊界資料交換1266.4輸出
6、入資料的安排1286.4.1 事先切割輸入資料1286.4.2 事後收集切割過的輸出資料131第七章 導出的資料類別1337.1導出的資料類別1347.2陣列的轉換1397.3兩方迴歸與管線法149第八章 多方依賴及sor解法1558.1四方依賴及sor解法1568.2黑白點間隔 sor 解法1598.3斑馬線 sor 解法1688.4八方依賴與四色點間隔sor解法175第九章 有限元素法程式1839.1有限元素法的循序程式1849.2有限元素法的并行程式187附錄一 撰寫c語言的mpi程式197參考書目200parallel processing without partition of 1
7、-d arrays201parallel processing with partition of 1-d arrays202parallel on the 2nd dimension of 2-d arrays without partition203parallel on the 2nd dimension of 2-d arrays with partition204partition on the 3rd dimension of 3-d arrays205第一章 前言 本章将介绍 mpi 并行计算软体、国家高速网路与计算中心现有的并行计算环境、以及在各型机器上如何使用mpi。第一节简
8、单介绍 mpi 并行计算软体。第二节介绍国家高速网路与计算中心现有的并行计算环境。第三节介绍如何在 ibm 电脑系统上使用 mpi,包括路径的设定、并行程式的编译、及并行程式的执行等。第四节介绍如何在 pc cluster 上使用 mpi,包括路径的设定、并行程式的编译、及并行程式的执行等。1.1 mpi 并行计算软体 mpi (message passing interface) 是第一个标准化的 message passing 并行语言。可以使用在 fortran、c、c+ 等语言撰写的程式上。mpi并行程式可以在分散式记忆体并行系统上执行,也可以在共用记忆体并行系统上执行。目前系统厂商所
9、提供的 mpi 软体是属于 mpi1.2 版。它提供了一百多个副程式,让程式人员来选用。mpi 协会在 1998 年公布了 mpi 2.0 版的规格,数年之后就会有 mpi 2.0 版的软体可用了。日前美国的 argonne national lab 已经公布了 mpich 1.2.0 版的整套软体,该版含有 mpi 2.0 版的部份功能。有兴趣的读者可以免费自网路下载该软体,其网址是 /mpi/mpich也可以用 anonymous ftp 下载该软体,其网址是 其下目录 (directory) pub/mp
10、i 里档名 mpich-1.2.0.tar.z 或 mpich-1.2.0.tar.gz,在该目录之下还有许多与 mpi 相关的资讯可供参考。1.2 国家高速网路与计算中心的并行计算环境 目前国家高速网路与计算中心的ibm sp2、ibm sp2 smp、ibm p690、hp spp2200、sgi origin2000和fujitsu vpp300等系统上均有该公司自备的 mpi 并行软体,pc cluster上是装用mpich 公用并行软体,也都有能力执行并行程式。但是到目前为止,只有pc cluster、ibm sp2、ibm sp2 smp和ibm p690设有一个cpu只执行一个程
11、式的并行环境,其他机器上则无此种设定。例如,若有一个用户要用四个cpu来执行其并行程式,他在ibm sp2上取得四个cpu之后,这四个cpu 就仅只执行这个并行程式直到它执行完毕为止,不会有其他程式进来跟他抢cpu时间。但他在其他机器 (如 hp spp2000) 上取得四个cpu之后,如果所有使用者对cpu的需求数量超过该系统的cpu总数时,他所取得四个cpu之中的每一个cpu,都有可能要跟其他程式以分时方式 (time sharing) 共用一个cpu。 hp spp2000和sgi origin2000为共用记忆体并行系统,这种电脑系统是16颗cpu共用一组记忆体。sp2 和vpp300
12、 是属于分散式记忆体并行系统,每一个cpu 备有它独用的记忆体。ibm sp2 smp及ibm p690 是共用记忆体及分散式记忆体混合的并行系统,sp2 smp每一个node 备有4颗cpu共用一组记忆体,目前备有42个node的smp cluster。p690每一个node 备有32颗cpu共用一组记忆体,目前备有8个node的smp cluster。sp2、sp2 smp和p690 是采用该系统专属的工作排程软体 (job scheduler) loadleveler 来安排用户的批次工作(batch job)。使用者必须备妥 loadleveler的job command file,使
13、用llsubmit指令把该批次工作交给该系统来执行。spp2000、origin2000 和 vpp300 是采用nqs (network queue system) 工作排程软体来安排用户的批次工作。使用者必须备妥nqs的job command file,使用qsub 指令把该批次工作交给各该系统来执行。pc cluster是采用dqs (distributed queue system) 工作排程软体来安排用户的批次工作,其使用方式类似nqs。1.3 在ibm 电脑系统上如何使用mpi 首先,c shell用户要在自己home directory的.cshrc 档里加入下列路径,这样才能够
14、抓得到include file (mpif.h、mpif90.h、mpi.h)、编译指令 (mpxlf、mpxlf90、mpcc)、mpi library、和 loadleveler 指令 (llsubmit、llq、llstatus、llcancel)。set lpath=(. /usr/lpp/ppe.poe/include /usr/lpp/ppe.poe/lib)set lpath=($lpath /usr/lpp/ppe.poe/bin /home/loadl/bin )set path=($path $lpath)加好上述路径之后,将.cshrc存档,再执行source .cshr
15、c指令,即可进行并行程式的编译与执行。签退 (logout) 后再签到 (login) 之后就不必再执行source .cshrc指令。1.3.1 ibm 电脑系统的mpi fortran程式编译指令 使用mpi的fortran 77并行程式,其编译器 (compiler) 一般叫做mpif77,但是在ibm电脑系统上却叫做 mpxlf。mpxlf 常用的编译选项如下 :mpxlf -o3 -qarch=auto -qstrict -o file.x file.f其中选项 -o3 是作最高级的最佳化 (level 3 optimization),可使程式的 计算速度加快数倍 -qarch=au
16、to是通知编译器该程式要在同型机器上执行 -qstrict是通知编译器不要改变计算的顺序 -o file.x是指定执行档名为file.x, 不指定时其内定 (default) 档名为 a.out1.3.2 ibm 电脑系统的 job command file 要在ibm sp2(ivy)上执行并行程式,使用者必须备妥loadleveler的job command file。例如,下面这个job command file叫做jobp4,它要在四个cpu上执行并行程式 file.x。#!/bin/csh# executable = /usr/bin/poe# arguments = /your_w
17、orking_directory/file.x euilib us# output = outp4# error = outp4# job_type = parallel# class = medium# min_processors = 4# max_processors = 4# requirements = (adapter = hps_user)# wall_clock_limit = 20# queue其中 executable = /usr/bin/poe是固定不变,poe是指parallel operating environment arguments = 执行档所在之全路径及
18、档名 output = 标准输出档名 (stdout) error= 错误讯息 (error message) 输出档名 class = sp2 cpu的分组别,使用llclass指令可以看到分组别 : short (cpu 时间上限为 12小时,共有10颗120mhz cpu) medium (cpu 时间上限为 24小时,共有64颗160mhz cpu) long (cpu 时间上限为 96小时,共有24颗120mhz cpu) min_processors = 最少的cpu数目 max_processors = 最多的cpu数目 requirements = (adapter = hps
19、_user) 是固定不变 wall_clock_limit = 该job最多需要的时间,单位为分钟 queue 是固定不变 并行计算可以使用的cpu 数目,short class最多4个cpu,medium class最多32个cpu,long class最多8个cpu。由于mpi 1.2版不具备取得cpu、控制cpu、和归还cpu 的功能,所以 min_processors和 max_processors 要填相同的数字。 要在ibm sp2 smp (ivory)上执行并行程式,使用者必须备妥loadleveler的job command file。例如,下面这个job command f
20、ile叫做jobp4,它要在四个cpu上执行并行程式 file.x。#!/bin/csh# network.mpi= css0,shared,us# executable = /usr/bin/poe# arguments = /your_working_directory/file.x euilib us# output = outp4# error = outp4# job_type = parallel# class = medium# tasks_per_node = 4# node = 1# queue由于ibm sp2 smp 每个node 含有四棵375mhz cpu共用4gb或
21、8gb的记忆体。class = sp2 smp cpu的分组别,使用llclass指令可以看到分组别 : short (cpu 时间上限为 12小时, 3个node 共有6颗cpu) medium (cpu 时间上限为 24小时,32个node 共有128颗cpu) bigmem (cpu 时间上限为 48小时, 4个node 共有16颗cpu)这个class一个node备有8gb的共用记忆体tasks_per_node=4是说明一个node选用四棵cpunode=1是说明要用一个node,一共四棵cpu并行计算可以使用的cpu 数目medium class 是8个node一共32颗cpu。
22、要在ibm p690上执行并行程式,使用者必须备妥loadleveler的job command file。例如,下面这个job command file叫做jobp8,它要在8个cpu上执行并行程式 file.x。#!/bin/csh# executable = /usr/bin/poe# network.mpi= csss,shared,us# arguments=/your-working-directory/file.x# output = outp8# error = outp8# job_type = parallel# class = 8cpu# tasks_per_node =
23、 8# node = 1# queue由于ibm p690 每个node 含有32棵1.3 ghz cpu共用128gb的记忆体。class = p690 cpu的分组别,使用llclass指令可以看到分组别 : 32cpu(cpu 时间上限为 36小时, 2个node 共有 64颗cpu) 16cpu (cpu 时间上限为 72小时, 1个node 共有 32颗cpu) 8cpu (cpu 时间上限为 72小时, 6个node 共有188颗cpu) 4cpu (cpu 时间上限为 96小时, 6个node 共有188颗cpu) serial(cpu 时间上限为 168小时, 1个node 共
24、有 32颗cpu)tasks_per_node=8是说明一个node选用8棵cpunode=1是说明要用一个node,一共8棵cpu1.3.3 ibm 电脑系统的并行程式的执行指令 要在ibm 电脑系统上执行并行程式,使用者在备妥loadleveler的job command file之后,就可以使用llsubmit指令将该job command file交给该系统排队等候执行。例如上一节的job command file例子jobp4即可用下述指令交付执行 :llsubmit jobp4工作交付之后,该工作执行的情形可用llq指令查询。要缩小查询的范围可在llq指令之后加上grep指令叙明要
25、查询的class或user id。例如上一个例子jobp4所选用的分组别为medium,就可用下述指令进行查询 :llq | grep medium llq 显示之内容有下列事项 : job_id user_id submitted status priority class running on- - - - - - -ivy1.1781.0 u43ycc00 8/13 11:24 r 50 medium ivy39 ivy1.1814.0 u50pao00 8/13 20:12 r 50 short ivy35 其中 job_id是loadleveler给交付的工作编定的工作代号 user
26、_id是使用者的login name submitted是交付工作的时刻,月/日 时:分 status是工作执行的情形 r 表 running i 表 idle (=waiting in queue) st 表 start execution nq 表 not queued,还在队伍之外 priority是交付工作的优先次序,不用更动它 class是cpu分组别 running on是执行交付工作的第一个cpu代号工作交付执行之后,如果要中止该工作的执行可用llcancel指令杀掉该工作。llcancel job_id此处的job_id就是使用llq指令所显示之使用者交付工作的工作代号。 执行
27、过llcancel 指令之后,再使用llq指令就可以看出该工作已经消失不见了。1.4 在pc cluster上如何使用mpi首先,使用mpich的c shell用户要在自己home directory的.cshrc档里加入下列路径,这样才能够抓得到include file (mpif.h、mpi.h)、编译指令 (mpif77、mpicc)、mpi library、和dqs指令。不同的pc cluster这些存放的路径可能不同,要向该系统的管理人询问。其路径设定如下 :setenv pgi /usr/local/pgiset path = ( . /usr/local/pgi/linux86/
28、bin $path)set path = ( /package/dqs _hpcserv2/bin $path)set path = ( /package/mpich _hpcserv2/bin $path)其中第一行是pgi公司(portland group inc.)软体存放的路径,第二行是pgi公司fortran77 编译器pgf77存放的路径,第三行是dqs批次工作排程软体存放的路径,第四行是mpich 编译系统存放的路径。没有购用pgi公司的软体时前面两行可以省略。1.4.1 pc cluster上的mpi fortran程式编译指令 mpich的fortran77并行程式编译器叫做
29、mpif77,其底层是使用gnu的g77 来编译,因此可以使用g77的调适选项。举例如下 :mpif77 -o3 -o file.x file.f其中选项 -o3是选用g77最高层次的调适选项 -o file.x是指定编译产生的执行档为file.x 没有指定时,内定的执行档为a.out file.f 是fortran77并行程式 如果选用pgi公司的mpi并行程式编译器mpif77,其底层是使用该公司的pgf77来编译,因此可以使用pgf77及pgf90的调适选项。其makefile举例如下 :obj = file.oexe = file.xmpi = /home/package/mpich_
30、pgilib = $(mpi)/lib/linux/ch_p4lflag = -l$(lib) -lfmpichmpif77 = $(mpi)/bin/mpif77opt = -o2 -i$(mpi)/include$(exe) : $(obj) $(mpif77) $(lflag) -o $(exe) $(obj) $(lib).f.o : $(mpif77) $(opt) -c $ mpi_hostmpirun -np 4 -machinefile mpi_host hubksp & outp4其中 #!/bin/csh 是说明这是个c shell script #$ -l qty.eq.
31、4 是向dqs要求四个cpu,qty是数量(quantity) #$ -n hup4 是说明这个工作的名字(name)叫做hup4 #$ -a user_id 是说明付费帐号(account)就是使用者帐号 #$ -cwd 是说明要在现在这个路径(working directory)上执行程式 内定的路径是home directory #$ -j y 是说明错误讯息要输出到标准输出档 $host_file 是dqs安排给这项工作的node list -np 4 hubksp 是告诉mpirun要在四个cpu上执行并行程式hubksp & outp4 是要把标准输出档写入outp41.4.3 p
32、c cluster 上的并行程式执行指令 要在pc cluster上执行并行程式,使用者在备妥dqs的job command file 之后,就可以使用qsub32指令将该job command file交给pc cluster排队等候执行。例如上一节的job command file例子jobp4即可用下述指令交付执行 :qsub32 jobp4 工作交付之后,可以使用qstat32 指令(不加参数)查询整个cluster交付工作执行的情形,使用qstat32 -f指令查询整个cluster各个node的状况。上述指令qsub32 jobp4之后使用qstat32指令显示的内容如下 :c00
33、tch00 hup4 hpcs001 62 0:1 r running 02/26/99 10:51:23 c00tch00 hup4 hpcs002 62 0:1 r running 02/26/99 10:51:23 c00tch00 hup4 hpcs003 62 0:1 r running 02/26/99 10:51:23 c00tch00 hup4 hpcs004 62 0:1 r running 02/26/99 10:51:23 -pending jobs -c00tch00 rad5 70 0:2 queued 02/26/99 19:24:32 第一栏是user_id,第二
34、栏是交付工作的名称,第三栏是cpu代号,第四栏是dqs替交付的工作编定的工作编号job_id(62),第五栏0:1的0是交付工作的优先序号, 0:1的1是该用户交付的第一个工作,第六栏的r和第七栏的running表示该工作正在执行中,最后是该工作交付时的时刻,月/日/年 时:分:秒。排队等待执行的工作则出现在pending jobs 之列,对应 running 的栏位则为 queued。工作交付执行之后,如果要中止该工作的执行可用 qdel32 指令杀掉该工作。qdel32 job_id此处的job_id就是使用qstat32指令所显示之第四栏。执行过qdel32指令之后,再使用qstat32
35、 指令就可以看出该工作已经消失不见了。第二章 无边界资料交换的并行程式 最简单的并行程式就是无边界资料交换的并行程式。本章将利用一个很简单的循序程式 (sequential program) 使用mpi指令加以并行化,并比较其计算结果以资验证。2.1节介绍六个mpi基本指令mpi_init、mpi_finalize、mpi_comm_size、 mpi_comm_rank、mpi_send、mpi_recv。2.2节介绍无边界资料交换的循序程式t2seq。2.3节说明使用这六个mpi基本指令并行化循序程式t2seq而成为并行程式t2cp。2.4节介绍另外四个常用的mpi指令 mpi_scatt
36、er、mpi_gather、mpi_reduce、 mpi_allreduce。2.5节是使用这些指令并行化循序程式t2seq而成为并行程式t2dcp。2.1 mpi 基本指令 mpi 的基本指令有下列六个,将于本节分段加以介绍。 mpi_init, mpi_finalize, mpi_comm_size, mpi_comm_rank, mpi_send, mpi_recv2.1.1 mpif.h include file 使用mpi撰写fortran并行程式时,必须在每一个程式 (包括主程式和副程式) 的宣告段落里加上include mpif.h陈述 (statement)。mpif.h档案
37、里含有编译mpi并行程式所必须的mpi字汇与mpi常数 (constant)。例如 : program driver implicit real*8 . . . include mpif.h . . . call chef( . . . ) . . . stop end subroutine chef( . . . ) implicit real*8 . . . include mpif.h . . . . . . return end读者可以在mpi软体所在之路径里查看mpif.h的内容。不同厂商设定的mpi常数也许不尽相同,但是所使用的mpi字汇则是完全一致。2.1.2 mpi_init,
38、 mpi_finalize 在叫用 (call) 其他mpi函数或副程式之前必须先叫用mpi_init副程式,来启动该程式在多个cpu上的并行计算工作。在程式结束 (stop) 之前必须叫用mpi_finalize副程式,以结束并行计算工作。所以mpi_init和mpi_finalize在主程式里只要叫用一次就够了,例如 : program t2cp parameter ( . . ) include mpif.h real*8 . . . integer . . . call mpi_init(ierr) . . . call mpi_finalize(ierr) stop end所有mpi
39、副程式引数 (argument) 的资料类别除了资料名称之外,其余的都是整数 (integer),传回的引数ierr其值为零时是正常结束,否则就有错误发生。2.1.3 mpi_comm_size, mpi_comm_rank通常在叫用过mpi_init之后,就必须叫用mpi_comm_size以得知参与并行计算的cpu个数 (nproc),及叫用mpi_comm_rank以得知我是第几个cpu (myid),第几个cpu是从0开始起算。所以第一个cpu的myid值为零,第二个cpu的myid值为1,第三个cpu 的myid 值为2,余类推。通常要在几个cpu上作并行计算是在下执行命令时决定的,
40、而不是在程式里事先设定。当然,使用者也可以在程式里事先设定要在几个cpu上作并行计算,其意义只供程式人员做参考,实际上使用几个cpu作并行计算是根据job command file里min_processors和 max_processors的设定值,或 -np 的设定值。mpi_comm_size和mpi_comm_rank 的叫用格式如下: call mpi_comm_size (mpi_comm_world, nproc, ierr) call mpi_comm_rank (mpi_comm_world, myid, ierr)引数mpi_comm_world是mpi内定的 (defau
41、lt) communicator,参与该程式并行计算的全部 cpu都是属于同一个communicator。 属于同一个communicator的各个cpu之间才可以传送资料。mpi 1.2版不具备cpu的取得与控制功能,参与并行计算的cpu颗数从程式开始执行到程式结束都是固定不变的。因此,这两个mpi副程式在一个程式里只要叫用一次就可以了。例如 : program t2cp parameter ( . . ) include mpif.h real*8 . . . integer nproc, myid call mpi_init (ierr) call mpi_comm_size (mpi_
42、comm_world, nproc, ierr) call mpi_comm_rank (mpi_comm_world, myid, ierr) . . . call mpi_finalize (ierr) stop end2.1.4 mpi_send, mpi_recv 参与并行计算的各个cpu之间的资料传送方式有两种,一种叫做 点对点通讯 (point to point communication),另外一种叫做 集体通讯 (collective communication)。此处先介绍 点对点通讯 类的mpi_send和mpi_recv, 其他常用的 点对点通讯 及 集体通讯 指令容后再
43、介绍。 一个cpu与另外一个cpu之间的资料传送属于 点对点通讯,送出资料的cpu要叫用mpi_send来送资料,而收受资料的cpu要叫用mpi_recv来收资料。一个mpi_send必须要有一个对应的mpi_recv与之配合,才能完成一份资料的传送工作。mpi_send的叫用格式如下: call mpi_send (data, icount, data_type, idest, itag, & mpi_comm_world, ierr)引数 data要送出去的资料起点,可以是纯量 (scalar) 或阵列 (array)资料 icount要送出去的资料数量,当icount的值大于一时,dat
44、a必须是阵列 data_type是要送出去的资料类别,mpi内定的资料类别如表1.1 idest是收受资料的cpu id itag要送出去的资料标签mpi data typesfortran data typesmpi_charactercharactermpi_logicallogicalmpi_integerintegermpi_real, mpi_real4real, real*4mpi_real8, mpi_double_precisionreal*8, double precisionmpi_complex, mpi_complex8complex, complex*8mpi_com
45、plex16, mpi_double_complexcomplex*16 表1.1 mpi data typesmpi_recv 的叫用格式如下: call mpi_recv (data, icount, data_type, isrc, itag, & mpi_comm_world, istatus, ierr)引数 data是要收受的资料起点 icount是要收受的资料数量 data_type是要收受的资料类别 isrc是送出资料的cpu id itag是要收受的资料标签 istatus是执行mpi_recv副程式之后的状况istatus为一整数阵列,该阵列的长度为在mpif.h里已经设定
46、的常数mpi_status_size,写法如下 integer istatus(mpi_status_size)一个cpu 同时要收受多个cpu送来的资料时,若不依照特定的顺序,而是先到先收,则其指令为 call mpi_recv( buff, icount, data_type, mpi_any_source, itag,1 mpi_comm_world, istatus, ierr)若要判别送出该资料的 cpu id 时就要用到istatus变数如下 isrc = istatus( mpi_source )mpi在传送资料 (mpi_send、mpi_recv) 时,是以下列四项构成其 信
47、封 (envelope),用以识别一件讯息 (message)。 1. 送出资料的cpu id 2. 收受资料的cpu id 3. 资料标签 4. communicator所以一个cpu送给另外一个cpu多种资料时,不同的资料要用不同的资料标签,以资识别。2.2 无边界资料交换的循序程式 t2seq t2seq是个无边界资料交换的循序程式,在test data generation段落里设定阵列b、c、d 的值,然后把这些阵列写到磁档上。其目的是便利往后的范例程式可以读入同一组资料作并行计算,用来验证其计算的结果是否正确。 这个程式的计算部份只有一个do loop,而且该loop里只有两个计算陈述,其目的是方便往后说明如何将这一类do loop并行化。实际的计算程式也许有数百个或数千个do loop,但是其并行化的方法是一样的。 program t2seq parameter (ntotal=200) real*8 a(ntotal), b(ntotal), c(ntotal), d(ntotal), sumacc test data generation and write to file input.datc do i=1,ntotal b(i)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 呱呱蔬菜店课件
- 辽宁省2025秋九年级英语全册Unit4Iusedtobeafraidofthedark写作能力提升练课件新版人教新目标版
- 辽宁省2025秋九年级英语全册Unit10You'resupposedtoshakehands写作能力提升练课件新版人教新目标版
- 2025年图像存储与通讯系统(PACS)项目发展计划
- 中职护理教学中的人文关怀
- 介入护理职业发展与继续教育
- 口腔护理现代技术详解
- 急性心血管疾病护理
- 个人护理知识普及课件下载
- 护理质量改进策略与实践
- 医疗健康大数据的精准营养方案
- 幼儿园中班交通安全教育课件
- 食堂卫生检查与考核标准建立
- 2025 年国家层面数据资产政策汇编(全景解读版)
- 2025新疆交通投资(集团)有限责任公司所属公司招聘26人笔试历年典型考点题库附带答案详解2套试卷
- 2025年成本会计考试题及答案6
- 全域土地综合整治项目社会稳定风险评估报告
- 2024-2025学年广东省深圳市福田区七年级(上)期末英语试卷
- 《证券投资学》吴晓求课后习题答案
- 消防员心理测试题目及答案大全2025
- 住院医师规范化培训急诊科模拟试题及答案
评论
0/150
提交评论