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

📄 ch3_shm_memory.c

📁 fortran并行计算包
💻 C
📖 第 1 页 / 共 2 页
字号:
    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);    return MPI_SUCCESS; fn_fail:    goto fn_exit;}#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Attach_to_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)/*   MPIDI_CH3I_SHM_Attach_to_mem - attach to an existing shmem queue*/int MPIDI_CH3I_SHM_Attach_to_mem(MPIDI_CH3I_Shmem_block_request_result *pInput,                                MPIDI_CH3I_Shmem_block_request_result *pOutput){    int mpi_errno;    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    /* Create the shared memory object */    {	int shmflag = 0;#ifdef HAVE_SHM_RW	shmflag |= SHM_R | SHM_W;#endif		pOutput->id = shmget(pInput->key, pInput->size, shmflag );    }    if (pOutput->id == -1)    {	pOutput->error = errno;	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**shmget", "**shmget %d", pOutput->error); /*"Error in shmget, %d", pOutput->error);*/	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);	return mpi_errno;    }    pOutput->addr = NULL;    pOutput->addr = shmat(pOutput->id, NULL, SHM_RND);    if (pOutput->addr == (void*)-1)    {	pOutput->error = errno;	pOutput->addr = NULL;	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**shmat", "**shmat %d", pOutput->error); /*"Error from shmat %d", pOutput->error);*/	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);	return mpi_errno;    }    shmctl(pOutput->id, IPC_RMID, NULL);    pOutput->error = MPI_SUCCESS;    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    return MPI_SUCCESS;}#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Unlink_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_CH3I_SHM_Unlink_mem(MPIDI_CH3I_Shmem_block_request_result *p){    int ret_val;    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    ret_val = shmctl(p->id, IPC_RMID, NULL);    if (ret_val == -1)    {#ifdef EIDRM	if (errno != EIDRM)#endif	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**shmctl", "**shmctl %d %d", p->id, ret_val);	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);	return mpi_errno;    }    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    return mpi_errno;}#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Release_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_CH3I_SHM_Release_mem(MPIDI_CH3I_Shmem_block_request_result *p){    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    shmdt(p->addr);    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    return MPI_SUCCESS;}/* END OF SVSY_SHM */#elif defined(USE_WINDOWS_SHM)#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Get_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)/* MPIDI_CH3I_SHM_Get_mem - allocate and get the address and size of a    shared memory block */int MPIDI_CH3I_SHM_Get_mem(int size, 			   MPIDI_CH3I_Shmem_block_request_result *pOutput){    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);    if (size == 0 || size > MPIDU_MAX_SHM_BLOCK_SIZE ) {	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**arg", 0);	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);	return mpi_errno;    }    /* Create the shared memory object */    MPIDI_Generate_shm_string(pOutput->key,sizeof(pOutput->key));    pOutput->id = CreateFileMapping(	INVALID_HANDLE_VALUE,	NULL,	PAGE_READWRITE,	0, 	size,	pOutput->key);    if (pOutput->id == NULL)     {	pOutput->error = GetLastError();	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**CreateFileMapping", "**CreateFileMapping %d", pOutput->error); /*"Error in CreateFileMapping, %d", pOutput->error);*/	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);	return mpi_errno;    }    pOutput->addr = NULL;    pOutput->addr = MapViewOfFileEx(	pOutput->id,	FILE_MAP_WRITE,	0, 0,	size,	NULL	);    if (pOutput->addr == NULL)    {	pOutput->error = GetLastError();	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**MapViewOfFileEx", "**MapViewOfFileEx %d", pOutput->error);	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);	return mpi_errno;    }    pOutput->size = size;    pOutput->error = MPI_SUCCESS;    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_GET_MEM);    return MPI_SUCCESS;}#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Attach_to_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)/*   MPIDI_CH3I_SHM_Attach_to_mem - attach to an existing shmem queue*/int MPIDI_CH3I_SHM_Attach_to_mem(MPIDI_CH3I_Shmem_block_request_result *pInput, MPIDI_CH3I_Shmem_block_request_result *pOutput){    int mpi_errno;    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    /* Create the shared memory object */    MPIU_DBG_PRINTF(("MPIDI_CH3I_SHM_Attach_to_mem: Creating file mapping of size %d named %s\n", pInput->size, pInput->key));    pOutput->id = CreateFileMapping(	INVALID_HANDLE_VALUE,	NULL,	PAGE_READWRITE,	0, 	pInput->size,	pInput->key);    if (pOutput->id == NULL)     {	pOutput->error = GetLastError();	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**CreateFileMapping", "**CreateFileMapping %d", pOutput->error); /*"Error in CreateFileMapping, %d", pOutput->error);*/	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);	return mpi_errno;    }    pOutput->addr = NULL;    pOutput->addr = MapViewOfFileEx(	pOutput->id,	FILE_MAP_WRITE,	0, 0,	pInput->size,	NULL	);    if (pOutput->addr == NULL)    {	pOutput->error = GetLastError();	mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, FCNAME, __LINE__, MPI_ERR_OTHER, "**MapViewOfFileEx", "**MapViewOfFileEx %d", pOutput->error);	MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);	return mpi_errno;    }    pOutput->error = MPI_SUCCESS;    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_ATTACH_TO_MEM);    return MPI_SUCCESS;}#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Unlink_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_CH3I_SHM_Unlink_mem(MPIDI_CH3I_Shmem_block_request_result *p){    int mpi_errno = MPI_SUCCESS;    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    /* Windows requires no special handling */    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_UNLINK_MEM);    return mpi_errno;}/*@   MPIDI_CH3I_SHM_Release_mem -    Notes:@*/#undef FUNCNAME#define FUNCNAME MPIDI_CH3I_SHM_Release_mem#undef FCNAME#define FCNAME MPIDI_QUOTE(FUNCNAME)int MPIDI_CH3I_SHM_Release_mem(MPIDI_CH3I_Shmem_block_request_result *p){    MPIDI_STATE_DECL(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    UnmapViewOfFile(p->addr);    CloseHandle(p->id);    MPIDI_FUNC_EXIT(MPID_STATE_MPIDI_CH3I_SHM_RELEASE_MEM);    return MPI_SUCCESS;}/* END OF WINDOWS_SHM */#else#error No shared memory subsystem defined#endif

⌨️ 快捷键说明

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