⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsendalign.c

📁 fortran并行计算包
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* * *  (C) 2003 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include <stdio.h>#include "mpi.h"#include "mpitest.h"/* Test bsend with a buffer with arbitray alignment */#define BUFSIZE 2000*4int main( int argc, char *argv[] ){    MPI_Status status;    int a[10], b[10];    int align;    char buf[BUFSIZE+8], *bptr;    int bl, i, j, rank, size;    int errs = 0;    MTest_Init( 0, 0 );    MPI_Comm_rank( MPI_COMM_WORLD, &rank );    MPI_Comm_size( MPI_COMM_WORLD, &size );    for (align = 0; align < 7; align++) {	MPI_Buffer_attach( buf+align, BUFSIZE);		for (j=0; j<10; j++) {	    for (i=0; i<10; i++) {		a[i] = (rank + 10 * j) * size + i;	    }	    MPI_Bsend( a, 10, MPI_INT, 0, 27+j, MPI_COMM_WORLD );	}	if (rank == 0) {	    	    for (i=0; i<size; i++) {		for (j=0; j<10; j++) {		    int k;		    status.MPI_TAG = -10;		    status.MPI_SOURCE = -20;		    MPI_Recv( b, 10, MPI_INT, i, 27+j, MPI_COMM_WORLD, &status );		    		    if (status.MPI_TAG != 27+j) { 			errs ++;			printf( "Wrong tag = %d\n", status.MPI_TAG );		    }		    if (status.MPI_SOURCE != i) {			errs++;			printf( "Wrong source = %d\n", status.MPI_SOURCE );		    }		    for (k=0; k<10; k++) {			if (b[k] != (i + 10 * j) * size + k) {			    errs++;			    printf( "(Align=%d) received b[%d] = %d (expected %d) from %d tag %d\n",				    align, k, b[k], (i+10*j), i, 27+j );			}		    }		}	    }	}	MPI_Buffer_detach( &bptr, &bl );	if (bptr != buf+align) {	    errs++;	    printf( "Did not recieve the same buffer on detach that was provided on init (%p vs %p)\n", bptr, buf );	}    }    MTest_Finalize( errs );    MPI_Finalize();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -