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

📄 mpid_type_debug.c

📁 fortran并行计算包
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. */#include "mpiimpl.h"#include "mpid_dataloop.h"#include <stdlib.h>#include <limits.h>/* MPI datatype debugging helper routines. *  * The one you want to call is: *   MPIDU_Datatype_debug(MPI_Datatype type, int array_ct) * * The "array_ct" value tells the call how many array values to print * for struct, indexed, and blockindexed types. * */void MPIDI_Datatype_dot_printf(MPI_Datatype type, int depth, int header);void MPIDI_Dataloop_dot_printf(MPID_Dataloop *loop_p, int depth, int header);void MPIDI_Datatype_contents_printf(MPI_Datatype type, int depth, int acount);static char *MPIDI_Datatype_depth_spacing(int depth);/* note: this isn't really "error handling" per se, but leave these comments * because Bill uses them for coverage analysis. *//* --BEGIN ERROR HANDLING-- */void MPIDI_Datatype_dot_printf(MPI_Datatype type,			       int depth,			       int header){    if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {	MPIU_DBG_OUT(DATATYPE,			 "MPIDI_Datatype_dot_printf: type is a basic");	return;    }    else {	MPID_Datatype *dt_p;	MPID_Dataloop *loop_p;	MPID_Datatype_get_ptr(type, dt_p);	loop_p = dt_p->dataloop;	MPIDI_Dataloop_dot_printf(loop_p, depth, header);	return;    }}void MPIDI_Dataloop_dot_printf(MPID_Dataloop *loop_p,			       int depth,			       int header){    int i;    if (loop_p == NULL) {	MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"<null dataloop>\n"));	return;    }    if (header) {	MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,				   "digraph %p {   {", loop_p));    }    switch (loop_p->kind & DLOOP_KIND_MASK) {	case DLOOP_KIND_CONTIG:	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,	    "      dl%d [shape = record, label = \"contig |{ ct = %d; el_sz = %d; el_ext = %d }\"];",			    depth,			    (int) loop_p->loop_params.c_t.count,			    (int) loop_p->el_size,			    (int) loop_p->el_extent));	    break;	case DLOOP_KIND_VECTOR:	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,	    "      dl%d [shape = record, label = \"vector |{ ct = %d; blk = %d; str = %d; el_sz = %d; el_ext = %d }\"];",			    depth,			    (int) loop_p->loop_params.v_t.count,			    (int) loop_p->loop_params.v_t.blocksize,			    (int) loop_p->loop_params.v_t.stride,			    (int) loop_p->el_size,			    (int) loop_p->el_extent));	    break;	case DLOOP_KIND_INDEXED:	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,	    "      dl%d [shape = record, label = \"indexed |{ ct = %d; tot_blks = %d; regions = ",			    depth,			    (int) loop_p->loop_params.i_t.count,			    (int) loop_p->loop_params.i_t.total_blocks));	    	    /* 3 picked as arbitrary cutoff */	    for (i=0; i < 3 && i < loop_p->loop_params.i_t.count; i++) {		if (i + 1 < loop_p->loop_params.i_t.count) {		    /* more regions after this one */		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,		    "(%d, %d), ",			  (int) loop_p->loop_params.i_t.offset_array[i],		          (int) loop_p->loop_params.i_t.blocksize_array[i]));		}		else {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,		           "(%d, %d); ",		           (int) loop_p->loop_params.i_t.offset_array[i],			   (int) loop_p->loop_params.i_t.blocksize_array[i]));		}	    }	    if (i < loop_p->loop_params.i_t.count) {		MPIU_DBG_OUT(DATATYPE,"...; ");	    }	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,				       "el_sz = %d; el_ext = %d }\"];\n",				       (int) loop_p->el_size,				       (int) loop_p->el_extent));	    break;	case DLOOP_KIND_BLOCKINDEXED:	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,	    "      dl%d [shape = record, label = \"blockindexed |{ ct = %d; blk = %d; disps = ",			    depth,			    (int) loop_p->loop_params.bi_t.count,			    (int) loop_p->loop_params.bi_t.blocksize));	    	    /* 3 picked as arbitrary cutoff */	    for (i=0; i < 3 && i < loop_p->loop_params.bi_t.count; i++) {		if (i + 1 < loop_p->loop_params.bi_t.count) {		    /* more regions after this one */		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,		        "%d, ",			(int) loop_p->loop_params.bi_t.offset_array[i]));		}		else {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,		         "%d; ",		         (int) loop_p->loop_params.bi_t.offset_array[i]));		}	    }	    if (i < loop_p->loop_params.bi_t.count) {		MPIU_DBG_OUT(DATATYPE,"...; ");	    }	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,				      "el_sz = %d; el_ext = %d }\"];",				       (int) loop_p->el_size,				       (int) loop_p->el_extent));	    break;	case DLOOP_KIND_STRUCT:	    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,	    "      dl%d [shape = record, label = \"struct | {ct = %d; blks = ",			    depth,			    (int) loop_p->loop_params.s_t.count));	    for (i=0; i < 3 && i < loop_p->loop_params.s_t.count; i++) {		if (i + 1 < loop_p->loop_params.s_t.count) {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d, ",			    (int) loop_p->loop_params.s_t.blocksize_array[i]));		}		else {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d; ",			    (int) loop_p->loop_params.s_t.blocksize_array[i]));		}	    }	    if (i < loop_p->loop_params.s_t.count) {		MPIU_DBG_OUT(DATATYPE,"...; disps = ");	    }	    else {		MPIU_DBG_OUT(DATATYPE,"disps = ");	    }	    for (i=0; i < 3 && i < loop_p->loop_params.s_t.count; i++) {		if (i + 1 < loop_p->loop_params.s_t.count) {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d, ",			    (int) loop_p->loop_params.s_t.offset_array[i]));		}		else {		    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%d; ",			    (int) loop_p->loop_params.s_t.offset_array[i]));		}	    }	    if (i < loop_p->loop_params.s_t.count) {		MPIU_DBG_OUT(DATATYPE,"... }\"];");	    }	    else {		MPIU_DBG_OUT(DATATYPE,"}\"];");	    }	    break;	default:	    MPIU_Assert(0);    }    if (!(loop_p->kind & DLOOP_FINAL_MASK)) {	/* more loops to go; recurse */	MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,				   "      dl%d -> dl%d;\n", depth, depth + 1));	switch (loop_p->kind & DLOOP_KIND_MASK) {	    case DLOOP_KIND_CONTIG:		MPIDI_Dataloop_dot_printf(loop_p->loop_params.c_t.dataloop, depth + 1, 0);		break;	    case DLOOP_KIND_VECTOR:		MPIDI_Dataloop_dot_printf(loop_p->loop_params.v_t.dataloop, depth + 1, 0);		break;	    case DLOOP_KIND_INDEXED:		MPIDI_Dataloop_dot_printf(loop_p->loop_params.i_t.dataloop, depth + 1, 0);		break;	    case DLOOP_KIND_BLOCKINDEXED:		MPIDI_Dataloop_dot_printf(loop_p->loop_params.bi_t.dataloop, depth + 1, 0);		break;	    case DLOOP_KIND_STRUCT:		for (i=0; i < loop_p->loop_params.s_t.count; i++) {		    MPIDI_Dataloop_dot_printf(loop_p->loop_params.s_t.dataloop_array[i],					      depth + 1, 0);		}		break;	    default:		MPIU_DBG_OUT(DATATYPE,"      < unsupported type >");	}    }    if (header) {	MPIU_DBG_OUT(DATATYPE,"   }\n}");    }    return;}void MPIDI_Datatype_printf(MPI_Datatype type,			   int depth,			   MPI_Aint displacement,			   int blocklength,			   int header){    char *string;    int size;    MPI_Aint extent, true_lb, true_ub, lb, ub, sticky_lb, sticky_ub;    MPIU_THREADPRIV_DECL;        MPIU_THREADPRIV_GET;    if (HANDLE_GET_KIND(type) == HANDLE_KIND_BUILTIN) {	string = MPIDU_Datatype_builtin_to_string(type);	if (type == MPI_LB) sticky_lb = 1;	else sticky_lb = 0;	if (type == MPI_UB) sticky_ub = 1;	else sticky_ub = 0;    }    else {	MPID_Datatype *type_ptr;	MPID_Datatype_get_ptr(type, type_ptr);	string = MPIDU_Datatype_combiner_to_string(type_ptr->contents->combiner);	sticky_lb = type_ptr->has_sticky_lb;	sticky_ub = type_ptr->has_sticky_ub;    }    MPIR_Nest_incr();    NMPI_Type_size(type, &size);    NMPI_Type_get_true_extent(type, &true_lb, &extent);    true_ub = extent + true_lb;    NMPI_Type_get_extent(type, &lb, &extent);    ub = extent + lb;    MPIR_Nest_decr();    if (header == 1) {	/*               012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 */	MPIU_DBG_OUT(DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");	MPIU_DBG_OUT(DATATYPE,"depth                   type         size       extent      true_lb      true_ub           lb(s)           ub(s)         disp       blklen\n");	MPIU_DBG_OUT(DATATYPE,"------------------------------------------------------------------------------------------------------------------------------------------\n");    }    MPIU_DBG_OUT_FMT(DATATYPE,(MPIU_DBG_FDEST,"%5d  %21s  %11d  %11d  %11d  %11d  %11d(%1d)  %11d(%1d)  %11d  %11d",		    depth,		    string,		    (int) size,		    (int) extent,		    (int) true_lb,		    (int) true_ub,		    (int) lb,		    (int) sticky_lb,		    (int) ub,		    (int) sticky_ub,		    (int) displacement,		    (int) blocklength));    return;}/* --END ERROR HANDLING-- *//* longest string is 21 characters */char *MPIDU_Datatype_builtin_to_string(MPI_Datatype type){    static char t_char[]             = "MPI_CHAR";    static char t_uchar[]            = "MPI_UNSIGNED_CHAR";    static char t_byte[]             = "MPI_BYTE";    static char t_wchar_t[]          = "MPI_WCHAR";    static char t_short[]            = "MPI_SHORT";    static char t_ushort[]           = "MPI_UNSIGNED_SHORT";    static char t_int[]              = "MPI_INT";    static char t_uint[]             = "MPI_UNSIGNED";    static char t_long[]             = "MPI_LONG";    static char t_ulong[]            = "MPI_UNSIGNED_LONG";    static char t_float[]            = "MPI_FLOAT";    static char t_double[]           = "MPI_DOUBLE";    static char t_longdouble[]       = "MPI_LONG_DOUBLE";    static char t_longlongint[]      = "MPI_LONG_LONG_INT";    static char t_longlong[]         = "MPI_LONG_LONG";    static char t_ulonglong[]        = "MPI_UNSIGNED_LONG_LONG";    static char t_schar[]            = "MPI_SIGNED_CHAR";    static char t_packed[]           = "MPI_PACKED";    static char t_lb[]               = "MPI_LB";    static char t_ub[]               = "MPI_UB";

⌨️ 快捷键说明

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