Skip to content

Commit a3327fe

Browse files
committed
Merge pull request #756 from edgargabriel/pr/nb-sharedfp-splitcoll2
- make the split collective shared file pointer operations work
2 parents 377bad1 + 3780089 commit a3327fe

File tree

9 files changed

+733
-120
lines changed

9 files changed

+733
-120
lines changed

ompi/mca/io/ompio/io_ompio.h

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -422,16 +422,6 @@ OMPI_DECLSPEC int ompio_io_ompio_file_write_at_all (mca_io_ompio_file_t *fh,
422422
struct ompi_datatype_t *datatype,
423423
ompi_status_public_t *status);
424424

425-
OMPI_DECLSPEC int ompio_io_ompio_file_write_at_all_begin (mca_io_ompio_file_t *fh,
426-
OMPI_MPI_OFFSET_TYPE offset,
427-
void *buf,
428-
int count,
429-
struct ompi_datatype_t *datatype);
430-
431-
OMPI_DECLSPEC int ompio_io_ompio_file_write_at_all_end (mca_io_ompio_file_t *fh,
432-
void *buf,
433-
ompi_status_public_t * status);
434-
435425
OMPI_DECLSPEC int ompio_io_ompio_file_iwrite_at (mca_io_ompio_file_t *fh,
436426
OMPI_MPI_OFFSET_TYPE offset,
437427
void *buf,
@@ -445,6 +435,12 @@ OMPI_DECLSPEC int ompio_io_ompio_file_iwrite (mca_io_ompio_file_t *fh,
445435
struct ompi_datatype_t *datatype,
446436
ompi_request_t **request);
447437

438+
OMPI_DECLSPEC int ompio_io_ompio_file_iwrite_at_all (mca_io_ompio_file_t *fh,
439+
OMPI_MPI_OFFSET_TYPE offset,
440+
void *buf,
441+
int count,
442+
struct ompi_datatype_t *datatype,
443+
ompi_request_t **request);
448444
OMPI_DECLSPEC int ompio_io_ompio_file_iread (mca_io_ompio_file_t *fh,
449445
void *buf,
450446
int count,
@@ -462,6 +458,12 @@ OMPI_DECLSPEC int ompio_io_ompio_file_iread_at (mca_io_ompio_file_t *fh,
462458
int count,
463459
struct ompi_datatype_t *datatype,
464460
ompi_request_t **request);
461+
OMPI_DECLSPEC int ompio_io_ompio_file_iread_at_all (mca_io_ompio_file_t *fh,
462+
OMPI_MPI_OFFSET_TYPE offset,
463+
void *buf,
464+
int count,
465+
struct ompi_datatype_t *datatype,
466+
ompi_request_t **request);
465467
OMPI_DECLSPEC int ompio_io_ompio_file_read_at (mca_io_ompio_file_t *fh,
466468
OMPI_MPI_OFFSET_TYPE offset,
467469
void *buf,
@@ -474,14 +476,6 @@ OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all (mca_io_ompio_file_t *fh,
474476
int count,
475477
struct ompi_datatype_t *datatype,
476478
ompi_status_public_t * status);
477-
OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all_begin (mca_io_ompio_file_t *ompio_fh,
478-
OMPI_MPI_OFFSET_TYPE offset,
479-
void *buf,
480-
int count,
481-
struct ompi_datatype_t *datatype);
482-
OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all_end (mca_io_ompio_file_t *ompio_fh,
483-
void *buf,
484-
ompi_status_public_t * status);
485479
OMPI_DECLSPEC int ompio_io_ompio_file_get_size (mca_io_ompio_file_t *fh,
486480
OMPI_MPI_OFFSET_TYPE *size);
487481

ompi/mca/io/ompio/io_ompio_file_read.c

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -458,16 +458,27 @@ int mca_io_ompio_file_iread_at_all (ompi_file_t *fh,
458458
{
459459
int ret = OMPI_SUCCESS;
460460
mca_io_ompio_data_t *data;
461-
mca_io_ompio_file_t *fp=NULL;
462-
OMPI_MPI_OFFSET_TYPE prev_offset;
463461
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
464-
fp = &data->ompio_fh;
462+
463+
ret = ompio_io_ompio_file_iread_at_all ( &data->ompio_fh, offset, buf, count, datatype, request );
464+
return ret;
465+
}
466+
467+
int ompio_io_ompio_file_iread_at_all (mca_io_ompio_file_t *fp,
468+
OMPI_MPI_OFFSET_TYPE offset,
469+
void *buf,
470+
int count,
471+
struct ompi_datatype_t *datatype,
472+
ompi_request_t **request)
473+
{
474+
int ret = OMPI_SUCCESS;
475+
OMPI_MPI_OFFSET_TYPE prev_offset;
465476

466477
ompio_io_ompio_file_get_position (fp, &prev_offset );
467478
ompi_io_ompio_set_explicit_offset (fp, offset);
468479

469480
if ( NULL != fp->f_fcoll->fcoll_file_iread_all ) {
470-
ret = fp->f_fcoll->fcoll_file_iread_all (&data->ompio_fh,
481+
ret = fp->f_fcoll->fcoll_file_iread_all (fp,
471482
buf,
472483
count,
473484
datatype,
@@ -659,26 +670,16 @@ int mca_io_ompio_file_read_at_all_begin (ompi_file_t *fh,
659670
{
660671
int ret = OMPI_SUCCESS;
661672
mca_io_ompio_data_t *data;
662-
673+
mca_io_ompio_file_t *fp=NULL;
663674
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
664-
ret = ompio_io_ompio_file_read_at_all_begin ( &data->ompio_fh, offset, buf, count, datatype );
665-
return ret;
666-
}
667-
668-
int ompio_io_ompio_file_read_at_all_begin (mca_io_ompio_file_t *fh,
669-
OMPI_MPI_OFFSET_TYPE offset,
670-
void *buf,
671-
int count,
672-
struct ompi_datatype_t *datatype)
673-
{
674-
int ret = OMPI_SUCCESS;
675+
fp = &data->ompio_fh;
675676

676-
if ( true == fh->f_split_coll_in_use ) {
677+
if ( true == fp->f_split_coll_in_use ) {
677678
printf("Only one split collective I/O operation allowed per file handle at any given point in time!\n");
678679
return MPI_ERR_REQUEST;
679680
}
680-
ret = mca_io_ompio_file_iread_at_all ( fh->f_fh, offset, buf, count, datatype, &fh->f_split_coll_req );
681-
fh->f_split_coll_in_use = true;
681+
ret = ompio_io_ompio_file_iread_at_all ( fp, offset, buf, count, datatype, &fp->f_split_coll_req );
682+
fp->f_split_coll_in_use = true;
682683
return ret;
683684
}
684685

@@ -688,20 +689,13 @@ int mca_io_ompio_file_read_at_all_end (ompi_file_t *fh,
688689
{
689690
int ret = OMPI_SUCCESS;
690691
mca_io_ompio_data_t *data;
692+
mca_io_ompio_file_t *fp=NULL;
691693

692694
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
693-
ret = ompio_io_ompio_file_read_at_all_end ( &data->ompio_fh, buf, status );
694-
return ret;
695-
}
696-
697-
int ompio_io_ompio_file_read_at_all_end (mca_io_ompio_file_t *ompio_fh,
698-
void *buf,
699-
ompi_status_public_t * status)
700-
{
701-
int ret = OMPI_SUCCESS;
702-
ret = ompi_request_wait ( &ompio_fh->f_split_coll_req, status );
695+
fp = &data->ompio_fh;
696+
ret = ompi_request_wait ( &fp->f_split_coll_req, status );
703697

704698
/* remove the flag again */
705-
ompio_fh->f_split_coll_in_use = false;
699+
fp->f_split_coll_in_use = false;
706700
return ret;
707701
}

ompi/mca/io/ompio/io_ompio_file_write.c

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ int ompio_io_ompio_file_iwrite (mca_io_ompio_file_t *fh,
217217
ompio_req->req_type = MCA_OMPIO_REQUEST_WRITE;
218218
ompio_req->req_ompi.req_state = OMPI_REQUEST_ACTIVE;
219219

220-
if ( 0 == count ) {
220+
if ( 0 == count ) {
221221
ompi_request_complete (&ompio_req->req_ompi, 0);
222222
ompio_req->req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS;
223223
ompio_req->req_ompi.req_status._ucount = 0;
@@ -569,17 +569,29 @@ int mca_io_ompio_file_iwrite_at_all (ompi_file_t *fh,
569569
{
570570
int ret = OMPI_SUCCESS;
571571
mca_io_ompio_data_t *data;
572-
mca_io_ompio_file_t *fp=NULL;
573-
OMPI_MPI_OFFSET_TYPE prev_offset;
574572

575573
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
576-
fp = &data->ompio_fh;
574+
ret = ompio_io_ompio_file_iwrite_at_all ( &data->ompio_fh, offset, buf, count, datatype, request );
575+
return ret;
576+
}
577+
578+
int ompio_io_ompio_file_iwrite_at_all (mca_io_ompio_file_t *fp,
579+
OMPI_MPI_OFFSET_TYPE offset,
580+
void *buf,
581+
int count,
582+
struct ompi_datatype_t *datatype,
583+
ompi_request_t **request)
584+
{
585+
586+
int ret = OMPI_SUCCESS;
587+
OMPI_MPI_OFFSET_TYPE prev_offset;
588+
577589
ompio_io_ompio_file_get_position (fp, &prev_offset );
578590

579591
ompi_io_ompio_set_explicit_offset (fp, offset);
580592

581593
if ( NULL != fp->f_fcoll->fcoll_file_iwrite_all ) {
582-
ret = fp->f_fcoll->fcoll_file_iwrite_all (&data->ompio_fh,
594+
ret = fp->f_fcoll->fcoll_file_iwrite_all (fp,
583595
buf,
584596
count,
585597
datatype,
@@ -592,12 +604,14 @@ int mca_io_ompio_file_iwrite_at_all (ompi_file_t *fh,
592604
ret = ompio_io_ompio_file_iwrite ( fp, buf, count, datatype, request );
593605
}
594606

595-
596607
ompi_io_ompio_set_explicit_offset (fp, prev_offset);
597608
return ret;
598609
}
599610

600611

612+
613+
614+
601615
/* Infrastructure for shared file pointer operations */
602616
/* (Individual and collective */
603617
/******************************************************/
@@ -773,51 +787,37 @@ int mca_io_ompio_file_write_at_all_begin (ompi_file_t *fh,
773787
struct ompi_datatype_t *datatype)
774788
{
775789
int ret = OMPI_SUCCESS;
776-
mca_io_ompio_data_t *data;
790+
mca_io_ompio_data_t *data=NULL;
791+
mca_io_ompio_file_t *fp=NULL;
777792

778793
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
779-
ret = ompio_io_ompio_file_write_at_all_begin ( &data->ompio_fh, offset, buf, count, datatype );
780-
return ret;
781-
}
782-
783-
int ompio_io_ompio_file_write_at_all_begin (mca_io_ompio_file_t *fh,
784-
OMPI_MPI_OFFSET_TYPE offset,
785-
void *buf,
786-
int count,
787-
struct ompi_datatype_t *datatype)
788-
{
789-
int ret = OMPI_SUCCESS;
794+
fp = &data->ompio_fh;
790795

791-
if ( true == fh->f_split_coll_in_use ) {
796+
if ( true == fp->f_split_coll_in_use ) {
792797
printf("Only one split collective I/O operation allowed per file handle at any given point in time!\n");
793798
return MPI_ERR_REQUEST;
794799
}
795-
ret = mca_io_ompio_file_iwrite_at_all ( fh->f_fh, offset, buf, count, datatype, &fh->f_split_coll_req );
796-
fh->f_split_coll_in_use = true;
800+
ret = ompio_io_ompio_file_iwrite_at_all ( fp, offset, buf, count, datatype, &fp->f_split_coll_req );
801+
fp->f_split_coll_in_use = true;
802+
797803
return ret;
798804
}
799805

806+
800807
int mca_io_ompio_file_write_at_all_end (ompi_file_t *fh,
801808
void *buf,
802809
ompi_status_public_t * status)
803810
{
804811
int ret = OMPI_SUCCESS;
805812
mca_io_ompio_data_t *data;
806-
813+
mca_io_ompio_file_t *fp=NULL;
814+
807815
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
808-
ret = ompio_io_ompio_file_read_at_all_end ( &data->ompio_fh, buf, status );
809-
return ret;
810-
}
811-
812-
int ompio_io_ompio_file_write_at_all_end (mca_io_ompio_file_t *fh,
813-
void *buf,
814-
ompi_status_public_t * status)
815-
{
816-
int ret = OMPI_SUCCESS;
817-
ret = ompi_request_wait ( &fh->f_split_coll_req, status );
816+
fp = &data->ompio_fh;
817+
ret = ompi_request_wait ( &fp->f_split_coll_req, status );
818818

819819
/* remove the flag again */
820-
fh->f_split_coll_in_use = false;
820+
fp->f_split_coll_in_use = false;
821+
821822
return ret;
822823
}
823-

0 commit comments

Comments
 (0)