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

📄 lots-of-types.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 <math.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mpi.h"static int verbose = 0;int main(int argc, char *argv[]);int parse_args(int argc, char **argv);int lots_of_types_test(void);struct test_struct_1 {    int a,b,c,d;};int main(int argc, char *argv[]){    int err, errs = 0;    /* Initialize MPI */    MPI_Init(&argc, &argv);    parse_args(argc, argv);    err = lots_of_types_test();    if (verbose && err) fprintf(stderr, "error in lots_of_types_test\n");    errs += err;    /* print message and exit */    if (errs) {	fprintf(stderr, "Found %d errors\n", errs);    }    else {	printf(" No Errors\n");    }    MPI_Finalize();    return 0;}/* this test allocates 1024 indexed datatypes with 1024 distinct blocks * each.  it's possible that a low memory machine will run out of memory * running this test; it appears to take ~25MB of memory at this time. * -- Rob Ross, 11/2/2005 */int lots_of_types_test(void){    int err, errs = 0;    int i;    MPI_Datatype mytypes[1024];    int sendbuf[4] = { 1, 2, 3, 4 };    int count, elements;    MPI_Request request;    MPI_Status status;    /* note: first element of struct has zero blklen and should be dropped */    MPI_Aint disps[1024];    int blks[1024];    for (i=0; i < 1024; i++) {	int j;	disps[0] = 0;	blks[0]  = 4;		for (j=1; j < 1024; j++) {	    disps[j] = 4 * j;	    blks[j]  = (j % 3) + 1;	}	err = MPI_Type_indexed(1024, blks, disps, MPI_INT, &mytypes[i]);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Type_indexed returned error on type %d\n",			i);	    }	}		MPI_Type_commit(&mytypes[i]);    }    for (i=0; i < 1024; i++) {	int j;	int recvbuf[4] = { -1, -1, -1, -1 };	/* we will only receive 4 ints, so short buffer is ok */	err = MPI_Irecv(recvbuf, 1, mytypes[i], 0, 0, MPI_COMM_SELF, &request);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Irecv returned error\n");	    }	}		err = MPI_Send(sendbuf, 4, MPI_INT, 0, 0, MPI_COMM_SELF);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Send returned error\n");	    }	}		err = MPI_Wait(&request, &status);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Wait returned error\n");	    }	}		/* verify data */	for (j=0; j < 4; j++) {	    if (recvbuf[j] != sendbuf[j]) {		errs++;		if (verbose) {		    fprintf(stderr, "recvbuf[%d] = %d; should be %d\n",			    j, recvbuf[j], sendbuf[j]);		}	    }	}	/* verify count and elements */	err = MPI_Get_count(&status, mytypes[i], &count);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Get_count returned error\n");	    }	}	if (count != MPI_UNDEFINED) {	    errs++;	    if (verbose) {		fprintf(stderr, "count = %d; should be MPI_UNDEFINED (%d)\n",			count, MPI_UNDEFINED);	    }	}		err = MPI_Get_elements(&status, mytypes[i], &elements);	if (err != MPI_SUCCESS) {	    errs++;	    if (verbose) {		fprintf(stderr, "MPI_Get_elements returned error\n");	    }	}	if (elements != 4) {	    errs++;	    if (verbose) {		fprintf(stderr, "elements = %d; should be 4\n", elements);	    }	}    }    for (i=0; i < 1024; i++) {	MPI_Type_free(&mytypes[i]);    }    return errs;}int parse_args(int argc, char **argv){    /*    int ret;    while ((ret = getopt(argc, argv, "v")) >= 0)    {	switch (ret) {	    case 'v':		verbose = 1;		break;	}    }    */    if (argc > 1 && strcmp(argv[1], "-v") == 0)	verbose = 1;    return 0;}

⌨️ 快捷键说明

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