Skip to content
This repository was archived by the owner on Sep 30, 2022. It is now read-only.

Commit ad72a09

Browse files
committed
- make the split collective shared file pointer operations work
- minor code restructering in io/ompio required for that.
1 parent 6b95c4b commit ad72a09

File tree

9 files changed

+690
-112
lines changed

9 files changed

+690
-112
lines changed

ompi/mca/io/ompio/io_ompio.h

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

429-
OMPI_DECLSPEC int ompio_io_ompio_file_write_at_all_begin (mca_io_ompio_file_t *fh,
430-
OMPI_MPI_OFFSET_TYPE offset,
431-
void *buf,
432-
int count,
433-
struct ompi_datatype_t *datatype);
434-
435-
OMPI_DECLSPEC int ompio_io_ompio_file_write_at_all_end (mca_io_ompio_file_t *fh,
436-
void *buf,
437-
ompi_status_public_t * status);
438-
439429
OMPI_DECLSPEC int ompio_io_ompio_file_iwrite_at (mca_io_ompio_file_t *fh,
440430
OMPI_MPI_OFFSET_TYPE offset,
441431
void *buf,
@@ -449,6 +439,12 @@ OMPI_DECLSPEC int ompio_io_ompio_file_iwrite (mca_io_ompio_file_t *fh,
449439
struct ompi_datatype_t *datatype,
450440
ompi_request_t **request);
451441

442+
OMPI_DECLSPEC int ompio_io_ompio_file_iwrite_at_all (mca_io_ompio_file_t *fh,
443+
OMPI_MPI_OFFSET_TYPE offset,
444+
void *buf,
445+
int count,
446+
struct ompi_datatype_t *datatype,
447+
ompi_request_t **request);
452448
OMPI_DECLSPEC int ompio_io_ompio_file_iread (mca_io_ompio_file_t *fh,
453449
void *buf,
454450
int count,
@@ -466,6 +462,12 @@ OMPI_DECLSPEC int ompio_io_ompio_file_iread_at (mca_io_ompio_file_t *fh,
466462
int count,
467463
struct ompi_datatype_t *datatype,
468464
ompi_request_t **request);
465+
OMPI_DECLSPEC int ompio_io_ompio_file_iread_at_all (mca_io_ompio_file_t *fh,
466+
OMPI_MPI_OFFSET_TYPE offset,
467+
void *buf,
468+
int count,
469+
struct ompi_datatype_t *datatype,
470+
ompi_request_t **request);
469471
OMPI_DECLSPEC int ompio_io_ompio_file_read_at (mca_io_ompio_file_t *fh,
470472
OMPI_MPI_OFFSET_TYPE offset,
471473
void *buf,
@@ -478,14 +480,6 @@ OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all (mca_io_ompio_file_t *fh,
478480
int count,
479481
struct ompi_datatype_t *datatype,
480482
ompi_status_public_t * status);
481-
OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all_begin (mca_io_ompio_file_t *ompio_fh,
482-
OMPI_MPI_OFFSET_TYPE offset,
483-
void *buf,
484-
int count,
485-
struct ompi_datatype_t *datatype);
486-
OMPI_DECLSPEC int ompio_io_ompio_file_read_at_all_end (mca_io_ompio_file_t *ompio_fh,
487-
void *buf,
488-
ompi_status_public_t * status);
489483
OMPI_DECLSPEC int ompio_io_ompio_file_get_size (mca_io_ompio_file_t *fh,
490484
OMPI_MPI_OFFSET_TYPE *size);
491485

ompi/mca/io/ompio/io_ompio_file_read.c

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -463,18 +463,29 @@ int mca_io_ompio_file_iread_at_all (ompi_file_t *fh,
463463
{
464464
int ret = OMPI_SUCCESS;
465465
mca_io_ompio_data_t *data;
466-
mca_io_ompio_file_t *fp=NULL;
467-
OMPI_MPI_OFFSET_TYPE prev_offset;
468466
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
469-
fp = &data->ompio_fh;
467+
468+
ret = ompio_io_ompio_file_iread_at_all ( &data->ompio_fh, offset, buf, count, datatype, request );
469+
return ret;
470+
}
471+
472+
int ompio_io_ompio_file_iread_at_all (mca_io_ompio_file_t *fp,
473+
OMPI_MPI_OFFSET_TYPE offset,
474+
void *buf,
475+
int count,
476+
struct ompi_datatype_t *datatype,
477+
ompi_request_t **request)
478+
{
479+
int ret = OMPI_SUCCESS;
480+
OMPI_MPI_OFFSET_TYPE prev_offset;
470481

471482
ompio_io_ompio_file_get_position (fp, &prev_offset );
472483
ompi_io_ompio_set_explicit_offset (fp, offset);
473484

474485
if ( NULL != fp->f_fcoll->fcoll_file_iread_all ) {
475-
ret = fp->f_fcoll->fcoll_file_iread_all (&data->ompio_fh,
476-
buf,
477-
count,
486+
ret = fp->f_fcoll->fcoll_file_iread_all (fp,
487+
buf,
488+
count,
478489
datatype,
479490
request);
480491
}
@@ -664,26 +675,16 @@ int mca_io_ompio_file_read_at_all_begin (ompi_file_t *fh,
664675
{
665676
int ret = OMPI_SUCCESS;
666677
mca_io_ompio_data_t *data;
667-
678+
mca_io_ompio_file_t *fp=NULL;
668679
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
669-
ret = ompio_io_ompio_file_read_at_all_begin ( &data->ompio_fh, offset, buf, count, datatype );
670-
return ret;
671-
}
672-
673-
int ompio_io_ompio_file_read_at_all_begin (mca_io_ompio_file_t *fh,
674-
OMPI_MPI_OFFSET_TYPE offset,
675-
void *buf,
676-
int count,
677-
struct ompi_datatype_t *datatype)
678-
{
679-
int ret = OMPI_SUCCESS;
680+
fp = &data->ompio_fh;
680681

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

@@ -693,20 +694,13 @@ int mca_io_ompio_file_read_at_all_end (ompi_file_t *fh,
693694
{
694695
int ret = OMPI_SUCCESS;
695696
mca_io_ompio_data_t *data;
697+
mca_io_ompio_file_t *fp=NULL;
696698

697699
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
698-
ret = ompio_io_ompio_file_read_at_all_end ( &data->ompio_fh, buf, status );
699-
return ret;
700-
}
701-
702-
int ompio_io_ompio_file_read_at_all_end (mca_io_ompio_file_t *ompio_fh,
703-
void *buf,
704-
ompi_status_public_t * status)
705-
{
706-
int ret = OMPI_SUCCESS;
707-
ret = ompi_request_wait ( &ompio_fh->f_split_coll_req, status );
700+
fp = &data->ompio_fh;
701+
ret = ompi_request_wait ( &fp->f_split_coll_req, status );
708702

709703
/* remove the flag again */
710-
ompio_fh->f_split_coll_in_use = false;
704+
fp->f_split_coll_in_use = false;
711705
return ret;
712706
}

ompi/mca/io/ompio/io_ompio_file_write.c

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ int ompio_io_ompio_file_iwrite (mca_io_ompio_file_t *fh,
222222
ompio_req->req_type = MCA_OMPIO_REQUEST_WRITE;
223223
ompio_req->req_ompi.req_state = OMPI_REQUEST_ACTIVE;
224224

225-
if ( 0 == count ) {
225+
if ( 0 == count ) {
226226
ompi_request_complete (&ompio_req->req_ompi, 0);
227227
ompio_req->req_ompi.req_status.MPI_ERROR = OMPI_SUCCESS;
228228
ompio_req->req_ompi.req_status._ucount = 0;
@@ -574,19 +574,31 @@ int mca_io_ompio_file_iwrite_at_all (ompi_file_t *fh,
574574
{
575575
int ret = OMPI_SUCCESS;
576576
mca_io_ompio_data_t *data;
577-
mca_io_ompio_file_t *fp=NULL;
578-
OMPI_MPI_OFFSET_TYPE prev_offset;
579577

580578
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
581-
fp = &data->ompio_fh;
579+
ret = ompio_io_ompio_file_iwrite_at_all ( &data->ompio_fh, offset, buf, count, datatype, request );
580+
return ret;
581+
}
582+
583+
int ompio_io_ompio_file_iwrite_at_all (mca_io_ompio_file_t *fp,
584+
OMPI_MPI_OFFSET_TYPE offset,
585+
void *buf,
586+
int count,
587+
struct ompi_datatype_t *datatype,
588+
ompi_request_t **request)
589+
{
590+
591+
int ret = OMPI_SUCCESS;
592+
OMPI_MPI_OFFSET_TYPE prev_offset;
593+
582594
ompio_io_ompio_file_get_position (fp, &prev_offset );
583595

584596
ompi_io_ompio_set_explicit_offset (fp, offset);
585597

586598
if ( NULL != fp->f_fcoll->fcoll_file_iwrite_all ) {
587-
ret = fp->f_fcoll->fcoll_file_iwrite_all (&data->ompio_fh,
588-
buf,
589-
count,
599+
ret = fp->f_fcoll->fcoll_file_iwrite_all (fp,
600+
buf,
601+
count,
590602
datatype,
591603
request);
592604
}
@@ -597,12 +609,14 @@ int mca_io_ompio_file_iwrite_at_all (ompi_file_t *fh,
597609
ret = ompio_io_ompio_file_iwrite ( fp, buf, count, datatype, request );
598610
}
599611

600-
601612
ompi_io_ompio_set_explicit_offset (fp, prev_offset);
602613
return ret;
603614
}
604615

605616

617+
618+
619+
606620
/* Infrastructure for shared file pointer operations */
607621
/* (Individual and collective */
608622
/******************************************************/
@@ -778,51 +792,37 @@ int mca_io_ompio_file_write_at_all_begin (ompi_file_t *fh,
778792
struct ompi_datatype_t *datatype)
779793
{
780794
int ret = OMPI_SUCCESS;
781-
mca_io_ompio_data_t *data;
795+
mca_io_ompio_data_t *data=NULL;
796+
mca_io_ompio_file_t *fp=NULL;
782797

783798
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
784-
ret = ompio_io_ompio_file_write_at_all_begin ( &data->ompio_fh, offset, buf, count, datatype );
785-
return ret;
786-
}
787-
788-
int ompio_io_ompio_file_write_at_all_begin (mca_io_ompio_file_t *fh,
789-
OMPI_MPI_OFFSET_TYPE offset,
790-
void *buf,
791-
int count,
792-
struct ompi_datatype_t *datatype)
793-
{
794-
int ret = OMPI_SUCCESS;
799+
fp = &data->ompio_fh;
795800

796-
if ( true == fh->f_split_coll_in_use ) {
801+
if ( true == fp->f_split_coll_in_use ) {
797802
printf("Only one split collective I/O operation allowed per file handle at any given point in time!\n");
798803
return MPI_ERR_REQUEST;
799804
}
800-
ret = mca_io_ompio_file_iwrite_at_all ( fh->f_fh, offset, buf, count, datatype, &fh->f_split_coll_req );
801-
fh->f_split_coll_in_use = true;
805+
ret = ompio_io_ompio_file_iwrite_at_all ( fp, offset, buf, count, datatype, &fp->f_split_coll_req );
806+
fp->f_split_coll_in_use = true;
807+
802808
return ret;
803809
}
804810

811+
805812
int mca_io_ompio_file_write_at_all_end (ompi_file_t *fh,
806813
void *buf,
807814
ompi_status_public_t * status)
808815
{
809816
int ret = OMPI_SUCCESS;
810817
mca_io_ompio_data_t *data;
811-
818+
mca_io_ompio_file_t *fp=NULL;
819+
812820
data = (mca_io_ompio_data_t *) fh->f_io_selected_data;
813-
ret = ompio_io_ompio_file_read_at_all_end ( &data->ompio_fh, buf, status );
814-
return ret;
815-
}
816-
817-
int ompio_io_ompio_file_write_at_all_end (mca_io_ompio_file_t *fh,
818-
void *buf,
819-
ompi_status_public_t * status)
820-
{
821-
int ret = OMPI_SUCCESS;
822-
ret = ompi_request_wait ( &fh->f_split_coll_req, status );
821+
fp = &data->ompio_fh;
822+
ret = ompi_request_wait ( &fp->f_split_coll_req, status );
823823

824824
/* remove the flag again */
825-
fh->f_split_coll_in_use = false;
825+
fp->f_split_coll_in_use = false;
826+
826827
return ret;
827828
}
828-

0 commit comments

Comments
 (0)