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

📄 ch3u_connect_sshm.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 "mpidi_ch3_impl.h"#include "pmi.h"/* FIXME: What does this routine do? *//* FIXME: It appears that this routine is used as part of the    initial "get the peers connected" code in comm_connect/accept and   spawn */#undef FUNCNAME#define FUNCNAME  MPIDI_CH3I_Connect_to_root_sshm#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_CH3I_Connect_to_root_sshm(const char * port_name, 				    MPIDI_VC_t ** new_vc){    int mpi_errno = MPI_SUCCESS;    MPIDI_VC_t * vc;    MPIU_CHKPMEM_DECL(1);    int port_name_tag;    int connected;    MPIDI_CH3_Pkt_t pkt;    int num_written;    char *cached_pg_id, *dummy_id = "";    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SSHM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SSHM);    mpi_errno = MPIDI_GetTagFromPort(port_name, &port_name_tag);    if (mpi_errno != MPIU_STR_SUCCESS) {	MPIU_ERR_SETANDJUMP(mpi_errno,MPI_ERR_OTHER, "**argstr_port_name_tag");    }    MPIU_DBG_MSG_D(CH3_CONNECT,VERBOSE,"port tag %d",port_name_tag);    if (*new_vc != NULL)    {	MPIU_DBG_MSG(CH3_CONNECT,VERBOSE,"using old connection");	vc = *new_vc;    }    else    {	MPIU_CHKPMEM_MALLOC(vc,MPIDI_VC_t *,sizeof(MPIDI_VC_t),mpi_errno,"vc");	/* FIXME - where does this vc get freed? */	*new_vc = vc;	MPIDI_VC_Init(vc, NULL, 0);	MPIDI_CH3_VC_Init(vc);    }    vc->ch.state = MPIDI_CH3I_VC_STATE_CONNECTING;    connected = FALSE;    /* Make is so that the pg_id is not matched on the other side by sending a dummy value */    cached_pg_id = MPIDI_Process.my_pg->id;    MPIDI_Process.my_pg->id = dummy_id;    mpi_errno = MPIDI_CH3I_Shm_connect(vc, port_name, &connected);    MPIDI_Process.my_pg->id = cached_pg_id;    if (mpi_errno != MPI_SUCCESS) {	MPIU_ERR_SET(mpi_errno,MPI_ERR_OTHER, "**fail");	/* FIXME: Do we want to free the vc instead? */	vc->ch.state = MPIDI_CH3I_VC_STATE_FAILED;	goto fn_exit;    }    if (!connected) {	/* FIXME: Non conforming (not internationalizable) error message.	   why not just MPIU_ERR_POP? */	mpi_errno = MPIR_Err_create_code(mpi_errno, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**fail", "**fail %s", "unable to establish a shared memory queue connection");	goto fn_exit;    }    MPIDI_CH3I_SHM_Add_to_writer_list(vc);    vc->ch.state = MPIDI_CH3I_VC_STATE_CONNECTED;    vc->ch.shm_reading_pkt = TRUE;    vc->ch.send_active = MPIDI_CH3I_SendQ_head(vc); /* MT */    MPIDI_Pkt_init(&pkt, MPIDI_CH3I_PKT_SC_CONN_ACCEPT);    pkt.sc_conn_accept.port_name_tag = port_name_tag;    mpi_errno = MPIDI_CH3I_SHM_write(vc, &pkt, sizeof(MPIDI_CH3_Pkt_t), &num_written);    if (mpi_errno != MPI_SUCCESS || num_written != sizeof(MPIDI_CH3_Pkt_t)) {	MPIU_ERR_POP(mpi_errno);    } fn_exit:    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_CONNECT_TO_ROOT_SSHM);    return mpi_errno; fn_fail:    MPIU_CHKPMEM_REAP();    goto fn_exit;}

⌨️ 快捷键说明

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