Skip to content

Commit c80a842

Browse files
authored
Merge pull request #6602 from edgargabriel/topic/io_array_refactor
common/ompio: refactor the build_io_array function
2 parents 61d6770 + d43427f commit c80a842

File tree

3 files changed

+42
-28
lines changed

3 files changed

+42
-28
lines changed

ompi/mca/common/ompio/common_ompio.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,8 @@ OMPI_DECLSPEC int mca_common_ompio_file_iwrite_at_all (ompio_file_t *fp, OMPI_MP
264264
OMPI_DECLSPEC int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
265265
size_t bytes_per_cycle, int max_data, uint32_t iov_count,
266266
struct iovec *decoded_iov, int *ii, int *jj, size_t *tbw,
267-
size_t *spc );
267+
size_t *spc, mca_common_ompio_io_array_t **io_array,
268+
int *num_io_entries );
268269

269270

270271
OMPI_DECLSPEC int mca_common_ompio_file_read (ompio_file_t *fh, void *buf, int count,

ompi/mca/common/ompio/common_ompio_file_read.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,9 @@ int mca_common_ompio_file_read (ompio_file_t *fh,
152152
&i,
153153
&j,
154154
&total_bytes_read,
155-
&spc);
155+
&spc,
156+
&fh->f_io_array,
157+
&fh->f_num_of_io_entries);
156158

157159
if (fh->f_num_of_io_entries) {
158160
ret_code = fh->f_fbtl->fbtl_preadv (fh);
@@ -305,7 +307,9 @@ int mca_common_ompio_file_iread (ompio_file_t *fh,
305307
&i,
306308
&j,
307309
&total_bytes_read,
308-
&spc);
310+
&spc,
311+
&fh->f_io_array,
312+
&fh->f_num_of_io_entries);
309313

310314
if (fh->f_num_of_io_entries) {
311315
fh->f_fbtl->fbtl_ipreadv (fh, (ompi_request_t *) ompio_req);

ompi/mca/common/ompio/common_ompio_file_write.c

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ int mca_common_ompio_file_write (ompio_file_t *fh,
134134
&i,
135135
&j,
136136
&total_bytes_written,
137-
&spc);
137+
&spc,
138+
&fh->f_io_array,
139+
&fh->f_num_of_io_entries);
138140

139141
if (fh->f_num_of_io_entries) {
140142
ret_code =fh->f_fbtl->fbtl_pwritev (fh);
@@ -283,7 +285,9 @@ int mca_common_ompio_file_iwrite (ompio_file_t *fh,
283285
&i,
284286
&j,
285287
&total_bytes_written,
286-
&spc);
288+
&spc,
289+
&fh->f_io_array,
290+
&fh->f_num_of_io_entries);
287291

288292
if (fh->f_num_of_io_entries) {
289293
fh->f_fbtl->fbtl_ipwritev (fh, (ompi_request_t *) ompio_req);
@@ -411,7 +415,8 @@ int mca_common_ompio_file_iwrite_at_all (ompio_file_t *fp,
411415
int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
412416
size_t bytes_per_cycle, int max_data, uint32_t iov_count,
413417
struct iovec *decoded_iov, int *ii, int *jj, size_t *tbw,
414-
size_t *spc)
418+
size_t *spc, mca_common_ompio_io_array_t **io_array,
419+
int *num_io_entries)
415420
{
416421
ptrdiff_t disp;
417422
int block = 1;
@@ -424,7 +429,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
424429
int k = 0; /* index into the io_array */
425430
int i = *ii;
426431
int j = *jj;
427-
432+
mca_common_ompio_io_array_t *f_io_array=NULL;
433+
int f_num_io_entries=0;
434+
428435
sum_previous_length = fh->f_position_in_file_view;
429436

430437
if ((index == cycles-1) && (max_data % bytes_per_cycle)) {
@@ -434,9 +441,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
434441
bytes_to_write_in_cycle = bytes_per_cycle;
435442
}
436443

437-
fh->f_io_array = (mca_common_ompio_io_array_t *)malloc
444+
f_io_array = (mca_common_ompio_io_array_t *)malloc
438445
(OMPIO_IOVEC_INITIAL_SIZE * sizeof (mca_common_ompio_io_array_t));
439-
if (NULL == fh->f_io_array) {
446+
if (NULL == f_io_array) {
440447
opal_output(1, "OUT OF MEMORY\n");
441448
return OMPI_ERR_OUT_OF_RESOURCE;
442449
}
@@ -445,10 +452,10 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
445452
/* reallocate if needed */
446453
if (OMPIO_IOVEC_INITIAL_SIZE*block <= k) {
447454
block ++;
448-
fh->f_io_array = (mca_common_ompio_io_array_t *)realloc
449-
(fh->f_io_array, OMPIO_IOVEC_INITIAL_SIZE *
455+
f_io_array = (mca_common_ompio_io_array_t *)realloc
456+
(f_io_array, OMPIO_IOVEC_INITIAL_SIZE *
450457
block * sizeof (mca_common_ompio_io_array_t));
451-
if (NULL == fh->f_io_array) {
458+
if (NULL == f_io_array) {
452459
opal_output(1, "OUT OF MEMORY\n");
453460
return OMPI_ERR_OUT_OF_RESOURCE;
454461
}
@@ -462,15 +469,15 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
462469

463470
disp = (ptrdiff_t)decoded_iov[i].iov_base +
464471
(total_bytes_written - sum_previous_counts);
465-
fh->f_io_array[k].memory_address = (IOVBASE_TYPE *)disp;
472+
f_io_array[k].memory_address = (IOVBASE_TYPE *)disp;
466473

467474
if (decoded_iov[i].iov_len -
468475
(total_bytes_written - sum_previous_counts) >=
469476
bytes_to_write_in_cycle) {
470-
fh->f_io_array[k].length = bytes_to_write_in_cycle;
477+
f_io_array[k].length = bytes_to_write_in_cycle;
471478
}
472479
else {
473-
fh->f_io_array[k].length = decoded_iov[i].iov_len -
480+
f_io_array[k].length = decoded_iov[i].iov_len -
474481
(total_bytes_written - sum_previous_counts);
475482
}
476483

@@ -492,36 +499,36 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
492499

493500
disp = (ptrdiff_t)fh->f_decoded_iov[j].iov_base +
494501
(fh->f_total_bytes - sum_previous_length);
495-
fh->f_io_array[k].offset = (IOVBASE_TYPE *)(intptr_t)(disp + fh->f_offset);
502+
f_io_array[k].offset = (IOVBASE_TYPE *)(intptr_t)(disp + fh->f_offset);
496503

497504
if (! (fh->f_flags & OMPIO_CONTIGUOUS_FVIEW)) {
498505
if (fh->f_decoded_iov[j].iov_len -
499506
(fh->f_total_bytes - sum_previous_length)
500-
< fh->f_io_array[k].length) {
501-
fh->f_io_array[k].length = fh->f_decoded_iov[j].iov_len -
507+
< f_io_array[k].length) {
508+
f_io_array[k].length = fh->f_decoded_iov[j].iov_len -
502509
(fh->f_total_bytes - sum_previous_length);
503510
}
504511
}
505512

506-
total_bytes_written += fh->f_io_array[k].length;
507-
fh->f_total_bytes += fh->f_io_array[k].length;
508-
bytes_to_write_in_cycle -= fh->f_io_array[k].length;
513+
total_bytes_written += f_io_array[k].length;
514+
fh->f_total_bytes += f_io_array[k].length;
515+
bytes_to_write_in_cycle -= f_io_array[k].length;
509516
k = k + 1;
510517
}
511518
fh->f_position_in_file_view = sum_previous_length;
512519
fh->f_index_in_file_view = j;
513-
fh->f_num_of_io_entries = k;
520+
f_num_io_entries = k;
514521

515522
#if 0
516523
if (fh->f_rank == 0) {
517524
int d;
518-
printf("*************************** %d\n", fh->f_num_of_io_entries);
525+
printf("*************************** %d\n", f_num_io_entries);
519526

520-
for (d=0 ; d<fh->f_num_of_io_entries ; d++) {
527+
for (d=0 ; d<f_num_of_entries ; d++) {
521528
printf(" ADDRESS: %p OFFSET: %p LENGTH: %d prev_count=%ld prev_length=%ld\n",
522-
fh->f_io_array[d].memory_address,
523-
fh->f_io_array[d].offset,
524-
fh->f_io_array[d].length,
529+
f_io_array[d].memory_address,
530+
f_io_array[d].offset,
531+
f_io_array[d].length,
525532
sum_previous_counts, sum_previous_length);
526533
}
527534
}
@@ -530,7 +537,9 @@ int mca_common_ompio_build_io_array ( ompio_file_t *fh, int index, int cycles,
530537
*jj = j;
531538
*tbw = total_bytes_written;
532539
*spc = sum_previous_counts;
533-
540+
*io_array = f_io_array;
541+
*num_io_entries = f_num_io_entries;
542+
534543
return OMPI_SUCCESS;
535544
}
536545

0 commit comments

Comments
 (0)