我们来讲解以下如何才能编写并行程序,以及如何编译运行

我们来讲解以下如何才能编写并行程序,以及如何编译运行,第1张

我们下面以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

MPI必须是以服务的形式运行的,不能加到自己的代码中。 这涉及到进程通信,但是可以采用这样的三种形式:1,QT应用中启动一个MPI的exe进程,将参数作为启动参数传递给这个进程。2,可以在QT应用中将参数写到一个外部文件中,MPI进程就不断监听这个文件。文件有内容,MPI程序就开始执行。3,QT应用MPI进程,一个作为TCP的服务器,一个作为TCP的客户端。用套接字进行通信。

如果你是在linux上,可以参考很多IPC机制(进程间通信机制)。

并行编程模式

对等模式—程序的各个部分地位相同,功能和代码基本一致,只是处理的数据或对象不同;主从模式—程序通信进程之间的一种主从或依赖关系 。

点对点通信模式

阻塞—发送完成的数据已经拷贝出发送缓冲区,即发送缓冲区可以重新分配使用,阻塞接受的完成意味着接收数据已经拷贝到接收缓冲区,即接收方已可以使用。非阻塞—在必要的硬件支持下,可以实现计算和通信的重叠。4种通信模式:标准通信模式、缓存通信模式、同步通信模式、就绪通信模式 。

组通信

一个特定组内所有进程都参加全局的数据处理和通信 *** 作 。

功能:通信—组内数据的传输;同步—所有进程在特定的点上取得一致;计算—对给定的数据完成一定的 *** 作 。

类型:1)数据移动:广播(mpi bcast) 收集(mpi gather) 散射(mpi scater)组收集(mpi all gather)全交换(all to all);2)聚集:规约(mpi reduce)将组内所有的进程输入 缓冲区中的数据按,定 *** 作OP进行运算,并将起始结果返回到root进程的接收缓冲区扫描(mpi scan)要求每一个进程对排在它前面的进程进行规约 *** 作,结果存入自身的输出缓冲区;3)同步:路障(mpi barrier)实现通信域内所有进程互相同步,它们将处于等待状态,直到所有进程执行它们各自的MPI-BARRIER调用 。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11116340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存