📄 adioi.h
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//* * * Copyright (C) 1997 University of Chicago. * See COPYRIGHT notice in top-level directory. *//* contains general definitions, declarations, and macros internal to the ADIO implementation, though independent of the underlying file system. This file is included in adio.h */ /* Functions and datataypes that are "internal" to the ADIO implementation prefixed ADIOI_. Functions and datatypes that are part of the "externally visible" (documented) ADIO interface are prefixed ADIO_. An implementation of MPI-IO, or any other high-level interface, should not need to use any of the ADIOI_ functions/datatypes. Only someone implementing ADIO on a new file system, or modifying an existing ADIO implementation, would need to use the ADIOI_ functions/datatypes. */#ifndef ADIOI_INCLUDE#define ADIOI_INCLUDE/* used to keep track of hint/info values. * Note that there are a lot of int-sized values in here...they are * used as int-sized entities other places as well. This would be a * problem on 32-bit systems using > 2GB files in some cases... */struct ADIOI_Hints_struct { int initialized; int striping_factor; int striping_unit; int cb_read; int cb_write; int cb_nodes; int cb_buffer_size; int ds_read; int ds_write; int no_indep_rw; int ind_rd_buffer_size; int ind_wr_buffer_size; int deferred_open; char *cb_config_list; int *ranklist; union { struct { int listio_read; int listio_write; } pvfs; struct { int debugmask; } pvfs2; } fs_hints;};#if 0typedef int MPI_Datarep_conversion_function(void *userbuf, MPI_Datatype datatype, int count, void *filebuf, MPI_Offset position, void *extra_state);#endiftypedef struct ADIOI_Datarep { char *name; void *state; MPI_Datarep_extent_function *extent_fn; MPI_Datarep_conversion_function *read_conv_fn; MPI_Datarep_conversion_function *write_conv_fn; struct ADIOI_Datarep *next; /* pointer to next datarep */} ADIOI_Datarep;/* Values for use with cb_read, cb_write, ds_read, and ds_write * and some fs-specific hints (IBM xlc, Compaq Tru64 compilers object to a comma after the last item) (that's just wrong) */enum { ADIOI_HINT_AUTO = 0, ADIOI_HINT_ENABLE = 1, ADIOI_HINT_DISABLE = 2};/* flattened datatypes. Each datatype is stored as a node of a globally accessible linked list. Once attribute caching on a datatype is available (in MPI-2), that should be used instead. */ typedef struct ADIOI_Fl_node { MPI_Datatype type; int count; /* no. of contiguous blocks */ int *blocklens; /* array of contiguous block lengths (bytes)*/ /* may need to make it ADIO_Offset *blocklens */ ADIO_Offset *indices; /* array of byte offsets of each block */ struct ADIOI_Fl_node *next; /* pointer to next node */} ADIOI_Flatlist_node;#ifdef ROMIO_PVFS2#include <pvfs2.h>#endiftypedef struct ADIOI_AIO_req_str { /* very wierd: if this MPI_Request is a pointer, some C++ compilers * will clobber it when the MPICH2 C++ bindings are used */ MPI_Request req; MPI_Offset nbytes; /* should probably make this a union */#ifdef ROMIO_HAVE_WORKING_AIO struct aiocb *aiocbp;#endif#ifdef ROMIO_PVFS2 PVFS_sys_op_id op_id; PVFS_sysresp_io resp_io; PVFS_Request file_req; PVFS_Request mem_req;#endif#ifdef ROMIO_NTFS /* Ptr to Overlapped struct */ LPOVERLAPPED lpOvl; /* Ptr to file handle */ HANDLE fd;#endif} ADIOI_AIO_Request;struct ADIOI_Fns_struct { void (*ADIOI_xxx_Open) (ADIO_File fd, int *error_code); void (*ADIOI_xxx_ReadContig) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_WriteContig) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_ReadStridedColl) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_WriteStridedColl) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); ADIO_Offset (*ADIOI_xxx_SeekIndividual) (ADIO_File fd, ADIO_Offset offset, int whence, int *error_code); void (*ADIOI_xxx_Fcntl) (ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code); void (*ADIOI_xxx_SetInfo) (ADIO_File fd, MPI_Info users_info, int *error_code); void (*ADIOI_xxx_ReadStrided) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_WriteStrided) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_Close) (ADIO_File fd, int *error_code); void (*ADIOI_xxx_IreadContig) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Request *request, int *error_code); void (*ADIOI_xxx_IwriteContig) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Request *request, int *error_code); int (*ADIOI_xxx_ReadDone) (ADIO_Request *request, ADIO_Status *status, int *error_code); int (*ADIOI_xxx_WriteDone) (ADIO_Request *request, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_ReadComplete) (ADIO_Request *request, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_WriteComplete) (ADIO_Request *request, ADIO_Status *status, int *error_code); void (*ADIOI_xxx_IreadStrided) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Request *request, int *error_code); void (*ADIOI_xxx_IwriteStrided) (ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Request *request, int *error_code); void (*ADIOI_xxx_Flush) (ADIO_File fd, int *error_code); void (*ADIOI_xxx_Resize) (ADIO_File fd, ADIO_Offset size, int *error_code); void (*ADIOI_xxx_Delete) (char *filename, int *error_code);};/* optypes for ADIO_RequestD */#define ADIOI_READ 26#define ADIOI_WRITE 27#define ADIOI_MIN(a, b) ((a) < (b) ? (a) : (b))#define ADIOI_MAX(a, b) ((a) > (b) ? (a) : (b))#define ADIOI_PREALLOC_BUFSZ 16777216 /* buffer size used to preallocate disk space *//* default values for some hints */ /* buffer size for collective I/O = 16 MB */#define ADIOI_CB_BUFFER_SIZE_DFLT "16777216" /* buffer size for data sieving in independent reads = 4MB */#define ADIOI_IND_RD_BUFFER_SIZE_DFLT "4194304" /* buffer size for data sieving in independent writes = 512KB. default is smaller than for reads, because write requires read-modify-write with file locking. If buffer size is large there is more contention for locks. */#define ADIOI_IND_WR_BUFFER_SIZE_DFLT "524288" /* use one process per processor name by default */#define ADIOI_CB_CONFIG_LIST_DFLT "*:1"/* some of the ADIO functions are macro-replaced */#define ADIO_ReadContig(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_ReadContig))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_WriteContig(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_WriteContig))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_SeekIndividual(fd,offset,whence,error_code) \ (*(fd->fns->ADIOI_xxx_SeekIndividual))(fd,offset,whence,error_code)#define ADIO_Fcntl(fd,flag,fcntl_struct,error_code) \ (*(fd->fns->ADIOI_xxx_Fcntl))(fd,flag,fcntl_struct,error_code)#define ADIO_IreadContig(fd,buf,count,datatype,file_ptr_type,offset,request,error_code) \ (*(fd->fns->ADIOI_xxx_IreadContig))(fd,buf,count,datatype,file_ptr_type,offset,request,error_code)#define ADIO_IwriteContig(fd,buf,count,datatype,file_ptr_type,offset,request,error_code) \ (*(fd->fns->ADIOI_xxx_IwriteContig))(fd,buf,count,datatype,file_ptr_type,offset,request,error_code)/* in these routines a pointer to request is passed */#define ADIO_ReadDone(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_ReadDone))(request,status,error_code)#define ADIO_WriteDone(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_WriteDone))(request,status,error_code)#define ADIO_ReadIcomplete(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_ReadIcomplete))(request,status,error_code)#define ADIO_WriteIcomplete(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_WriteIcomplete))(request,status,error_code)#define ADIO_ReadComplete(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_ReadComplete))(request,status,error_code)#define ADIO_WriteComplete(request,status,error_code) \ (*((*(request))->fd->fns->ADIOI_xxx_WriteComplete))(request,status,error_code)#define ADIO_ReadStrided(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_ReadStrided))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_WriteStrided(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_WriteStrided))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_ReadStridedColl(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_ReadStridedColl))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_WriteStridedColl(fd,buf,count,datatype,file_ptr_type,offset,status,error_code) \ (*(fd->fns->ADIOI_xxx_WriteStridedColl))(fd,buf,count,datatype,file_ptr_type,offset,status,error_code)#define ADIO_IreadStrided(fd,buf,count,datatype,file_ptr_type,offset,request,error_code) \ (*(fd->fns->ADIOI_xxx_IreadStrided))(fd,buf,count,datatype,file_ptr_type,offset,request,error_code)#define ADIO_IwriteStrided(fd,buf,count,datatype,file_ptr_type,offset,request,error_code) \ (*(fd->fns->ADIOI_xxx_IwriteStrided))(fd,buf,count,datatype,file_ptr_type,offset,request,error_code)#define ADIO_Flush(fd,error_code) (*(fd->fns->ADIOI_xxx_Flush))(fd,error_code)#define ADIO_Resize(fd,size,error_code) \ (*(fd->fns->ADIOI_xxx_Resize))(fd,size,error_code)#define ADIO_Delete(filename,error_code) \ (*(fd->fns->ADIOI_xxx_Delete))(filename,error_code)#define ADIO_SetInfo(fd, users_info, error_code) \ (*(fd->fns->ADIOI_xxx_SetInfo))(fd, users_info, error_code)/* structure for storing access info of this process's request from the file domain of other processes, and vice-versa. used as array of structures indexed by process number. */typedef struct { ADIO_Offset *offsets; /* array of offsets */ int *lens; /* array of lengths */ MPI_Aint *mem_ptrs; /* array of pointers. used in the read/write phase to indicate where the data is stored in memory */ int count; /* size of above arrays */} ADIOI_Access;/* prototypes for ADIO internal functions */void ADIOI_SetFunctions(ADIO_File fd);void ADIOI_Flatten_datatype(MPI_Datatype type);void ADIOI_Flatten(MPI_Datatype type, ADIOI_Flatlist_node *flat, ADIO_Offset st_offset, int *curr_index); void ADIOI_Delete_flattened(MPI_Datatype datatype);int ADIOI_Count_contiguous_blocks(MPI_Datatype type, int *curr_index);void ADIOI_Complete_async(int *error_code);void *ADIOI_Malloc_fn(size_t size, int lineno, char *fname);void *ADIOI_Calloc_fn(size_t nelem, size_t elsize, int lineno, char *fname);void *ADIOI_Realloc_fn(void *ptr, size_t size, int lineno, char *fname);void ADIOI_Free_fn(void *ptr, int lineno, char *fname);void ADIOI_Datatype_iscontig(MPI_Datatype datatype, int *flag);void ADIOI_Get_position(ADIO_File fd, ADIO_Offset *offset);void ADIOI_Get_eof_offset(ADIO_File fd, ADIO_Offset *eof_offset);void ADIOI_Get_byte_offset(ADIO_File fd, ADIO_Offset offset, ADIO_Offset *disp);void ADIOI_process_system_hints(MPI_Info info);void ADIOI_GEN_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *error_code);void ADIOI_GEN_Flush(ADIO_File fd, int *error_code);void ADIOI_GEN_Delete(char *filename, int *error_code);void ADIOI_GEN_ReadContig(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code);int ADIOI_GEN_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset, int wr, MPI_Request *request);void ADIOI_GEN_IreadContig(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Request *request, int *error_code);void ADIOI_GEN_WriteContig(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code);void ADIOI_GEN_IwriteContig(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -