首页 理论教育基于ABAQUS的有限元子程序开发与应用:MPl并行计算成果

基于ABAQUS的有限元子程序开发与应用:MPl并行计算成果

【摘要】:不同于基于线程的并行计算,MPI实现的并行是进程级的。基于MPI的用户子程序的并行计算,总是通过一些特定的函数来实现,先简单介绍一下这些函数:●MPI_Init:告知MPI系统进行所有必要的初始化设置。它写在启动MPI并行计算的最前面。以上只是表达了作为一个MPI并行计算的基本结构,并没有真正涉及进程之间的通信,为了更好地进行并行,必然需要在进程间通信。下面给出一个具体的基于MPI的并行计算的例子:

不同于基于线程的并行计算,MPI(Message-Passing-Interface,消息传递接口)实现的并行是进程级的。它采用分布式内存系统,通过通信(message)在进程之间进行消息传递,其可扩展性好。MPI的缺点是编程模型复杂、容易出错,所以在进行并行计算之前,最好先验证一个单线程运行的正确性。

基于MPI的用户子程序的并行计算,总是通过一些特定的函数来实现,先简单介绍一下这些函数:

●MPI_Init:告知MPI系统进行所有必要的初始化设置。它写在启动MPI并行计算的最前面。

●通信子(communicator):ABA_COMM_WORLD表示一组可以互相发送消息的进程的集合。

●MPI_Comm_rank:用来获取正在调用进程的通信子中的进程号。

●MPI_Comm_size:用来得到通信子的进程数。

●MPI_Finalize:告知MPI系统MPI已经使用完毕。它总是放在做并行计算的功能块的最后,在此函数之后就不再出现任何有关MPI相关的东西了。(www.chuimin.cn)

注意:MPI_Init和MPI_Finalize函数不需要显式地调用,它们会被ABAQUS进行调用。

以上只是表达了作为一个MPI并行计算的基本结构,并没有真正涉及进程之间的通信,为了更好地进行并行,必然需要在进程间通信。下面介绍在两个进程间通信的函数,即MPI_Send和MPI_Recv,分别用于消息的发送和接收。

(1)MPI_Send:阻塞型消息发送。

(2)MPI_Recv:阻塞型消息接收。

与其他MPI程序一样,用户子程序必须包含头文件mpi.h(用于C++程序中)或mpif.h(用于Fortran程序中),才能正常使用MPI函数。下面给出一个具体的基于MPI的并行计算的例子: