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

📄 set_view.c

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//*  * *   Copyright (C) 1997 University of Chicago.  *   See COPYRIGHT notice in top-level directory. */#include "mpioimpl.h"#ifdef HAVE_WEAK_SYMBOLS#if defined(HAVE_PRAGMA_WEAK)#pragma weak MPI_File_set_view = PMPI_File_set_view#elif defined(HAVE_PRAGMA_HP_SEC_DEF)#pragma _HP_SECONDARY_DEF PMPI_File_set_view MPI_File_set_view#elif defined(HAVE_PRAGMA_CRI_DUP)#pragma _CRI duplicate MPI_File_set_view as PMPI_File_set_view/* end of weak pragmas */#endif/* Include mapping from MPI->PMPI */#define MPIO_BUILD_PROFILING#include "mpioprof.h"#endif/*@    MPI_File_set_view - Sets the file viewInput Parameters:. fh - file handle (handle). disp - displacement (nonnegative integer). etype - elementary datatype (handle). filetype - filetype (handle). datarep - data representation (string). info - info object (handle).N fortran@*/int MPI_File_set_view(MPI_File mpi_fh, MPI_Offset disp, MPI_Datatype etype,		      MPI_Datatype filetype, char *datarep, MPI_Info info){    int filetype_size, etype_size, error_code;    static char myname[] = "MPI_FILE_SET_VIEW";    ADIO_Offset shared_fp, byte_off;    ADIO_File fh;    MPID_CS_ENTER();    MPIR_Nest_incr();    fh = MPIO_File_resolve(mpi_fh);    /* --BEGIN ERROR HANDLING-- */    MPIO_CHECK_FILE_HANDLE(fh, myname, error_code);    if ((disp < 0) && (disp != MPI_DISPLACEMENT_CURRENT))    {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG, 					  "**iobaddisp", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    /* rudimentary checks for incorrect etype/filetype.*/    if (etype == MPI_DATATYPE_NULL) {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG,					  "**ioetype", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    if (filetype == MPI_DATATYPE_NULL) {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG,					  "**iofiletype", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    if ((fh->access_mode & MPI_MODE_SEQUENTIAL) &&	(disp != MPI_DISPLACEMENT_CURRENT))    {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG, 					  "**iodispifseq", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    if ((disp == MPI_DISPLACEMENT_CURRENT) &&	!(fh->access_mode & MPI_MODE_SEQUENTIAL))    {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG, 					  "**iodispifseq", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    MPI_Type_size(filetype, &filetype_size);    MPI_Type_size(etype, &etype_size);    /* --BEGIN ERROR HANDLING-- */    if (filetype_size % etype_size != 0)    {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__, MPI_ERR_ARG,					  "**iofiletype", 0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    if (strcmp(datarep, "native") && strcmp(datarep, "NATIVE"))    {	error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,					  myname, __LINE__,					  MPI_ERR_UNSUPPORTED_DATAREP, 					  "**unsupporteddatarep",0);	error_code = MPIO_Err_return_file(fh, error_code);	goto fn_exit;    }    /* --END ERROR HANDLING-- */    if (disp == MPI_DISPLACEMENT_CURRENT) {	MPI_Barrier(fh->comm);	ADIO_Get_shared_fp(fh, 0, &shared_fp, &error_code);	/* TODO: check error code */	MPI_Barrier(fh->comm); 	ADIOI_Get_byte_offset(fh, shared_fp, &byte_off);	/* TODO: check error code */	disp = byte_off;    }    ADIO_Set_view(fh, disp, etype, filetype, info, &error_code);    /* reset shared file pointer to zero */    if ((fh->file_system != ADIO_PIOFS) &&	(fh->file_system != ADIO_PVFS) &&	(fh->file_system != ADIO_PVFS2) &&         (fh->shared_fp_fd != ADIO_FILE_NULL))    {	/* only one process needs to set it to zero, but I don't want to 	   create the shared-file-pointer file if shared file pointers have 	   not been used so far. Therefore, every process that has already 	   opened the shared-file-pointer file sets the shared file pointer 	   to zero. If the file was not opened, the value is automatically 	   zero. Note that shared file pointer is stored as no. of etypes	   relative to the current view, whereas indiv. file pointer is	   stored in bytes. */	ADIO_Set_shared_fp(fh, 0, &error_code);    }    if ((fh->file_system != ADIO_PIOFS) &&	(fh->file_system != ADIO_PVFS) &&	(fh->file_system != ADIO_PVFS2 ))    {	MPI_Barrier(fh->comm); /* for above to work correctly */    }fn_exit:    MPIR_Nest_decr();    MPID_CS_EXIT();    return error_code;}

⌨️ 快捷键说明

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