检查一个交易所的执行情况
- 当几个进程同时交换消息时,可以使用同时适用于几个交换的检查。
- 这种检查有三种类型。
- 检查所有交换的完成情况。
- 检查多个交易所之间任何交易所的终止情况。
- 在几个交换中检查一个特定交换的完成情况。
- 每种支票都有两个品种。
阻止验证操作
- MPI_Wait子程序阻止进程的运行,直到消息完成。
- int MPI_Wait(MPI_Request *request, MPI_Status *status)
- MPI_Wait(request, status, ierr)
- 输入参数请求是交换操作的标识符,输出参数状态。
- 在调用MPI_Ibsend后成功执行MPI_Wait意味着可以再次使用发送缓冲区,即正在传输的数据被发送或复制到调用MPI_Buffer_attach时分配的缓冲区。
- 在这一点上,转让不能再被取消。如果没有登记相应的接收,就不能释放缓冲区。在这种情况下,可以使用MPI_Cancel子程序来释放分配给通信子系统的内存。
检查所有交流的完成情况
- 一个子程序被用来检查所有交换的完成情况。
- int MPI_Waitall(int count, MPI_Request requests[], MPI_Status statuses[] )
- MPI_Waitall(count, requests, statuses, ierr)
- 当这个子程序被调用时,进程的执行被阻止,直到所有与请求数组中的活动请求相关的交换操作被执行。这些操作的状态被返回。交换状态包含在statuses数组中。count - 交换请求的数量(请求和状态数组的大小)
- 作为MPI_Waitall子程序的执行结果,由非阻塞交换操作产生的请求被取消,并且相应的数组元素被分配MPI_REQUEST_NULL值。
- 如果一个或多个交换操作失败,MPI_Waitall子程序返回错误代码MPI_ERR_IN_STATUS,并将相应操作的错误代码值分配给状态错误字段。
- 如果操作被成功执行,该字段被赋予MPI_SUCCESS值,如果没有,但也没有错误,则赋予MPI_ERR_PENDING值。这对应于存在等待处理的交换操作请求。
雅可比的算法(循序渐进的版本)
/* Jacobi program */
#include <stdio.h>
#define L 1000
#define ITMAX 100
int i,j,it;
double A[L][L];
double B[L][L];
int main(int an, char **as)
{
printf("JAC STARTED\n");
for(i=0;i<=L-1;i++)
for(j=0;j<=L-1;j++)
{
A[i][j]=0.;
B[i][j]=1.+i+j;
}
/****** iteration loop *************************/
for(it=1; it<ITMAX;it++)
{
for(i=1;i<=L-2;i++)
for(j=1;j<=L-2;j++)
A[i][j] = B[i][j];
for(i=1;i<=L-2;i++)
for(j=1;j<=L-2;j++)