本文整理汇总了C++中MPI_Type_size_x函数的典型用法代码示例。如果您正苦于以下问题:C++ MPI_Type_size_x函数的具体用法?C++ MPI_Type_size_x怎么用?C++ MPI_Type_size_x使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MPI_Type_size_x函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ADIOI_GEN_IwriteContig
/* ADIOI_GEN_IwriteContig
*
* This code handles only the case where ROMIO_HAVE_WORKING_AIO is
* defined. We post an asynchronous I/O operations using the appropriate aio
* routines. Otherwise, the ADIOI_Fns_struct will point to the FAKE
* version.
*/
void ADIOI_GEN_IwriteContig(ADIO_File fd, const void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Request *request,
int *error_code)
{
MPI_Count len, typesize;
int aio_errno = 0;
static char myname[] = "ADIOI_GEN_IWRITECONTIG";
MPI_Type_size_x(datatype, &typesize);
len = count * typesize;
ADIOI_Assert(len == (int)((ADIO_Offset)count * (ADIO_Offset)typesize)); /* the count is an int parm */
if (file_ptr_type == ADIO_INDIVIDUAL) offset = fd->fp_ind;
/* Cast away the const'ness of 'buf' as ADIOI_GEN_aio is used for
* both read and write calls */
aio_errno = ADIOI_GEN_aio(fd, (char *) buf, len, offset, 1, request);
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind += len;
fd->fp_sys_posn = -1;
/* --BEGIN ERROR HANDLING-- */
if (aio_errno != 0) {
MPIO_ERR_CREATE_CODE_ERRNO(myname, aio_errno, error_code);
return;
}
/* --END ERROR HANDLING-- */
*error_code = MPI_SUCCESS;
}
开发者ID:ORNL,项目名称:ompi,代码行数:37,代码来源:ad_iwrite.c
示例2: ADIOI_TESTFS_ReadContig
void ADIOI_TESTFS_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 myrank, nprocs;
MPI_Count datatype_size;
*error_code = MPI_SUCCESS;
MPI_Comm_size(fd->comm, &nprocs);
MPI_Comm_rank(fd->comm, &myrank);
MPI_Type_size_x(datatype, &datatype_size);
FPRINTF(stdout, "[%d/%d] ADIOI_TESTFS_ReadContig called on %s\n", myrank, nprocs, fd->filename);
if (file_ptr_type != ADIO_EXPLICIT_OFFSET) {
offset = fd->fp_ind;
fd->fp_ind += datatype_size * count;
fd->fp_sys_posn = fd->fp_ind;
} else {
fd->fp_sys_posn = offset + datatype_size * count;
}
FPRINTF(stdout, "[%d/%d] reading (buf = %p, loc = %lld, sz = %lld)\n",
myrank, nprocs, buf, (long long) offset, (long long) datatype_size * count);
#ifdef HAVE_STATUS_SET_BYTES
MPIR_Status_set_bytes(status, datatype, datatype_size * count);
#endif
}
开发者ID:ParaStation,项目名称:psmpi2,代码行数:29,代码来源:ad_testfs_read.c
示例3: ADIOI_TESTFS_IreadContig
/* ADIOI_TESTFS_IreadContig()
*
* Implemented by immediately calling ReadContig()
*/
void ADIOI_TESTFS_IreadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Request *request, int
*error_code)
{
ADIO_Status status;
int myrank, nprocs;
MPI_Count typesize, len;
*error_code = MPI_SUCCESS;
MPI_Comm_size(fd->comm, &nprocs);
MPI_Comm_rank(fd->comm, &myrank);
MPI_Type_size_x(datatype, &typesize);
FPRINTF(stdout, "[%d/%d] ADIOI_TESTFS_IreadContig called on %s\n",
myrank, nprocs, fd->filename);
FPRINTF(stdout, "[%d/%d] calling ADIOI_TESTFS_ReadContig\n",
myrank, nprocs);
len = count * typesize;
ADIOI_TESTFS_ReadContig(fd, buf, len, MPI_BYTE, file_ptr_type,
offset, &status, error_code);
MPIO_Completed_request_create(&fd, len, error_code, request);
}
开发者ID:00datman,项目名称:ompi,代码行数:29,代码来源:ad_testfs_iread.c
示例4: ADIOI_GEN_IreadContig
/* ADIOI_GEN_IreadContig
*
* This code handles two distinct cases. If ROMIO_HAVE_WORKING_AIO is not
* defined, then I/O is performed in a blocking manner. Otherwise we post
* an asynchronous I/O operation using the appropriate aio routines.
*
* In the aio case we rely on ADIOI_GEN_aio(), which is implemented in
* common/ad_iwrite.c.
*/
void ADIOI_GEN_IreadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, MPI_Request *request,
int *error_code)
{
MPI_Count len, typesize;
int aio_errno = 0;
static char myname[] = "ADIOI_GEN_IREADCONTIG";
MPI_Type_size_x(datatype, &typesize);
ADIOI_Assert((count * typesize) == ((ADIO_Offset)(unsigned)count * (ADIO_Offset)typesize));
len = count * typesize;
if (file_ptr_type == ADIO_INDIVIDUAL) offset = fd->fp_ind;
aio_errno = ADIOI_GEN_aio(fd, buf, len, offset, 0, request);
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind += len;
fd->fp_sys_posn = -1;
/* --BEGIN ERROR HANDLING-- */
if (aio_errno != 0) {
MPIO_ERR_CREATE_CODE_ERRNO(myname, aio_errno, error_code);
return;
}
/* --END ERROR HANDLING-- */
*error_code = MPI_SUCCESS;
}
开发者ID:ICLDisco,项目名称:ompi,代码行数:37,代码来源:ad_iread.c
示例5: testtype
int testtype(MPI_Datatype type, MPI_Offset expected) {
MPI_Count size, lb, extent;
int nerrors=0;
MPI_Type_size_x(type, &size);
if (size < 0) {
printf("ERROR: type size apparently overflowed integer\n");
nerrors++;
}
if (size != expected) {
printf("reported type size %lld does not match expected %lld\n",
size, expected);
nerrors++;
}
MPI_Type_get_true_extent_x(type, &lb, &extent);
if (lb != 0) {
printf("ERROR: type should have lb of 0, reported %lld\n", lb);
nerrors ++;
}
if (extent != size) {
printf("ERROR: extent should match size, not %lld\n", extent);
nerrors ++;
}
return nerrors;
}
开发者ID:Julio-Anjos,项目名称:simgrid,代码行数:28,代码来源:large_type.c
示例6: ADIOI_TESTFS_IwriteStrided
void ADIOI_TESTFS_IwriteStrided(ADIO_File fd, const void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Request *request, int
*error_code)
{
ADIO_Status status;
int myrank, nprocs;
MPI_Count typesize;
*error_code = MPI_SUCCESS;
MPI_Comm_size(fd->comm, &nprocs);
MPI_Comm_rank(fd->comm, &myrank);
MPI_Type_size_x(datatype, &typesize);
FPRINTF(stdout, "[%d/%d] ADIOI_TESTFS_IwriteStrided called on %s\n",
myrank, nprocs, fd->filename);
FPRINTF(stdout, "[%d/%d] calling ADIOI_TESTFS_WriteStrided\n",
myrank, nprocs);
ADIOI_TESTFS_WriteStrided(fd, buf, count, datatype, file_ptr_type,
offset, &status, error_code);
MPIO_Completed_request_create(&fd, count*typesize, error_code, request);
}
开发者ID:00datman,项目名称:ompi,代码行数:25,代码来源:ad_testfs_iwrite.c
示例7: ADIOI_NFS_WriteContig
void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status, int *error_code)
{
ssize_t err=-1;
MPI_Count datatype_size, len;
ADIO_Offset bytes_xfered=0;
size_t wr_count;
static char myname[] = "ADIOI_NFS_WRITECONTIG";
char *p;
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * (ADIO_Offset)count;
if (file_ptr_type == ADIO_INDIVIDUAL) {
offset = fd->fp_ind;
}
p = (char *)buf;
while (bytes_xfered < len) {
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
#endif
wr_count = len - bytes_xfered;
/* work around FreeBSD and OS X defects*/
if (wr_count > INT_MAX)
wr_count = INT_MAX;
ADIOI_WRITE_LOCK(fd, offset+bytes_xfered, SEEK_SET, wr_count);
err = pwrite(fd->fd_sys, p, wr_count, offset+bytes_xfered);
/* --BEGIN ERROR HANDLING-- */
if (err == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
fd->fp_sys_posn = -1;
return;
}
/* --END ERROR HANDLING-- */
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
#endif
ADIOI_UNLOCK(fd, offset+bytes_xfered, SEEK_SET, wr_count);
bytes_xfered += err;
p += err;
}
fd->fp_sys_posn = offset + bytes_xfered;
if (file_ptr_type == ADIO_INDIVIDUAL) {
fd->fp_ind += bytes_xfered;
}
#ifdef HAVE_STATUS_SET_BYTES
MPIR_Status_set_bytes(status, datatype, bytes_xfered);
#endif
*error_code = MPI_SUCCESS;
}
开发者ID:NexMirror,项目名称:MPICH,代码行数:59,代码来源:ad_nfs_write.c
示例8: ADIOI_HFS_ReadContig
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status, int *error_code)
{
MPI_Count err=-1, datatype_size, len;
#ifndef PRINT_ERR_MSG
static char myname[] = "ADIOI_HFS_READCONTIG";
#endif
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
#ifdef SPPUX
fd->fp_sys_posn = -1; /* set it to null, since we are using pread */
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
err = pread64(fd->fd_sys, buf, len, offset);
else { /* read from curr. location of ind. file pointer */
err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
fd->fp_ind += err;
}
#endif
#ifdef HPUX
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
if (fd->fp_sys_posn != offset)
lseek64(fd->fd_sys, offset, SEEK_SET);
err = read(fd->fd_sys, buf, len);
fd->fp_sys_posn = offset + err;
/* individual file pointer not updated */
}
else { /* read from curr. location of ind. file pointer */
if (fd->fp_sys_posn != fd->fp_ind)
lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
err = read(fd->fd_sys, buf, len);
fd->fp_ind += err;
fd->fp_sys_posn = fd->fp_ind;
}
#endif
#ifdef HAVE_STATUS_SET_BYTES
if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
#endif
if (err == -1 ) {
#ifdef MPICH
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
#elif defined(PRINT_ERR_MSG)
*error_code = (err == -1) ? MPI_ERR_UNKNOWN : MPI_SUCCESS;
#else /* MPICH-1 */
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
myname, "I/O Error", "%s", strerror(errno));
ADIOI_Error(fd, *error_code, myname);
#endif
}
else *error_code = MPI_SUCCESS;
}
开发者ID:00datman,项目名称:ompi,代码行数:58,代码来源:ad_hfs_read.c
示例9: ompi_type_size_x_f
void ompi_type_size_x_f(MPI_Fint *type, MPI_Count *size, MPI_Fint *ierr)
{
int c_ierr;
MPI_Datatype c_type = MPI_Type_f2c(*type);
OMPI_SINGLE_NAME_DECL(size);
c_ierr = MPI_Type_size_x(c_type, size);
if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr);
}
开发者ID:JulianKunkel,项目名称:siox-gpfs-ompi,代码行数:9,代码来源:type_size_x_f.c
示例10: verify_type
static int verify_type(char *filename, MPI_Datatype type,
int64_t expected_extent, int do_coll)
{
int rank, canary;
MPI_Count tsize;
int compare=-1;
int errs=0, toterrs=0;
MPI_Status status;
MPI_File fh;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
CHECK( MPI_File_open(MPI_COMM_WORLD, filename,
MPI_MODE_CREATE|MPI_MODE_RDWR, MPI_INFO_NULL, &fh));
CHECK( MPI_File_set_view(fh, rank*sizeof(int),
MPI_BYTE, type, "native", MPI_INFO_NULL));
MPI_Type_size_x(type, &tsize);
canary=rank+1000000;
/* skip over first instance of type */
if (do_coll) {
CHECK( MPI_File_write_at_all(fh, tsize, &canary, 1, MPI_INT, &status));
} else {
CHECK( MPI_File_write_at(fh, tsize, &canary, 1, MPI_INT, &status));
}
CHECK( MPI_File_set_view(fh, 0, MPI_INT, MPI_INT, "native",
MPI_INFO_NULL));
if (do_coll) {
CHECK( MPI_File_read_at_all(fh, expected_extent/sizeof(int)+rank,
&compare, 1, MPI_INT, &status));
} else {
CHECK( MPI_File_read_at(fh, expected_extent/sizeof(int)+rank,
&compare, 1, MPI_INT, &status));
}
if (compare != canary)
errs=1;
MPI_Allreduce(&errs, &toterrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
MPI_File_close(&fh);
if (toterrs) {
printf("%d: got %d expected %d\n", rank, compare, canary);
/* keep file if there's an error */
} else {
if (rank == 0) MPI_File_delete(filename, MPI_INFO_NULL);
}
return (toterrs);
}
开发者ID:00datman,项目名称:ompi,代码行数:55,代码来源:big_extents.c
示例11: ADIOI_PANFS_ReadContig
void ADIOI_PANFS_ReadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status,
int *error_code)
{
MPI_Count err = -1, datatype_size, len;
static char myname[] = "ADIOI_PANFS_READCONTIG";
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
if (file_ptr_type == ADIO_INDIVIDUAL) {
offset = fd->fp_ind;
}
if (fd->fp_sys_posn != offset) {
err = lseek(fd->fd_sys, offset, SEEK_SET);
/* --BEGIN ERROR HANDLING-- */
if (err == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE,
myname, __LINE__,
MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
fd->fp_sys_posn = -1;
return;
}
/* --END ERROR HANDLING-- */
}
AD_PANFS_RETRY(read(fd->fd_sys, buf, len),err)
/* --BEGIN ERROR HANDLING-- */
if (err == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE,
myname, __LINE__,
MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
fd->fp_sys_posn = -1;
return;
}
/* --END ERROR HANDLING-- */
fd->fp_sys_posn = offset + err;
if (file_ptr_type == ADIO_INDIVIDUAL) {
fd->fp_ind += err;
}
#ifdef HAVE_STATUS_SET_BYTES
if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
#endif
*error_code = MPI_SUCCESS;
}
开发者ID:00datman,项目名称:ompi,代码行数:55,代码来源:ad_panfs_read.c
示例12: typestats
static void typestats(MPI_Datatype type)
{
MPI_Aint lb, extent;
MPI_Count size;
MPI_Type_get_extent(type, &lb, &extent);
MPI_Type_size_x(type, &size);
printf("dtype %d: lb = %ld extent = %ld size = %ld...",
type, (long)lb, (long)extent, size);
}
开发者ID:00datman,项目名称:ompi,代码行数:12,代码来源:big_extents.c
示例13: ADIOI_PIOFS_WriteContig
void ADIOI_PIOFS_WriteContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status, int *error_code)
{
MPI_Count err=-1, datatype_size, len;
#ifndef PRINT_ERR_MSG
static char myname[] = "ADIOI_PIOFS_WRITECONTIG";
#endif
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
if (fd->fp_sys_posn != offset) {
llseek(fd->fd_sys, offset, SEEK_SET);
}
err = write(fd->fd_sys, buf, len);
fd->fp_sys_posn = offset + err;
/* individual file pointer not updated */
}
else { /* write from curr. location of ind. file pointer */
if (fd->fp_sys_posn != fd->fp_ind) {
llseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
}
err = write(fd->fd_sys, buf, len);
fd->fp_ind += err;
fd->fp_sys_posn = fd->fp_ind;
}
#ifdef HAVE_STATUS_SET_BYTES
if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
#endif
if (err == -1) {
#ifdef MPICH
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
"**io %s", strerror(errno));
#elif defined(PRINT_ERR_MSG)
*error_code = MPI_ERR_UNKNOWN;
#else
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
myname, "I/O Error", "%s", strerror(errno));
ADIOI_Error(fd, *error_code, myname);
#endif
}
else *error_code = MPI_SUCCESS;
}
开发者ID:ORNL,项目名称:ompi,代码行数:47,代码来源:ad_piofs_write.c
示例14: ADIOI_Get_position
void ADIOI_Get_position(ADIO_File fd, ADIO_Offset *offset)
{
ADIOI_Flatlist_node *flat_file;
int i, flag;
MPI_Count filetype_size, etype_size;
int filetype_is_contig;
MPI_Aint filetype_extent;
ADIO_Offset disp, byte_offset, sum=0, size_in_file, n_filetypes, frd_size;
ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
etype_size = fd->etype_size;
if (filetype_is_contig) *offset = (fd->fp_ind - fd->disp)/etype_size;
else {
flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_size_x(fd->filetype, &filetype_size);
MPI_Type_extent(fd->filetype, &filetype_extent);
disp = fd->disp;
byte_offset = fd->fp_ind;
n_filetypes = -1;
flag = 0;
while (!flag) {
sum = 0;
n_filetypes++;
for (i=0; i<flat_file->count; i++) {
sum += flat_file->blocklens[i];
if (disp + flat_file->indices[i] +
n_filetypes* ADIOI_AINT_CAST_TO_OFFSET filetype_extent + flat_file->blocklens[i]
>= byte_offset) {
frd_size = disp + flat_file->indices[i] +
n_filetypes * ADIOI_AINT_CAST_TO_OFFSET filetype_extent
+ flat_file->blocklens[i] - byte_offset;
sum -= frd_size;
flag = 1;
break;
}
}
}
size_in_file = n_filetypes * (ADIO_Offset)filetype_size + sum;
*offset = size_in_file/etype_size;
}
}
开发者ID:NexMirror,项目名称:MPICH,代码行数:44,代码来源:get_fp_posn.c
示例15: ADIOI_FAKE_IreadStrided
/* Generic implementation of IreadStrided calls the blocking ReadStrided
* immediately.
*/
void ADIOI_FAKE_IreadStrided(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Request *request,
int *error_code)
{
ADIO_Status status;
MPI_Count typesize;
MPI_Offset nbytes=0;
/* Call the blocking function. It will create an error code
* if necessary.
*/
ADIO_ReadStrided(fd, buf, count, datatype, file_ptr_type,
offset, &status, error_code);
if (*error_code == MPI_SUCCESS) {
MPI_Type_size_x(datatype, &typesize);
nbytes = (MPI_Offset)count*(MPI_Offset)typesize;
}
MPIO_Completed_request_create(&fd, nbytes, error_code, request);
}
开发者ID:ICLDisco,项目名称:ompi,代码行数:23,代码来源:ad_iread_fake.c
示例16: ADIOI_Get_byte_offset
void ADIOI_Get_byte_offset(ADIO_File fd, ADIO_Offset offset, ADIO_Offset * disp)
{
ADIOI_Flatlist_node *flat_file;
int i;
ADIO_Offset n_filetypes, etype_in_filetype, sum, abs_off_in_filetype = 0, size_in_filetype;
MPI_Count n_etypes_in_filetype, filetype_size, etype_size;
int filetype_is_contig;
MPI_Aint filetype_extent;
ADIOI_Datatype_iscontig(fd->filetype, &filetype_is_contig);
etype_size = fd->etype_size;
if (filetype_is_contig)
*disp = fd->disp + etype_size * offset;
else {
flat_file = ADIOI_Flatten_and_find(fd->filetype);
MPI_Type_size_x(fd->filetype, &filetype_size);
n_etypes_in_filetype = filetype_size / etype_size;
n_filetypes = offset / n_etypes_in_filetype;
etype_in_filetype = offset % n_etypes_in_filetype;
size_in_filetype = etype_in_filetype * etype_size;
sum = 0;
for (i = 0; i < flat_file->count; i++) {
sum += flat_file->blocklens[i];
if (sum > size_in_filetype) {
abs_off_in_filetype = flat_file->indices[i] +
size_in_filetype - (sum - flat_file->blocklens[i]);
break;
}
}
/* abs. offset in bytes in the file */
MPI_Type_extent(fd->filetype, &filetype_extent);
*disp =
fd->disp + n_filetypes * ADIOI_AINT_CAST_TO_OFFSET filetype_extent +
abs_off_in_filetype;
}
}
开发者ID:ParaStation,项目名称:psmpi2,代码行数:40,代码来源:byte_offset.c
示例17: ADIOI_PFS_ReadContig
void ADIOI_PFS_ReadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Status *status, int *error_code)
{
MPI_Count err=-1, datatype_size, len;
static char myname[] = "ADIOI_PFS_READCONTIG";
MPI_Type_size_x(datatype, &datatype_size);
len = datatype_size * count;
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
if (fd->fp_sys_posn != offset) {
lseek(fd->fd_sys, offset, SEEK_SET);
}
err = _cread(fd->fd_sys, buf, len);
fd->fp_sys_posn = offset + err;
/* individual file pointer not updated */
}
else { /* read from curr. location of ind. file pointer */
if (fd->fp_sys_posn != fd->fp_ind) {
lseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
}
err = _cread(fd->fd_sys, buf, len);
fd->fp_ind += err;
fd->fp_sys_posn = fd->fp_ind;
}
#ifdef HAVE_STATUS_SET_BYTES
if (err != -1) MPIR_Status_set_bytes(status, datatype, err);
#endif
if (err == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
myname, __LINE__, MPI_ERR_IO,
"**io",
"**io %s", strerror(errno));
}
else *error_code = MPI_SUCCESS;
}
开发者ID:ICLDisco,项目名称:ompi,代码行数:39,代码来源:ad_pfs_read.c
示例18: ADIOI_Add_contig_flattened
/* Since ADIOI_Flatten_datatype won't add a contig datatype to the
* ADIOI_Flatlist, we can force it to do so with this function. */
ADIOI_Flatlist_node * ADIOI_Add_contig_flattened(MPI_Datatype contig_type)
{
MPI_Count contig_type_sz = -1;
ADIOI_Flatlist_node *flat_node_p = ADIOI_Flatlist;
/* Add contig type to the end of the list if it doesn't already
* exist. */
while (flat_node_p->next)
{
if (flat_node_p->type == contig_type)
return flat_node_p;
flat_node_p = flat_node_p->next;
}
if (flat_node_p->type == contig_type)
return flat_node_p;
MPI_Type_size_x(contig_type, &contig_type_sz);
if ((flat_node_p->next = (ADIOI_Flatlist_node *) ADIOI_Malloc
(sizeof(ADIOI_Flatlist_node))) == NULL)
{
fprintf(stderr, "ADIOI_Add_contig_flattened: malloc next failed\n");
}
flat_node_p = flat_node_p->next;
flat_node_p->type = contig_type;
if ((flat_node_p->blocklens = (ADIO_Offset *) ADIOI_Malloc(sizeof(ADIO_Offset))) == NULL)
{
fprintf(stderr, "ADIOI_Flatlist_node: malloc blocklens failed\n");
}
if ((flat_node_p->indices = (ADIO_Offset *)
ADIOI_Malloc(sizeof(ADIO_Offset))) == NULL)
{
fprintf(stderr, "ADIOI_Flatlist_node: malloc indices failed\n");
}
flat_node_p->blocklens[0] = contig_type_sz;
flat_node_p->indices[0] = 0;
flat_node_p->count = 1;
flat_node_p->next = NULL;
return flat_node_p;
}
开发者ID:ICLDisco,项目名称:ompi,代码行数:41,代码来源:ad_coll_exch_new.c
示例19: ADIOI_GEN_IreadStridedColl_fini
static void ADIOI_GEN_IreadStridedColl_fini(ADIOI_NBC_Request *nbc_req,
int *error_code)
{
ADIOI_GEN_IreadStridedColl_vars *vars = nbc_req->data.rd.rsc_vars;
MPI_Count size;
/* This is a temporary way of filling in status. The right way is to
keep track of how much data was actually read and placed in buf
during collective I/O. */
MPI_Type_size_x(vars->datatype, &size);
nbc_req->nbytes = size * vars->count;
/* free the struct for parameters and variables */
if (nbc_req->data.rd.rsc_vars) {
ADIOI_Free(nbc_req->data.rd.rsc_vars);
nbc_req->data.rd.rsc_vars = NULL;
}
/* make the request complete */
*error_code = MPI_Grequest_complete(nbc_req->req);
nbc_req->data.rd.state = ADIOI_IRC_STATE_COMPLETE;
}
开发者ID:ORNL,项目名称:ompi,代码行数:22,代码来源:ad_iread_coll.c
示例20: ADIOI_FAKE_IreadContig
/* Generic implementation of IreadContig calls the blocking ReadContig
* immediately.
*/
void ADIOI_FAKE_IreadContig(ADIO_File fd, void *buf, int count,
MPI_Datatype datatype, int file_ptr_type,
ADIO_Offset offset, ADIO_Request *request,
int *error_code)
{
ADIO_Status status;
MPI_Count typesize;
MPI_Offset len;
MPI_Type_size_x(datatype, &typesize);
len = (MPI_Offset)count * (MPI_Offset)typesize;
/* Call the blocking function. It will create an error code
* if necessary.
*/
ADIOI_Assert(len == (int) len); /* the count is an int parm */
ADIO_ReadContig(fd, buf, (int)len, MPI_BYTE, file_ptr_type, offset,
&status, error_code);
if (*error_code != MPI_SUCCESS) {
len=0;
}
MPIO_Completed_request_create(&fd, len, error_code, request);
}
开发者ID:ICLDisco,项目名称:ompi,代码行数:26,代码来源:ad_iread_fake.c
注:本文中的MPI_Type_size_x函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论