16 #define _XOPEN_SOURCE 700
27 #include <cuda_runtime.h>
32 #include "sion_error_handler.h"
40 #include "sion_hints.h"
45 #include "sion_buddy_common.h"
48 sion_io_stat_t* sion_get_io_info_buddy(
int sid,
int roles,
int flag);
87 sion_int64 *globalskip,
88 sion_int64 *start_of_varheader,
89 sion_int64 **sion_chunksizes,
90 sion_int64 **sion_globalranks,
91 sion_int64 **sion_blockcount,
92 sion_int64 **sion_blocksizes ) {
93 int rc = SION_SUCCESS;
95 #ifdef SION_SERIAL_MASTER
101 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
103 DPRINTFP((1,
"sion_get_locations", -1,
"enter\n"));
105 #ifdef SION_SERIAL_MASTER
114 for (i = 0; i < sion_filedesc->
ntasks; i++) {
115 int lfile=sion_filedesc->
mapping[i*2+0];
116 int lrank=sion_filedesc->
mapping[i*2+1];
121 for (i = 0; i < sion_filedesc->
ntasks; i++) {
122 int lfile=sion_filedesc->
mapping[i*2+0];
123 int lrank=sion_filedesc->
mapping[i*2+1];
126 for (blknum = 0; blknum < sion_filedesc->
all_blockcount[i]; blknum++) {
134 *ntasks = sion_filedesc->
ntasks;
143 DPRINTFP((1,
"sion_get_locations", -1,
"leave\n"));
148 int _sion_close_sid(
int sid)
150 int rc = SION_SUCCESS;
155 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_close: invalid sion_filedesc, aborting %d ...\n", sid));
157 rc=_sion_close(sion_filedesc);
159 if(rc==SION_SUCCESS) {
161 _sion_free_filedesc(sion_filedesc);
187 int rc = SION_SUCCESS;
192 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
194 DPRINTFP((1,
"sion_get_current_location", -1,
"enter\n"));
201 DPRINTFP((1,
"sion_get_current_location", -1,
"leave\n"));
221 sion_int32 **mapping,
223 int rc = SION_SUCCESS;
228 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
230 DPRINTFP((1,
"sion_get_mapping", -1,
"enter\n"));
234 *mapping=sion_filedesc->
mapping;
238 *numfiles=sion_filedesc->
nfiles;
240 DPRINTFP((1,
"sion_get_mapping", -1,
"leave (mapping_size=%d)\n",*mapping_size));
257 DPRINTFP((1,
"sion_get_file_endianness", -1,
"enter (sid=%d)\n",sid));
261 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
264 DPRINTFP((1,
"sion_get_file_endianness", -1,
"leave (sid=%d)\n",sid));
266 return ((sion_filedesc->
endianness >> 8) & 1);
281 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"enter (sid=%d)\n",sid));
285 DPRINTFP((1,
"sion_endianness_swap_needed", -1,
"leave (swap_needed=%d)\n",
309 sion_int64 **sion_currentpos,
310 sion_int64 **sion_currentblocknr)
312 int rc = SION_SUCCESS;
317 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
319 DPRINTFP((1,
"sion_get_current_locations", -1,
"enter\n"));
321 *ntasks = sion_filedesc->
ntasks;
325 DPRINTFP((1,
"sion_get_current_locations", -1,
"leave\n"));
329 int sion_get_number_of_files(
int sid)
335 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
338 return (sion_filedesc->
nfiles);
341 int sion_get_filenumber(
int sid)
347 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
353 int sion_is_serial_opened(
int sid)
359 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
367 int sion_using_hints(
int sid)
373 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
379 sion_int64 sion_get_bytes_written(
int sid)
382 sion_int64 bytes=SION_SIZE_NOT_VALID;
386 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
402 sion_int64 sion_get_bytes_read(
int sid)
405 sion_int64 bytes=SION_SIZE_NOT_VALID;
409 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
429 return(sion_get_io_info_by_spec(sid,SION_ROLE_COLLECTOR|SION_ROLE_WRITER|SION_ROLE_NOWRITER,SION_GET_IO_INFO_FLAG_NONE));
434 sion_io_stat_t* sion_get_io_info_by_spec(
int sid,
int roles,
int flag) {
440 _sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid);
446 p=sion_get_io_info_buddy(sid,roles,flag);
470 size_t sion_fwrite(
const void *data,
size_t size,
size_t nitems,
int sid)
472 sion_int64 bytes_to_write, bbytes;
477 DPRINTFP((1,
"sion_fwrite", -1,
"enter size=%ld nitems=%ld\n",(
long) size, (
long) nitems));
481 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
486 bytes_to_write=size*nitems;
493 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
494 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
495 (
int) bytes_to_write, sid));
498 char *data_ptr=(
void *) data;
499 sion_int64 bytes_left = sion_filedesc->
chunksize -
504 if (bbytes + bytes_to_write > bytes_left) {
510 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
511 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
514 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
515 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
522 sion_int64 bytes_buffered=
_sion_buffer_push(sion_filedesc,data_ptr,bytes_to_write);
523 bytes_to_write-=bytes_buffered;
524 data_ptr+=bytes_buffered;
526 while(bytes_to_write>0) {
532 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
533 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sid));
536 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
537 "could not ensure free space for this buffered block of size %d, returning sid=%d ...",
545 bytes_to_write-=bytes_buffered;
546 data_ptr+=bytes_buffered;
549 bytes_to_write=size*nitems;
551 rc=(size_t) (size ? bytes_to_write / size : 0);
557 struct cudaPointerAttributes attrs;
558 cudaError_t err = cudaPointerGetAttributes(&attrs, data);
559 if ((err == cudaSuccess) && _sion_cuda_ptr_is_device(attrs) ) {
560 char* buffer = malloc(sion_filedesc->
fsblksize);
561 const char* data_ = data;
562 while (frc < bytes_to_write) {
563 sion_int64 to_write = (bytes_to_write - frc) > sion_filedesc->
fsblksize ? sion_filedesc->
fsblksize : (bytes_to_write - frc);
564 cudaMemcpy(buffer, data_, to_write, cudaMemcpyDeviceToHost);
566 if (frc_ != to_write)
break;
578 if(frc != bytes_to_write) {
579 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
580 "could not write data (%d bytes) to file (frc=%d sid=%d) ...", (
int) bytes_to_write, (
int) frc, sid));
583 rc=(size_t) (size ? bytes_to_write / size : 0);
585 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
"could not ensure free space for this block, returning %d ...", sid));
591 DPRINTFP((1,
"sion_fwrite", -1,
"leave rc=%ld\n",(
long) rc));
609 size_t sion_fread(
void *data,
size_t size,
size_t nitems,
int sid) {
611 sion_int64 bytes, bread, bytes_left;
615 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid sion_filedesc, aborting %d ...\n", sid));
619 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"invalid pointer, aborting %d ...\n", data));
625 bytes_left = sion_filedesc->
startpos +
630 DPRINTFP((1,
"sion_fread", -1,
"enter\n"));
631 DPRINTFP((4,
"sion_fread", -1,
" parameter size=%ld nitems=%ld\n",(
long) size,(
long) nitems));
639 if((sion_filedesc->
chunksize < bytes) || ((bytes_left < bytes) &&
640 (bytes_left != 0))) {
642 return(_sion_errorprint(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"not enough bytes left in chunk, aborting (%ld < %ld) ...\n", bytes_left, bytes));
647 struct cudaPointerAttributes attrs;
648 cudaError_t err = cudaPointerGetAttributes(&attrs, data);
649 if ((err == cudaSuccess) && _sion_cuda_ptr_is_device(attrs) ) {
650 char* buffer = malloc(sion_filedesc->
fsblksize);
652 while (bread < bytes) {
653 sion_int64 to_read = (bytes - bread) > sion_filedesc->
fsblksize ? sion_filedesc->
fsblksize : (bytes - bread);
655 if (bread_ != to_read)
break;
656 cudaMemcpy(data_, buffer, bread_, cudaMemcpyHostToDevice);
663 DPRINTFP((256,
"sion_fread", -1,
" _sion_file_read returns %ld\n",(
long) bread));
667 DPRINTFP((256,
"sion_fread", -1,
" _sion_file_read returns %ld\n",(
long) bread));
671 return (
size_t) (size ? bread / size : 0);
674 bread = size ? bread / size : 0;
679 DPRINTFP((4,
"sion_fread", -1,
" return value %ld\n",(
long) bread));
680 DPRINTFP((1,
"sion_fread", -1,
"leave\n"));
698 int sion_seek(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk)
703 rc=
sion_seek_fp(sid,rank,currentblocknr,posinblk,&fileptr);
721 int sion_seek_fp(
int sid,
int rank,
int currentblocknr, sion_int64 posinblk, FILE **fileptr)
723 int rc = SION_SUCCESS;
726 DPRINTFP((1,
"sion_seek_fp", -1,
" enter seek with sid=%d\n", sid));
731 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_seek: invalid sion_filedesc, aborting %d ...\n", sid));
736 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_seek_fp: unknown file open state !(READ|WRITE), aborting %d ...", sid));
747 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_seek_fp: unknown file open state !(PAR|SER|SERRANK|MAPPED), aborting %d ...", sid));
771 return _sion_errorprint_on_rank(SION_NOT_SUCCESS, _SION_ERROR_RETURN, sion_filedesc->
rank,
"sion_seek_fp: seek not supported for this type (write, sion_open_rank), aborting ...");
785 *fileptr=sion_filedesc->
fileptr->fileptr;
794 DPRINTFP((1,
"sion_seek_fp", -1,
"leave seek rc=%d\n",rc));
811 int rc = SION_NOT_SUCCESS;
817 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_feof: invalid sion_filedesc, aborting %d ...\n", sid));
820 DPRINTFP((8,
"sion_feof", -1,
"enter feof sid=%d currentpos=%15lld\n", sid, sion_filedesc->
currentpos));
828 DPRINTFP((16,
"sion_feof", -1,
829 " after flush sid=%d currentpos=%15lld maxpos= %lld startpos=%lld curblknr=%d\n",
835 DPRINTFP((16,
"sion_feof", -1,
" end of current block %d not reached sid=%d\n",
841 _sion_apply_hints(sion_filedesc,SION_HINTS_FREE_TYPE_CHUNK);
848 _sion_apply_hints(sion_filedesc,SION_HINTS_ACCESS_TYPE_CHUNK);
852 rc = SION_NOT_SUCCESS;
853 DPRINTFP((8,
"sion_feof", -1,
854 " end of block %d reached, skipping to next %lld -> %lld position=%lld gs=%lld sid=%d\n",
860 DPRINTFP((8,
"sion_feof", -1,
" end of last block %d reached sid=%d\n", sion_filedesc->
currentblocknr, sid));
865 DPRINTFP((8,
"sion_feof", -1,
"leave feof sid=%d currentpos=%15lld rc=%d\n", sid, sion_filedesc->
currentpos, rc));
897 sion_int64 bytes_avail=SION_SIZE_NOT_VALID;
902 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_bytes_avail_in_chunk: invalid sion_filedesc, aborting %d ...\n", sid));
911 bytes_avail = maxpos - sion_filedesc->
currentpos;
913 DPRINTFP((8,
"sion_bytes_avail_in_chunk", -1,
914 "leave sid=%d rank=%4d currentpos=%lld maxpos= %lld -> bytes to read %lld\n",
915 sid, sion_filedesc->
rank, sion_filedesc->
currentpos, maxpos, bytes_avail));
917 return (bytes_avail);
936 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_position: invalid sion_filedesc, aborting %d ...\n", sid));
946 int sion_set_fp_closed(
int sid)
948 int rc = SION_SUCCESS;
953 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_fp_closed: invalid sion_filedesc, aborting %d ...\n", sid));
959 int sion_set_second_fp(
int sid, FILE *secondfd)
961 int rc = SION_SUCCESS;
967 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
971 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_set_second_fp: file was not opened in ANSI mode, aborting %d ...", sid));
985 int sion_unset_second_fp(
int sid)
987 int rc = SION_SUCCESS;
992 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
996 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_unset_second_fp: file was not opened in ANSI mode, aborting %d ...", sid));
1003 int sion_optimize_fp_buffer(
int sid)
1005 int rc = SION_SUCCESS;
1010 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_set_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
1014 if (sion_filedesc->
fpbuffer == NULL) {
1015 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_optimize_fp_buffer: cannot allocate internal buffer of size %lu , aborting ...", (
unsigned long) sion_filedesc->
fsblksize));
1032 int rc = SION_SUCCESS;
1037 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_unset_second_fp: invalid sion_filedesc, aborting %d ...\n", sid));
1056 sion_int64 byteswritten;
1057 int rc = SION_SUCCESS;
1061 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sion_ensure_free_space: invalid sion_filedesc, returning %d ...\n", sid));
1064 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"enter ensure_free sid=%d bytes=%lld\n", sid, bytes));
1067 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"invalid opened\n"));
1068 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: file is opened invalid sion_mode, returning ...", sion_filedesc->
rank));
1070 if (!sion_filedesc->
usecoll) {
1071 if (sion_filedesc->
fileptr == NULL) {
1072 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"file not opened\n"));
1073 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: file is not open, returning ...", sion_filedesc->
rank));
1078 DPRINTFP((8,
"_sion_ensure_free_space", -1,
"could not write %lld bytes, chunksize=%lld\n", bytes, sion_filedesc->
chunksize));
1079 return(_sion_errorprint_on_rank(SION_NOT_SUCCESS,_SION_ERROR_RETURN,sion_filedesc->
rank,
"sion_ensure_free_space[%2d]: could not write %lld bytes, chunksize=%lld, returning ...",sion_filedesc->
rank, bytes, sion_filedesc->
chunksize));
1084 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1085 " after getpos sid=%d fileposition is %lld bytes=%lld\n", sid, sion_filedesc->
currentpos, bytes));
1089 DPRINTFP((16,
"_sion_ensure_free_space", -1,
1090 " sid=%d byteswritten(%lld) + new bytes (%lld) = %lld\n", sid, byteswritten, bytes, byteswritten + bytes));
1092 if ((byteswritten + bytes) > sion_filedesc->
chunksize) {
1097 DPRINTFP((8,
"_sion_ensure_free_space", -1,
1098 "leave ensure_free sid=%d fileposition is %lld bw+bytes=%lld <= chunksize=%lld (fsblksize=%d)\n",
1106 int sion_is_thread_safe() {
1107 #ifdef SION_PTHREADS
1108 return(SION_SUCCESS);
1110 return(SION_NOT_SUCCESS);
1125 int rc=SION_NOT_SUCCESS;
1127 *numbytes=SION_SIZE_NOT_VALID;
1128 *numfds=SION_SIZE_NOT_VALID;
1132 return(_sion_errorprint(SION_SIZE_NOT_VALID,_SION_ERROR_RETURN,
"sion_get_sizeof: invalid sion_filedesc, returning %d ...\n", sid));
1134 DPRINTFP((2,
"sion_get_sizeof", -1,
"enter sid=%d\n", sid));
1138 DPRINTFP((2,
"sion_get_sizeof", -1,
"leave sid=%d numbytes=%d numfds=%d\n", sid, *numbytes, *numfds));
1145 #define DFUNCTION "sion_dup"
1161 int sion_dup(
int sid,
int mode,
int rank, uint64_t key)
1163 int new_sid = SION_ID_NOT_VALID;
1168 return(_sion_errorprint(SION_ID_NOT_VALID,_SION_ERROR_RETURN,
"sion_dup: invalid sion_filedesc, returning %d ...\n", sid));
1170 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1173 DPRINTFP((8, DFUNCTION, -1,
"invalid opened\n"));
1174 return(_sion_errorprint_on_rank(SION_ID_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank, DFUNCTION
"[%2d]: file is not opened in read mode, returning ...", sion_filedesc->
rank));
1177 new_sid=
_sion_dup(sid, mode, rank, key);
1179 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d new_sid=%d\n", sid, new_sid));
1186 #define DFUNCTION "sion_dedup"
1198 DPRINTFP((8, DFUNCTION, -1,
"enter sid=%d\n", sid));
1202 DPRINTFP((8, DFUNCTION, -1,
"leave sid=%d rc=%d\n", sid, rc));
1209 #define DFUNCTION "sion_lock_register_lock_callbacks"
1223 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1225 rc=_sion_lock_register_lock_callbacks(lock,unlock,lock_data);
1227 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n", rc));
1233 #define DFUNCTION "sion_lock_user_callbacks_defined"
1242 DPRINTFP((8, DFUNCTION, -1,
"enter\n"));
1244 rc=_sion_lock_user_callbacks_defined();
1246 DPRINTFP((8, DFUNCTION, -1,
"leave rc=%d\n", rc));
int sion_get_current_location(int sid, int *currentchunknr, sion_int64 *currentpos, int *maxchunks, sion_int64 **chunksizes)
Returns current position in file and pointer fiels containing chunk sizes.
int sion_get_current_locations(int sid, int *ntasks, sion_int64 **sion_currentpos, sion_int64 **sion_currentblocknr)
Returns current position in file and pointer fiels containing chunk sizes.
size_t sion_fread(void *data, size_t size, size_t nitems, int sid)
Read data from sion file.
int sion_get_file_endianness(int sid)
Returns edianness of data in file sid.
int sion_endianness_swap_needed(int sid)
Returns whether or not byte swapping is needed for sid.
int sion_get_locations(int sid, int *ntasks, int *maxchunks, sion_int64 *globalskip, sion_int64 *start_of_varheader, sion_int64 **sion_chunksizes, sion_int64 **sion_globalranks, sion_int64 **sion_blockcount, sion_int64 **sion_blocksizes)
Returns pointers to internal fields.
int sion_get_mapping(int sid, int *mapping_size, sion_int32 **mapping, int *numfiles)
Returns pointers to the internal field mapping.
size_t sion_fwrite(const void *data, size_t size, size_t nitems, int sid)
Write data to sion file.
callback wrappers for OMP thread safe fd manipulation
int _sion_buffer_get_data_ptr(_sion_filedesc *sion_filedesc, void **data, sion_int64 *bytes)
Pop all data from buffer.
int _sion_buffer_flush(_sion_filedesc *sion_filedesc)
Flush buffer.
sion_int64 _sion_buffer_push(_sion_filedesc *sion_filedesc, const void *data, sion_int64 bytes)
Push data to buffer.
sion_int64 sion_get_position(int sid)
Function that returns the current file position.
int sion_seek_fp(int sid, int rank, int currentblocknr, sion_int64 posinblk, FILE **fileptr)
Deprecated. Use sion_seek() instead.
sion_int64 sion_bytes_avail_in_chunk(int sid)
Function that returns the number of bytes available in the current chunk.
int sion_flush(int sid)
Flushed sion file.
int sion_ensure_free_space(int sid, sion_int64 bytes)
Funtion to ensure that enough space is available for writing.
int sion_feof(int sid)
Function that indicates whether the end of file is reached for this task.
sion_int64 sion_bytes_avail_in_block(int sid)
Return the number of bytes available in the current chunk.
int sion_lock_user_callbacks_defined()
Function which return flag, if user callback for locking are registered.
int sion_seek(int sid, int rank, int currentblocknr, sion_int64 posinblk)
Function to set the file pointer to a new position.
int sion_dup(int sid, int mode, int rank, uint64_t key)
Function which duplicates a sion file descriptor.
int sion_get_sizeof(int sid, int *numbytes, int *numfds)
Function returns size of internal data structure for sid.
int sion_lock_register_lock_callbacks(int lock(void *), int unlock(void *), void *lock_data)
Function which registers callback funtions for lock and unlock internal access to shared data structu...
int sion_dedup(int sid)
Function which destroy a duplicated sion file descriptor.
int sion_get_endianness(void)
Return endianness.
int _sion_dup(int sid, int mode, int rank, uint64_t key)
Create a duplicated sion file descriptor.
int _sion_dedup(int sid)
Destroy a duplicated sion file descriptor.
void * _sion_vcdtovcon(int sid)
int _sion_vcdtype(int sid)
int _sion_freevcd(int sid)
#define SION_FILEDESCRIPTOR
int _sion_file_flush(_sion_fileptr *sion_fileptr)
Flush data to file.
int _sion_file_unset_second_fileptr(_sion_fileptr *sion_fileptr)
Unset second fileptr for file if opened with ANSI.
sion_int64 _sion_file_set_position(_sion_fileptr *sion_fileptr, sion_int64 startpointer)
Set new position in file.
int _sion_file_purge(_sion_fileptr *sion_fileptr)
Purge data to file.
sion_int64 _sion_file_get_position(_sion_fileptr *sion_fileptr)
Get new position in file.
int _sion_file_set_buffer(_sion_fileptr *sion_fileptr, char *buffer, sion_int32 buffer_size)
Set buffer of fp.
sion_int64 _sion_file_write(const void *data, sion_int64 bytes, _sion_fileptr *sion_fileptr)
Write data to file.
sion_int64 _sion_file_read(void *data, sion_int64 bytes, _sion_fileptr *sion_fileptr)
Read data from file.
int _sion_file_set_second_fileptr(_sion_fileptr *sion_fileptr, FILE *fileptr)
Set second fileptr for file if opened with ANSI.
#define SION_FILE_FLAG_ANSI
int _sion_alloc_filedesc_block_arrays_only(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion structure, fields for all chunksizes of all tasks.
int _sion_get_size_of_filedesc(_sion_filedesc *sion_filedesc, int *numbytes, int *numfds)
get size of internal data structure sion_filedesc
int _sion_alloc_filedesc_arrays(_sion_filedesc *sion_filedesc)
Allocate memory for the internal sion arrays.
int _sion_print_filedesc(_sion_filedesc *sion_filedesc, int level, char *desc, int flag)
Print the initialized sion file description.
#define SION_FILEMODE_WRITE
#define SION_FILEMODE_READ
#define SION_FILESTATE_SEROPENRANK
#define SION_FILESTATE_PAROPEN
#define SION_FILESTATE_SEROPENMASTER
#define SION_FILESTATE_CLOSE
#define SION_FILESTATE_SEROPEN
#define SION_FILESTATE_PAROPENMAPPEDMASTER
int _sion_create_new_block(_sion_filedesc *sion_filedesc)
Create a new block for the internal data structure.
int _sion_free_io_info(sion_io_stat_t *p)
frees an io_info data structure
int _sion_flush_block(_sion_filedesc *sion_filedesc)
Update the internal data structure.
int _sion_check_on_collective_mode(_sion_filedesc *sion_filedesc)
check if a collective operation are already called,
int _sion_update_fileposition(_sion_filedesc *sion_filedesc)
Update the internal data structure (check fileposition)
int _sion_seek_on_current_rank_read(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position in the same rank, updates internal data structure.
int _sion_seek_on_current_rank_write(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position in the same rank, updates internal data structure.
int _sion_seek_on_all_ranks_read(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
int _sion_seek_on_all_ranks_read_master(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
int _sion_seek_on_all_ranks_write_mapped(_sion_filedesc *sion_filedesc_master, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
int _sion_seek_on_all_ranks_write(_sion_filedesc *sion_filedesc, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
int _sion_seek_on_all_ranks_read_mapped(_sion_filedesc *sion_filedesc_master, int rank, int blocknr, sion_int64 posinblk)
Function to set the file pointer to a new position, updates internal data structure.
Sion File Descriptor Structure.
sion_int64 * all_blocksizes
sion_int64 start_of_varheader
sion_int64 * all_chunksizes
sion_int64 * all_currentpos
sion_int64 * all_currentblocknr
sion_int32 fileptr_exported
_sion_filedesc ** multifiles
sion_int64 * all_globalranks
sion_int32 currentblocknr
sion_int64 * all_blockcount