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

📄 errutil.c

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 C
📖 第 1 页 / 共 4 页
字号:
       i_mid = (i_high + i_low) / 2;       c = strcmp( generic_err_msgs[i].short_name, msg );       if (c == 0) return i_mid;       if (c < 0) { i_low = i_mid + 1; }       else       { i_high = i_mid - 1; }   }   return -1;*/#endif#if MPICH_ERROR_MSG_LEVEL >= MPICH_ERROR_MSG_ALL/* Given a message string abbreviation (e.g., one that starts "**"), return the corresponding index.  For the specific * (parameterized messages), use idx = FindSpecificMsgIndex( "**msg" ); */static int FindSpecificMsgIndex( const char *msg ){    int i, c;    for (i=0; i<specific_msgs_len; i++) {	c = strcmp( specific_err_msgs[i].short_name, msg );	if (c == 0) return i;	if (c > 0)	{	    /* don't return here if the string partially matches */	    if (strncmp(specific_err_msgs[i].short_name, msg, strlen(msg)) != 0)		return -1;	}    }    return -1;}#endifint MPIR_Err_is_fatal(int errcode){    return (errcode & ERROR_FATAL_MASK) ? TRUE : FALSE;}#if 0char * simplify_fmt_string(const char *str){    char *result;    char *p;    result = MPIU_Strdup(str);    /* communicator */    p = strstr(result, "%C");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%C");    }    /* info */    p = strstr(result, "%I");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%I");    }    /* datatype */    p = strstr(result, "%D");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%D");    }    /* file */    p = strstr(result, "%F");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%F");    }    /* window */    p = strstr(result, "%W");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%W");    }    /* group */    p = strstr(result, "%G");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%G");    }    /* op */    p = strstr(result, "%O");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%O");    }    /* request */    p = strstr(result, "%R");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%R");    }    /* errhandler */    p = strstr(result, "%E");    while (p)    {	p++;	*p = 'd';	p = strstr(p, "%E");    }    return result;}#endif#define ASSERT_STR_MAXLEN 256static const char * GetAssertString(int d){    static char str[ASSERT_STR_MAXLEN] = "";    char *cur;    size_t len = ASSERT_STR_MAXLEN;    size_t n;    if (d == 0)    {	MPIU_Strncpy(str, "assert=0", ASSERT_STR_MAXLEN);	return str;    }    cur = str;    if (d & MPI_MODE_NOSTORE)    {	MPIU_Strncpy(cur, "MPI_MODE_NOSTORE", len);	n = strlen(cur);	cur += n;	len -= n;	d ^= MPI_MODE_NOSTORE;    }    if (d & MPI_MODE_NOCHECK)    {	if (len < ASSERT_STR_MAXLEN)	    MPIU_Strncpy(cur, " | MPI_MODE_NOCHECK", len);	else	    MPIU_Strncpy(cur, "MPI_MODE_NOCHECK", len);	n = strlen(cur);	cur += n;	len -= n;	d ^= MPI_MODE_NOCHECK;    }    if (d & MPI_MODE_NOPUT)    {	if (len < ASSERT_STR_MAXLEN)	    MPIU_Strncpy(cur, " | MPI_MODE_NOPUT", len);	else	    MPIU_Strncpy(cur, "MPI_MODE_NOPUT", len);	n = strlen(cur);	cur += n;	len -= n;	d ^= MPI_MODE_NOPUT;    }    if (d & MPI_MODE_NOPRECEDE)    {	if (len < ASSERT_STR_MAXLEN)	    MPIU_Strncpy(cur, " | MPI_MODE_NOPRECEDE", len);	else	    MPIU_Strncpy(cur, "MPI_MODE_NOPRECEDE", len);	n = strlen(cur);	cur += n;	len -= n;	d ^= MPI_MODE_NOPRECEDE;    }    if (d & MPI_MODE_NOSUCCEED)    {	if (len < ASSERT_STR_MAXLEN)	    MPIU_Strncpy(cur, " | MPI_MODE_NOSUCCEED", len);	else	    MPIU_Strncpy(cur, "MPI_MODE_NOSUCCEED", len);	n = strlen(cur);	cur += n;	len -= n;	d ^= MPI_MODE_NOSUCCEED;    }    if (d)    {	if (len < ASSERT_STR_MAXLEN)	    MPIU_Snprintf(cur, len, " | 0x%x", d);	else	    MPIU_Snprintf(cur, len, "assert=0x%x", d);    }    return str;}static const char * GetDTypeString(MPI_Datatype d){    static char default_str[64];    int num_integers, num_addresses, num_datatypes, combiner = 0;    char *str;    if (d == MPI_DATATYPE_NULL)	return "MPI_DATATYPE_NULL";    if (d == 0)    {	MPIU_Strncpy(default_str, "dtype=0x0", 64);	return default_str;    }    MPID_Type_get_envelope(d, &num_integers, &num_addresses, &num_datatypes, &combiner);    if (combiner == MPI_COMBINER_NAMED)    {	str = MPIDU_Datatype_builtin_to_string(d);	if (str == NULL)	{	    MPIU_Snprintf(default_str, 64, "dtype=0x%08x", d);	    return default_str;	}	return str;    }        /* default is not thread safe */    str = MPIDU_Datatype_combiner_to_string(combiner);    if (str == NULL)    {	MPIU_Snprintf(default_str, 64, "dtype=USER<0x%08x>", d);	return default_str;    }    MPIU_Snprintf(default_str, 64, "dtype=USER<%s>", str);    return default_str;}static const char * GetMPIOpString(MPI_Op o){    static char default_str[64];    switch (o)    {    case MPI_OP_NULL:	return "MPI_OP_NULL";    case MPI_MAX:	return "MPI_MAX";    case MPI_MIN:	return "MPI_MIN";    case MPI_SUM:	return "MPI_SUM";    case MPI_PROD:	return "MPI_PROD";    case MPI_LAND:	return "MPI_LAND";    case MPI_BAND:	return "MPI_BAND";    case MPI_LOR:	return "MPI_LOR";    case MPI_BOR:	return "MPI_BOR";    case MPI_LXOR:	return "MPI_LXOR";    case MPI_BXOR:	return "MPI_BXOR";    case MPI_MINLOC:	return "MPI_MINLOC";    case MPI_MAXLOC:	return "MPI_MAXLOC";    case MPI_REPLACE:	return "MPI_REPLACE";    }    /* default is not thread safe */    MPIU_Snprintf(default_str, 64, "op=0x%x", o);    return default_str;}static int vsnprintf_mpi(char *str, size_t maxlen, const char *fmt_orig, va_list list){    char *begin, *end, *fmt;    size_t len;    MPI_Comm C;    MPI_Info I;    MPI_Datatype D;/*    MPI_File F;*/    MPI_Win W;    MPI_Group G;    MPI_Op O;    MPI_Request R;    MPI_Errhandler E;    char *s;    int t, i, d, mpi_errno=MPI_SUCCESS;    void *p;    fmt = MPIU_Strdup(fmt_orig);    if (fmt == NULL)    {	if (maxlen > 0 && str != NULL)	    *str = '\0';	return 0;    }    begin = fmt;    end = strchr(fmt, '%');    while (end)    {	len = maxlen;	if (len > (size_t)(end - begin)) {	    len = (size_t)(end - begin);	}	if (len)	{	    memcpy(str, begin, len);	    str += len;	    maxlen -= len;	}	end++;	begin = end+1;	switch ((int)(*end))	{	case (int)'s':	    s = va_arg(list, char *);	    MPIU_Strncpy(str, s, maxlen);	    break;	case (int)'d':	    d = va_arg(list, int);	    MPIU_Snprintf(str, maxlen, "%d", d);	    break;	case (int)'i':	    i = va_arg(list, int);	    switch (i)	    {	    case MPI_ANY_SOURCE:		MPIU_Strncpy(str, "MPI_ANY_SOURCE", maxlen);		break;	    case MPI_PROC_NULL:		MPIU_Strncpy(str, "MPI_PROC_NULL", maxlen);		break;	    case MPI_ROOT:		MPIU_Strncpy(str, "MPI_ROOT", maxlen);		break;	    case MPI_UNDEFINED_RANK:		MPIU_Strncpy(str, "MPI_UNDEFINED_RANK", maxlen);		break;	    default:		MPIU_Snprintf(str, maxlen, "%d", i);		break;	    }	    break;	case (int)'t':	    t = va_arg(list, int);	    switch (t)	    {	    case MPI_ANY_TAG:		MPIU_Strncpy(str, "MPI_ANY_TAG", maxlen);		break;	    case MPI_UNDEFINED:		MPIU_Strncpy(str, "MPI_UNDEFINED", maxlen);		break;	    default:		MPIU_Snprintf(str, maxlen, "%d", t);		break;	    }	    break;	case (int)'p':	    p = va_arg(list, void *);	    if (p == MPI_IN_PLACE)	    {		MPIU_Strncpy(str, "MPI_IN_PLACE", maxlen);	    }	    else	    {#ifdef HAVE_WINDOWS_H		MPIU_Snprintf(str, maxlen, "0x%p", p);#else		MPIU_Snprintf(str, maxlen, "%p", p);#endif	    }	    break;	case (int)'C':	    C = va_arg(list, MPI_Comm);	    switch (C)	    {	    case MPI_COMM_WORLD:		MPIU_Strncpy(str, "MPI_COMM_WORLD", maxlen);		break;	    case MPI_COMM_SELF:		MPIU_Strncpy(str, "MPI_COMM_SELF", maxlen);		break;	    case MPI_COMM_NULL:		MPIU_Strncpy(str, "MPI_COMM_NULL", maxlen);		break;	    default:		MPIU_Snprintf(str, maxlen, "comm=0x%x", C);		break;	    }	    break;	case (int)'I':	    I = va_arg(list, MPI_Info);	    if (I == MPI_INFO_NULL)	    {		MPIU_Strncpy(str, "MPI_INFO_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "info=0x%x", I);	    }	    break;	case (int)'D':	    D = va_arg(list, MPI_Datatype);	    MPIU_Snprintf(str, maxlen, "%s", GetDTypeString(D));	    break;#if 0	case (int)'F':	    F = va_arg(list, MPI_File);	    if (F == MPI_FILE_NULL)	    {		MPIU_Strncpy(str, "MPI_FILE_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "file=0x%x", (unsigned long)F);	    }	    break;#endif	case (int)'W':	    W = va_arg(list, MPI_Win);	    if (W == MPI_WIN_NULL)	    {		MPIU_Strncpy(str, "MPI_WIN_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "win=0x%x", W);	    }	    break;	case (int)'A':	    d = va_arg(list, int);	    MPIU_Snprintf(str, maxlen, "%s", GetAssertString(d));	    break;	case (int)'G':	    G = va_arg(list, MPI_Group);	    if (G == MPI_GROUP_NULL)	    {		MPIU_Strncpy(str, "MPI_GROUP_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "group=0x%x", G);	    }	    break;	case (int)'O':	    O = va_arg(list, MPI_Op);	    MPIU_Snprintf(str, maxlen, "%s", GetMPIOpString(O));	    break;	case (int)'R':	    R = va_arg(list, MPI_Request);	    if (R == MPI_REQUEST_NULL)	    {		MPIU_Strncpy(str, "MPI_REQUEST_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "req=0x%x", R);	    }	    break;	case (int)'E':	    E = va_arg(list, MPI_Errhandler);	    if (E == MPI_ERRHANDLER_NULL)	    {		MPIU_Strncpy(str, "MPI_ERRHANDLER_NULL", maxlen);	    }	    else	    {		MPIU_Snprintf(str, maxlen, "errh=0x%x", E);	    }	    break;	default:	    /* Error: unhandled output type */	    return 0;	    /*	    if (maxlen > 0 && str != NULL)		*str = '\0';	    break;	    */	}	len = strlen(str);	maxlen -= len;	str += len;	end = strchr(begin, '%');    }    if (*begin != '\0')    {	MPIU_Strncpy(str, begin, maxlen);    }    /* Free the dup'ed format string */    MPIU_Free( fmt );    return mpi_errno;}/* Err_create_code is just a shell that accesses the va_list and then   calls the real routine.  */int MPIR_Err_create_code( int lastcode, int fatal, const char fcname[], 			  int line, int error_class, const char generic_msg[],			  const char specific_msg[], ... ){    int rc;    va_list Argp;    va_start(Argp, specific_msg);    rc = MPIR_Err_create_code_valist( lastcode, fatal, fcname, line,				      error_class, generic_msg, specific_msg,				      Argp );    va_end(Argp);    return rc;}/* * This is the real routine for generating an error code.  It takes * a va_list so that it can be called by any routine that accepts a  * variable number of arguments. */int MPIR_Err_create_code_valist( int lastcode, int fatal, const char fcname[], 				 int line, int error_class, 				 const char generic_msg[],				 const char specific_msg[], va_list Argp ){    int err_code;    int generic_idx;    int use_user_error_code = 0;    /* Create the code from the class and the message ring index */    if (MPIR_Err_abort_on_error)    {	/*printf("aborting from %s, line %d\n", fcname, line);fflush(stdout);*/	abort();    }    /* va_start(Argp, specific_msg); */

⌨️ 快捷键说明

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