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

📄 longuser.c

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include "mpi.h"#include <stdio.h>#include <stdlib.h>int add ( double *, double *, int *, MPI_Datatype * );/* * User-defined operation on a long value (tests proper handling of * possible pipelining in the implementation of reductions with user-defined * operations). */int add( double *invec, double *inoutvec, int *len, MPI_Datatype *dtype ){    int i, n = *len;    for (i=0; i<n; i++) {	inoutvec[i] = invec[i] + inoutvec[i];    }    return 0;}int main( int argc, char **argv ){    MPI_Op op;    int    i, rank, size, bufsize, errcnt = 0, toterr;    double *inbuf, *outbuf, value;        MPI_Init( &argc, &argv );    MPI_Comm_rank( MPI_COMM_WORLD, &rank );    MPI_Comm_size( MPI_COMM_WORLD, &size );    MPI_Op_create( (MPI_User_function *)add, 1, &op );        bufsize = 1;    while (bufsize < 100000) {	inbuf  = (double *)malloc( bufsize * sizeof(double) );	outbuf = (double *)malloc( bufsize * sizeof(double) );	if (! inbuf || ! outbuf) {	    fprintf( stderr, "Could not allocate buffers for size %d\n",		     bufsize );	    errcnt++;	    break;	}	value = (rank & 0x1) ? 1.0 : -1.0;	for (i=0; i<bufsize; i++) {	    inbuf[i]  = value;	    outbuf[i] = 100.0;	}	MPI_Allreduce( inbuf, outbuf, bufsize, MPI_DOUBLE, op, 		       MPI_COMM_WORLD );	/* Check values */	value = (size & 0x1) ? -1.0 : 0.0;	for (i=0; i<bufsize; i++) {	    if (outbuf[i] != value) {		if (errcnt < 10) 		    printf( "outbuf[%d] = %f, should = %f\n", i, outbuf[i],			    value );		errcnt ++;	    }	}	free( inbuf );	free( outbuf );	bufsize *= 2;    }        MPI_Allreduce( &errcnt, &toterr, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD );    MPI_Comm_rank( MPI_COMM_WORLD, &rank );    if (rank == 0) {	if (toterr == 0) 	    printf( " No Errors\n" );	else 	    printf( "*! %d errors!\n", toterr );    }    MPI_Op_free( &op );    MPI_Finalize( );    return 0;}

⌨️ 快捷键说明

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