void ADIOI_NTFS_WriteStrided(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code) { ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type, offset, status, error_code); }
void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count, MPI_Datatype datatype, int file_ptr_type, ADIO_Offset offset, ADIO_Status *status, int *error_code) { #ifdef GRIDFTP_USE_GENERIC_STRIDED int myrank, nprocs; if ( fd->access_mode&ADIO_RDONLY ) { *error_code=MPI_ERR_AMODE; return; } *error_code = MPI_SUCCESS; MPI_Comm_size(fd->comm, &nprocs); MPI_Comm_rank(fd->comm, &myrank); ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type, offset, status, error_code); return; #else char myname[]="ADIOI_GRIDFTP_WriteStrided"; int myrank, nprocs; int buf_contig,file_contig; MPI_Aint btype_size,bufsize; globus_byte_t *intermediate; *error_code = MPI_SUCCESS; MPI_Comm_size(fd->comm, &nprocs); MPI_Comm_rank(fd->comm, &myrank); MPI_Type_size(datatype,&btype_size); bufsize=count*btype_size; ADIOI_Datatype_iscontig(fd->filetype,&file_contig); ADIOI_Datatype_iscontig(datatype,&buf_contig); if ( buf_contig && !file_contig ) { /* Contiguous in memory, discontig in file */ FPRINTF(stderr,"[%d/%d] %s called w/ contig mem, discontig file\n", myrank,nprocs,myname); fflush(stderr); ADIOI_GRIDFTP_WriteDiscontig(fd, buf, count, datatype, file_ptr_type, offset, status, error_code); } else if ( !buf_contig && file_contig ) { /* Discontiguous in mem, contig in file -- comparatively easy */ int posn=0; FPRINTF(stderr,"[%d/%d] %s called w/ discontig mem, contig file\n", myrank,nprocs,myname); fflush(stderr); /* squeeze contents of main buffer into intermediate buffer*/ intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize); MPI_Pack(buf,count,datatype,intermediate,bufsize,&posn,fd->comm); /* write contiguous data from intermediate buffer */ ADIOI_GRIDFTP_WriteContig(fd, intermediate, bufsize, MPI_BYTE, file_ptr_type, offset, status, error_code); ADIOI_Free(intermediate); } else if ( !buf_contig && !file_contig ) { /* Discontig in both mem and file -- the hardest case */ int posn=0; FPRINTF(stderr,"[%d/%d] %s called w/ discontig mem, discontig file\n", myrank,nprocs,myname); fflush(stderr); /* squeeze contents of main buffer into intermediate buffer*/ intermediate=(globus_byte_t *)ADIOI_Malloc((size_t)bufsize); MPI_Pack(buf,count,datatype,intermediate,bufsize,&posn,fd->comm); /* write contiguous data from intermediate buffer */ ADIOI_GRIDFTP_WriteDiscontig(fd, intermediate, bufsize, MPI_BYTE, file_ptr_type, offset, status, error_code); ADIOI_Free(intermediate); } else { /* Why did you bother calling WriteStrided?!?!?! */ FPRINTF(stderr,"[%d/%d] Why the heck did you call %s with contiguous buffer *and* file types?\n", myrank,nprocs,myname); ADIOI_GRIDFTP_WriteContig(fd, buf, count, datatype, file_ptr_type, offset, status, error_code); } #endif /* ! GRIDFTP_USE_GENERIC_STRIDED */ }