
用吃饭举例子:
吃饭吃了一半,电话来了,你一直吃饭吃完了以后才去接,这说明你不支持并发也不支持并行。
吃饭吃了一半,电话来了,你停下来接了电话,接完继续吃饭,说明你支持并发。(此处不强调在时间点上同时进行,重点是一段时间内可以交替执行)。
吃饭吃了一半,你一边接电话一边吃饭,这说明你支持并行。
此时不难发现,并行概念可以归纳为并发概念的一个子集并发的关键在于你有处理多个任务的能力,不一定要同时,只要能交替执行。
总结如下:
比如单CPU核心下执行多线程并非是同时执行多个任务,如果你开两个线程执行,就是在你几乎不可察觉的速度不断地去切换这两个任务,已达到”同时执行的效果”。其实并没有同时执行,只是计算机执行速度太快我们无法察觉而已。
并行的关键是你有同时处理多个任务的能力。比如依旧是上面的例子。如果此时多加一个CUP。CUP1执行线程1,CUP2执行线程2。那么此时程序就是真正意义的并行。
我们下面以C 语言为例。具体语法规则可参看《高性能计算并行编程技术-MPI 并行程序设计》一书。
mpicc -o outfilename cpi.c
其中outfilename 为编译后的输出文件,cpi.c 为源代码.
可将cpi.c 下载后上传的自己目录下编译.
例如:mpicc -o cpi cpi.c
如没有安装OpenPBS 则:
mpirun -np 4 cpi
否则:(一般安装了)
之后需写一作业提交脚本.例如:submit 内容如下:
#PBS -l nodes=nodes number
#PBS -N jobname#PBS -j oecd /home/xmin/Project
/usr/local/bin/mpiexec cpi
其中 #PBS -l nodes=nodes number 为指定几个节点计算.如: nodes=4
#PBS -N jobname 为用户命名的提交作业名称.如: #PBS -N xmin
#PBS -j oe 为结果和错误输出同文件.如无此项则分别在两个文件中.
cd /home/xmin/Project 编译后的输出文件所在路径(从根目录开始).
/usr/local/bin/mpiexec cpi 为mpiexec 所在路径.
下面是完整例子:
#PBS -l nodes=4
#PBS -N xmin#PBS -j oecd /home/xmin/Project
/usr/local/bin/mpiexec cpi
提交脚本如下:
qsub submit得到如下:3565.isc.math.nankai.edu.cn
此为你的作业编号.
这样你就可得到类似xmin.o2666 的文件,打开即可看到结果.
你还可以查询作业提交情况.命令如下:qstat
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)