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

📄 smpd_ipmi.c

📁 fortran并行计算包
💻 C
📖 第 1 页 / 共 5 页
字号:
	    printf("0: localhost: %d", exit_code);	    if (error_msg != NULL)	    {		printf(": %s", error_msg);	    }	    printf("\n");	}	else	{	    if (error_msg != NULL)	    {		printf("%s\n", error_msg);	    }	}	fflush(stdout);	smpd_dbs_finalize();	pmi_process.init_finalized = PMI_FINALIZED;#ifdef HAVE_WINDOWS_H	/* ExitProcess(exit_code); */    TerminateProcess(GetCurrentProcess(), exit_code);#else	exit(exit_code);	return PMI_FAIL;#endif    }    if(pmi_process.init_finalized < PMI_INITIALIZED)        return PMI_FAIL;    result = smpd_create_command("abort_job", pmi_process.smpd_id, 0, SMPD_FALSE, &cmd_ptr);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to create an abort command.\n");	return PMI_FAIL;    }    result = smpd_add_command_arg(cmd_ptr, "name", pmi_process.kvs_name);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to add the kvs name('%s') to the abort command.\n", pmi_process.kvs_name);	return PMI_FAIL;    }    result = smpd_add_command_int_arg(cmd_ptr, "rank", pmi_process.iproc);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to add the rank %d to the abort command.\n", pmi_process.iproc);	return PMI_FAIL;    }    result = smpd_add_command_arg(cmd_ptr, "error", (char*)error_msg);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to add the error message('%s') to the abort command.\n", error_msg);	return PMI_FAIL;    }    result = smpd_add_command_int_arg(cmd_ptr, "exit_code", exit_code);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to add the exit code(%d) to the abort command.\n", exit_code);	return PMI_FAIL;    }    /* post the write of the command */    result = smpd_post_write_command(pmi_process.context, cmd_ptr);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to post a write of the abort command.\n");	return PMI_FAIL;    }    /* and post a read for the result */    /*    result = smpd_post_read_command(pmi_process.context);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("unable to post a read of the next command on the pmi context.\n");	return PMI_FAIL;    }    */    /* let the state machine send the command and receive the result */    result = smpd_enter_at_state(pmi_process.set, SMPD_WRITING_CMD);    if (result != SMPD_SUCCESS)    {	pmi_err_printf("the state machine logic failed to handle the abort command.\n");	return PMI_FAIL;    }    if(pmi_process.iproc == 0 &&         pmi_process.singleton_mpiexec_fd != PMII_PROCESS_INVALID_HANDLE){		int status;#ifdef HAVE_WINDOWS_H        WaitForSingleObject(pmi_process.singleton_mpiexec_fd, INFINITE);#else        waitpid(pmi_process.singleton_mpiexec_fd, &status, WUNTRACED);#endif    }#ifdef HAVE_WINDOWS_H    /* ExitProcess(exit_code); */    TerminateProcess(GetCurrentProcess(), exit_code);#else    exit(exit_code);    return PMI_FAIL;#endif}int iPMI_Get_size(int *size){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (size == NULL)	return PMI_ERR_INVALID_ARG;    *size = pmi_process.nproc;    return PMI_SUCCESS;}int iPMI_Get_rank(int *rank){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (rank == NULL)	return PMI_ERR_INVALID_ARG;    *rank = pmi_process.iproc;    return PMI_SUCCESS;}int iPMI_Get_universe_size(int *size){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if(pmi_process.init_finalized == PMI_SINGLETON_INIT_BUT_NO_PM){        if(PMIi_InitSingleton() != PMI_SUCCESS){            return PMI_ERR_INIT;        }    }    if (size == NULL)	return PMI_ERR_INVALID_ARG;    *size = -1;    return PMI_SUCCESS;}int iPMI_Get_appnum(int *appnum){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (appnum == NULL)	return PMI_ERR_INVALID_ARG;    *appnum = pmi_process.appnum;    return PMI_SUCCESS;}int iPMI_Get_clique_size( int *size ){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (size == NULL)	return PMI_ERR_INVALID_ARG;    if (pmi_process.clique_size == 0)	*size = 1;    else	*size = pmi_process.clique_size;    return PMI_SUCCESS;}int iPMI_Get_clique_ranks( int ranks[], int length ){    int i;    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (ranks == NULL)	return PMI_ERR_INVALID_ARG;    if (length < pmi_process.clique_size)	return PMI_ERR_INVALID_LENGTH;    if (pmi_process.clique_size == 0)    {	*ranks = 0;    }    else    {	for (i=0; i<pmi_process.clique_size; i++)	{	    ranks[i] = pmi_process.clique_ranks[i];	}    }    return PMI_SUCCESS;}int iPMI_Get_id( char id_str[], int length ){    if(pmi_process.init_finalized == PMI_SINGLETON_INIT_BUT_NO_PM){        if(PMIi_InitSingleton() != PMI_SUCCESS){            return PMI_ERR_INIT;        }    }    return iPMI_KVS_Get_my_name(id_str, length);}int iPMI_Get_id_length_max(int *maxlen){    return iPMI_KVS_Get_name_length_max(maxlen);}int iPMI_Get_kvs_domain_id(char id_str[], int length){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (id_str == NULL)	return PMI_ERR_INVALID_ARG;    if (length < PMI_MAX_KVS_NAME_LENGTH)	return PMI_ERR_INVALID_LENGTH;    if(pmi_process.init_finalized == PMI_SINGLETON_INIT_BUT_NO_PM){        if(PMIi_InitSingleton() != PMI_SUCCESS){            return PMI_ERR_INIT;        }    }    strncpy(id_str, pmi_process.domain_name, length);    return PMI_SUCCESS;}int iPMI_Barrier(){    int result;    char count_str[20];    char str[1024];        if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (pmi_process.nproc == 1)	return PMI_SUCCESS;    /*printf("entering barrier %d, %s\n", pmi_process.nproc, pmi_process.kvs_name);fflush(stdout);*/    /* encode the size of the barrier */    snprintf(count_str, 20, "%d", pmi_process.nproc);    /* post the command and wait for the result */    result = pmi_create_post_command("barrier", pmi_process.kvs_name, NULL, count_str);    if (result != PMI_SUCCESS)    {	pmi_err_printf("PMI_Barrier failed.\n");	return PMI_FAIL;    }    /* interpret the result */    if (MPIU_Str_get_string_arg(pmi_process.context->read_cmd.cmd, "result", str, 1024) != MPIU_STR_SUCCESS)    {	pmi_err_printf("PMI_Barrier failed: no result string in the result command.\n");	return PMI_FAIL;    }    if (strcmp(str, DBS_SUCCESS_STR))    {	pmi_err_printf("PMI_Barrier failed: '%s'\n", str);	return PMI_FAIL;    }    /*printf("iPMI_Barrier success.\n");fflush(stdout);*/    return PMI_SUCCESS;}int iPMI_KVS_Get_my_name(char kvsname[], int length){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (kvsname == NULL)	return PMI_ERR_INVALID_ARG;    if (length < PMI_MAX_KVS_NAME_LENGTH)	return PMI_ERR_INVALID_LENGTH;    if(pmi_process.init_finalized == PMI_SINGLETON_INIT_BUT_NO_PM){        if(PMIi_InitSingleton() != PMI_SUCCESS){            return PMI_ERR_INIT;        }    }    strncpy(kvsname, pmi_process.kvs_name, length);    /*    printf("my kvs name is %s\n", kvsname);fflush(stdout);    */    return PMI_SUCCESS;}int iPMI_KVS_Get_name_length_max(int *maxlen){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (maxlen == NULL)	return PMI_ERR_INVALID_ARG;    *maxlen = PMI_MAX_KVS_NAME_LENGTH;    return PMI_SUCCESS;}int iPMI_KVS_Get_key_length_max(int *maxlen){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (maxlen == NULL)	return PMI_ERR_INVALID_ARG;    *maxlen = PMI_MAX_KEY_LEN;    return PMI_SUCCESS;}int iPMI_KVS_Get_value_length_max(int *maxlen){    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (maxlen == NULL)	return PMI_ERR_INVALID_ARG;    *maxlen = PMI_MAX_VALUE_LEN;    return PMI_SUCCESS;}int iPMI_KVS_Create(char kvsname[], int length){    int result;    char str[1024];    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (kvsname == NULL)	return PMI_ERR_INVALID_ARG;    if (length < PMI_MAX_KVS_NAME_LENGTH)	return PMI_ERR_INVALID_LENGTH;    if(pmi_process.init_finalized == PMI_SINGLETON_INIT_BUT_NO_PM){        if(PMIi_InitSingleton() != PMI_SUCCESS){            return PMI_ERR_INIT;        }    }    if (pmi_process.local_kvs)    {	result = smpd_dbs_create(kvsname);	return (result == SMPD_SUCCESS) ? PMI_SUCCESS : PMI_FAIL;    }    result = pmi_create_post_command("dbcreate", NULL, NULL, NULL);    if (result != PMI_SUCCESS)    {	pmi_err_printf("PMI_KVS_Create failed: unable to create a pmi kvs space.\n");	return PMI_FAIL;    }    /* parse the result of the command */    if (MPIU_Str_get_string_arg(pmi_process.context->read_cmd.cmd, "result", str, 1024) != MPIU_STR_SUCCESS)    {	pmi_err_printf("PMI_KVS_Create failed: no result string in the result command.\n");	return PMI_FAIL;    }    if (strcmp(str, DBS_SUCCESS_STR))    {	pmi_err_printf("PMI_KVS_Create failed: %s\n", str);	return PMI_FAIL;    }    if (MPIU_Str_get_string_arg(pmi_process.context->read_cmd.cmd, "name", str, 1024) != MPIU_STR_SUCCESS)    {	pmi_err_printf("PMI_KVS_Create failed: no kvs name in the dbcreate result command.\n");	return PMI_FAIL;    }    strncpy(kvsname, str, PMI_MAX_KVS_NAME_LENGTH);    /*printf("iPMI_KVS_Create success.\n");fflush(stdout);*/    return PMI_SUCCESS;}int iPMI_KVS_Destroy(const char kvsname[]){    int result;    char str[1024];    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (kvsname == NULL)	return PMI_ERR_INVALID_ARG;    if (pmi_process.local_kvs)    {	result = smpd_dbs_destroy(kvsname);	return (result == SMPD_SUCCESS) ? PMI_SUCCESS : PMI_FAIL;    }    result = pmi_create_post_command("dbdestroy", kvsname, NULL, NULL);    if (result != PMI_SUCCESS)    {	pmi_err_printf("PMI_KVS_Destroy failed: unable to destroy the pmi kvs space named '%s'.\n", kvsname);	return PMI_FAIL;    }    /* parse the result of the command */    if (MPIU_Str_get_string_arg(pmi_process.context->read_cmd.cmd, "result", str, 1024) != MPIU_STR_SUCCESS)    {	pmi_err_printf("PMI_KVS_Destroy failed: no result string in the result command.\n");	return PMI_FAIL;    }    if (strcmp(str, DBS_SUCCESS_STR))    {	pmi_err_printf("PMI_KVS_Destroy failed: %s\n", str);	return PMI_FAIL;    }    return PMI_SUCCESS;}int iPMI_KVS_Put(const char kvsname[], const char key[], const char value[]){    int result;    char str[1024];    if (pmi_process.init_finalized == PMI_FINALIZED)	return PMI_ERR_INIT;    if (kvsname == NULL)	return PMI_ERR_INVALID_ARG;    if (key == NULL)	return PMI_ERR_INVALID_KEY;    if (value == NULL)	return PMI_ERR_INVALID_VAL;    /*printf("putting <%s><%s><%s>\n", kvsname, key, value);fflush(stdout);*/    if (pmi_process.local_kvs)    {	result = smpd_dbs_put(kvsname, key, value);	return (result == SMPD_SUCCESS) ? PMI_SUCCESS : PMI_FAIL;    }    result = pmi_create_post_command("dbput", kvsname, key, value);    if (result != PMI_SUCCESS)    {	pmi_err_printf("PMI_KVS_Put failed: unable to put '%s:%s:%s'\n", kvsname, key, value);	return PMI_FAIL;    }    /* parse the result of the command */    if (MPIU_Str_get_string_arg(pmi_process.context->read_cmd.cmd, "result", str, 1024) != MPIU_STR_SUCCESS)    {	pmi_err_printf("PMI_KVS_Put failed: no result string in the result command.\n");	return PMI_FAIL;    }    if (strcmp(str, DBS_SUCCESS_STR))    {	pmi_err_printf("PMI_KVS_Put failed: '%s'\n", str);	return PMI_FAIL;

⌨️ 快捷键说明

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