Created
March 7, 2022 03:16
-
-
Save lucasvr/ad4c94e934f237134388e3b503c957d0 to your computer and use it in GitHub Desktop.
HDF5 io_ops path analysis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
digraph G { | |
label = "Parallel I/O in HDF5" | |
forcelabels = true | |
rankdir = "TB" | |
compound = true | |
splines = true # true polyline curved | |
node [style=""] | |
subgraph cluster_h5dpkg_h { | |
label = "H5Dpkg.h" | |
style = "filled" | |
fillcolor = "gray" | |
s_struct[ | |
shape = "record" | |
style = "filled" | |
fillcolor = "white" | |
label = "{ | |
<layout> H5D_layout_ops_t \{\l\ H5D_layout_read_func_t par_read;\l\ H5D_layout_write_func_t par_write;\l\}\l| | |
<io_info> H5D_io_info_t \{\l\ hbool_t using_mpi_vfd;\l\}\l| | |
<chunk_map> H5D_chunk_map_t \{\l\ H5D_chunk_info_t **select_chunk;\l\}\l}" | |
] | |
} | |
subgraph cluster_h5dchunk { | |
label = "H5Dchunk.c" | |
style = "filled" | |
fillcolor = "khaki" | |
node[style="filled" fillcolor="white"] | |
s_chunk_struct[ | |
shape = "record" | |
label="{ | |
<file_iter> H5D_chunk_file_iter_ud_t \{\l\ const H5D_io_info_t *io_info;\l\}\l| | |
<lops> H5D_layout_ops_t H5D_LOPS_CHUNK = \{\l\ .ser_read = H5D__chunk_read,\l\ .par_read = H5D__chunk_collective_read\l\}\l} | |
" | |
] | |
subgraph cluster_chunk_read { | |
label = <<b><font point-size='16'>H5D__chunk_read()</font></b>> | |
fillcolor="moccasin" | |
s_chunk_read_init_chunk[ | |
shape = "box" | |
label = "chunk = H5D_CHUNK_GET_FIRST_NODE()" | |
] | |
s_chunk_read_next_chunk[ | |
shape = "box" | |
label = "chunk = H5D_CHUNK_GET_NEXT_NODE()" | |
] | |
s_chunk_read_test_chunk[ | |
shape = "diamond" | |
label = "Got chunk?" | |
] | |
s_single_read[ | |
shape = "box" | |
label = "io_info->io_ops.single_read(...)" | |
] | |
s_chunk_read_init_chunk -> s_chunk_read_test_chunk | |
s_chunk_read_test_chunk-> s_single_read [label="yes"] | |
s_single_read -> s_chunk_read_next_chunk -> s_chunk_read_test_chunk | |
} | |
s_chunk_struct:lops -> s_chunk_read_init_chunk [lhead=cluster_chunk_read color="magenta" penwidth=2 style="dashed"] | |
} | |
subgraph cluster_h5dcontig { | |
label = "H5Dcontig.c" | |
style = "filled" | |
fillcolor = "khaki" | |
node[style="filled" fillcolor="white"] | |
s_lops_contig[ | |
shape = "box" | |
label = "H5D_layout_ops_t H5D_LOPS_CONTIG = {\l .ser_read = H5D__contig_read,\l .par_read = H5D__contig_collective_read\l}\l" | |
] | |
subgraph cluster_contig_read { | |
label = <<b><font point-size='16'>H5D__contig_read()</font></b>> | |
fillcolor="moccasin" | |
s_contig_single_read[ | |
shape = "box" | |
label = "io_info->io_ops.single_read(...)" | |
] | |
} | |
s_lops_contig -> s_contig_single_read [lhead=cluster_contig_read style="dashed"] | |
} | |
subgraph cluster_h5dmpio { | |
label = "MPI-based I/O (H5Dmpio.c)" | |
bgcolor = "gold" | |
s_optimized_read_fn[ | |
shape = "record" | |
style = "filled" | |
fillcolor = "white" | |
label = "{ | |
H5D__chunk_collective_read()| | |
H5D__contig_collective_read()| | |
H5D__mpio_select_read()} | |
" | |
] | |
} | |
subgraph cluster_h5dio { | |
label = <<b><font point-size='16'>H5D__read()</font></b> (H5Dio.c)> | |
bgcolor = "ivory" | |
s_read[shape="box" label="io_info->io_ops.multi_read(...)" style="filled" fillcolor="floralwhite"] | |
subgraph cluster_ioinfo_init_fn { | |
label = "H5D__ioinfo_init()" | |
bgcolor = "floralwhite" | |
s_io_ops[ | |
shape="box" | |
label = "io_info->io_ops = {\l\ .multi_read = dset->shared->layout.ops->ser_read, \l\ .single_read = conv_needed ? H5D__scatgath_read : H5D__select_read\l\}\l" | |
] | |
} | |
subgraph cluster_ioinfo_adjust_fn { | |
label = "H5D__ioinfo_adjust()" | |
bgcolor = "floralwhite" | |
t_adjust_mpi_vfd[shape="diamond" label="io_info->using_mpi_vfd?"] | |
t_adjust_collective_io[shape="diamond" label="Is collective I/O possible?"] | |
} | |
subgraph cluster_collective_read { | |
label = "Collective I/O" | |
bgcolor = "floralwhite" | |
s_io_ops_collective[ | |
shape = "box" | |
label = "io_info->io_ops = {\l\ .multi_read = dset->shared->layout.ops->par_read, \l\ .single_read = H5D__mpio_select_read\l\}\l" | |
] | |
} | |
s_io_ops -> t_adjust_mpi_vfd [ltail=cluster_ioinfo_init_fn] | |
t_adjust_mpi_vfd -> t_adjust_collective_io [label="yes" color="darkgreen" penwidth=2] | |
t_adjust_mpi_vfd -> s_read [label="no" color="red" penwidth=2] | |
t_adjust_collective_io -> s_io_ops_collective [label="yes" lhead="cluster_collective_read" color="darkgreen" penwidth=2] | |
t_adjust_collective_io -> s_read [label="no" color="red" penwidth=2] | |
s_io_ops_collective -> s_read [color="darkgreen" penwidth=2] | |
s_read -> s_optimized_read_fn:n [lhead="cluster_h5dmpio" label="MPI-based I/O" style="dashed" color="darkgreen" penwidth=2 minlen=2] | |
s_read -> s_chunk_read_init_chunk [lhead=cluster_chunk_read label="Chunked dataset, no MPI" style="dashed" color="red" penwidth=2] | |
s_read -> s_contig_single_read [lhead=cluster_contig_read label="Contiguous dataset, no MPI" style="dashed" color="red" penwidth=2] | |
} | |
subgraph cluster_vol { | |
label = "VOL driver (H5VLconnector.h, H5VLnative.c)" | |
bgcolor = "turquoise" | |
s_dataset_cls[ | |
shape = "box" | |
style = "filled" | |
color = "white" | |
label = "H5VL_native_cls_g.dataset_cls = {\l .read = H5VL__native_dataset_read\l}\l" | |
] | |
s_native_dataset_read[ | |
shape = "box" | |
style = "filled" | |
color = "white" | |
label = "H5VL__native_dataset_read()" | |
] | |
s_dataset_cls -> s_native_dataset_read [style="dashed"] | |
s_native_dataset_read -> s_io_ops:n [lhead=cluster_h5dio] | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment