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

📄 struct-empty-el.c

📁 fortran并行计算包
💻 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 single_struct_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);    /* To improve reporting of problems about operations, we       change the error handler to errors return */    MPI_Comm_set_errhandler( MPI_COMM_WORLD, MPI_ERRORS_RETURN );    err = single_struct_test();    if (verbose && err) fprintf(stderr, "error in single_struct_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;}int single_struct_test(void){    int err, errs = 0;    int count, elements;    int sendbuf[6] = { 1, 2, 3, 4, 5, 6 };    struct test_struct_1 ts1[2];    MPI_Datatype mystruct;    MPI_Request request;    MPI_Status status;    /* note: first element of struct has zero blklen and should be dropped */    MPI_Aint disps[3]     = { 2*sizeof(float), 0,       2*sizeof(int) };    int blks[3]           = { 0,               1,       2 };    MPI_Datatype types[3] = { MPI_FLOAT,       MPI_INT, MPI_INT };    ts1[0].a = -1;    ts1[0].b = -1;    ts1[0].c = -1;    ts1[0].d = -1;    ts1[1].a = -1;    ts1[1].b = -1;    ts1[1].c = -1;    ts1[1].d = -1;    err = MPI_Type_struct(3, blks, disps, types, &mystruct);    if (err != MPI_SUCCESS) {	errs++;	if (verbose) {	    fprintf(stderr, "MPI_Type_struct returned error\n");	}    }    MPI_Type_commit(&mystruct);    err = MPI_Irecv(ts1, 2, mystruct, 0, 0, MPI_COMM_SELF, &request);    if (err != MPI_SUCCESS) {	errs++;	if (verbose) {	    fprintf(stderr, "MPI_Irecv returned error\n");	}    }    err = MPI_Send(sendbuf, 6, 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 */    if (ts1[0].a != 1) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[0].a = %d; should be %d\n", ts1[0].a, 1);	}    }    if (ts1[0].b != -1) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[0].b = %d; should be %d\n", ts1[0].b, -1);	}    }    if (ts1[0].c != 2) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[0].c = %d; should be %d\n", ts1[0].c, 2);	}    }    if (ts1[0].d != 3) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[0].d = %d; should be %d\n", ts1[0].d, 3);	}    }    if (ts1[1].a != 4) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[1].a = %d; should be %d\n", ts1[1].a, 4);	}    }    if (ts1[1].b != -1) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[1].b = %d; should be %d\n", ts1[1].b, -1);	}    }    if (ts1[1].c != 5) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[1].c = %d; should be %d\n", ts1[1].c, 5);	}    }    if (ts1[1].d != 6) {	errs++;	if (verbose) {	    fprintf(stderr, "ts1[1].d = %d; should be %d\n", ts1[1].d, 6);	}    }    /* verify count and elements */    err = MPI_Get_count(&status, mystruct, &count);    if (err != MPI_SUCCESS) {	errs++;	if (verbose) {	    fprintf(stderr, "MPI_Get_count returned error\n");	}    }    if (count != 2) {	errs++;	if (verbose) {	    fprintf(stderr, "count = %d; should be 2\n", count);	}    }    err = MPI_Get_elements(&status, mystruct, &elements);    if (err != MPI_SUCCESS) {	errs++;	if (verbose) {	    fprintf(stderr, "MPI_Get_elements returned error\n");	}    }    if (elements != 6) {	errs++;	if (verbose) {	    fprintf(stderr, "elements = %d; should be 6\n", elements);	}    }    MPI_Type_free(&mystruct);    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 + -