Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2c3d809
created framework for new docs
TheAssembler1 Jun 26, 2025
3aa3d34
worked on getting started example
TheAssembler1 Jun 26, 2025
3e3b90c
section numbers
TheAssembler1 Jun 26, 2025
a6b6675
update compiliation and running PDC
TheAssembler1 Jun 26, 2025
0bfe61f
started working on hdf5 vol and pdcpy docs
TheAssembler1 Jun 28, 2025
84575b6
updated introdution with index for installation types
TheAssembler1 Jul 9, 2025
eda4f06
worked on first program examples and installation
TheAssembler1 Jul 16, 2025
492b1f3
worked on first program examples and installation
TheAssembler1 Jul 16, 2025
36640a4
worked on first program examples and installation
TheAssembler1 Jul 16, 2025
3c55cac
message
avimaloo1 Jul 25, 2025
e495a65
Merge branch 'documentation_rework' of https://github.com/hpc-io/pdc …
avimaloo1 Jul 30, 2025
8bed151
checkpoint
TheAssembler1 Jul 30, 2025
2de5262
Merge branch 'documentation_rework' of https://github.com/hpc-io/pdc …
avimaloo1 Jul 30, 2025
4bcba8b
message
avimaloo1 Jul 30, 2025
a39197c
rename services -> using PDC
TheAssembler1 Aug 5, 2025
f2d1249
using PDC update
TheAssembler1 Aug 6, 2025
edd7541
started working on client API
TheAssembler1 Aug 13, 2025
1abb4b2
update C documentation so breathe can extract more docs
TheAssembler1 Aug 13, 2025
caeaf2a
Committing clang-format changes
github-actions[bot] Aug 13, 2025
2a2ab4b
more type documentation
TheAssembler1 Aug 13, 2025
ea29869
Merge branch 'documentation_rework' of https://github.com/hpc-io/pdc …
TheAssembler1 Aug 13, 2025
76b1d82
Add more API functions
TheAssembler1 Aug 13, 2025
be61033
update tools
TheAssembler1 Aug 13, 2025
42c3718
merge with develop
TheAssembler1 Sep 16, 2025
1748938
checkpoint
TheAssembler1 Sep 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@ pip install -r requirements.txt

### 3. Build the html
```bash
python -m sphinx -T -b html -d _build/doctrees -D language=en source html
python3.8 -m sphinx -T -b html -d _build/doctrees -D language=en source html
```
6 changes: 6 additions & 0 deletions docs/_static/css/pdc.css
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,10 @@ div.rst-content dl dt {
background: #efe7fa;
color: #65419d;
border-left: 3px solid #65419d;
}

.bordered-image {
border: 2px solid #555;
padding: 4px;
border-radius: 4px;
}
229 changes: 229 additions & 0 deletions docs/_static/figs/pdc-containers-objects-regions.drawio

Large diffs are not rendered by default.

187 changes: 187 additions & 0 deletions docs/_static/figs/pdc-installation.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0" version="28.2.3">
<diagram name="Page-1" id="20YhaTEln18I4_PRPuHV">
<mxGraphModel dx="815" dy="424" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-1" value="Core Dependencies" style="swimlane;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" parent="1" vertex="1">
<mxGeometry x="210" y="230" width="220" height="120" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-4" value="Libfabric" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="GD93v9iV0xq1SFaQ8Sx2-1" vertex="1">
<mxGeometry x="10" y="30" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-8" value="Mercury" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="GD93v9iV0xq1SFaQ8Sx2-1" vertex="1">
<mxGeometry x="80" y="30" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-9" value="PDC Lib" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="GD93v9iV0xq1SFaQ8Sx2-1" vertex="1">
<mxGeometry x="150" y="30" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-14" value="Spack" style="endArrow=none;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="GD93v9iV0xq1SFaQ8Sx2-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-50" y="100" as="sourcePoint" />
<mxPoint y="100" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-15" value="" style="endArrow=blockThin;html=1;rounded=0;endFill=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="GD93v9iV0xq1SFaQ8Sx2-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint y="100" as="sourcePoint" />
<mxPoint x="150" y="100" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-7" value="Spack" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="GD93v9iV0xq1SFaQ8Sx2-1" vertex="1">
<mxGeometry x="150" y="90" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-24" value="" style="endArrow=blockThin;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryX=0;entryY=1;entryDx=0;entryDy=0;startArrow=none;startFill=0;endFill=0;" parent="1" source="GD93v9iV0xq1SFaQ8Sx2-7" target="GD93v9iV0xq1SFaQ8Sx2-46" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="350" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-3" value="Targets" style="swimlane;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" parent="1" vertex="1">
<mxGeometry x="470" y="230" width="150" height="120" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-19" value="Python" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="GD93v9iV0xq1SFaQ8Sx2-3" vertex="1">
<mxGeometry x="10" y="60" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-20" value="C API" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="GD93v9iV0xq1SFaQ8Sx2-3" vertex="1">
<mxGeometry x="80" y="30" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-21" value="HDF5" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="GD93v9iV0xq1SFaQ8Sx2-3" vertex="1">
<mxGeometry x="10" y="90" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-26" value="PDCpy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="GD93v9iV0xq1SFaQ8Sx2-3" vertex="1">
<mxGeometry x="80" y="60" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-27" value="PDC VOL" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="GD93v9iV0xq1SFaQ8Sx2-3" vertex="1">
<mxGeometry x="80" y="90" width="60" height="20" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-29" value="" style="endArrow=blockThin;html=1;rounded=0;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="GD93v9iV0xq1SFaQ8Sx2-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="70" y="69.80000000000001" as="sourcePoint" />
<mxPoint x="80" y="70" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-31" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=0;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="GD93v9iV0xq1SFaQ8Sx2-3" source="GD93v9iV0xq1SFaQ8Sx2-21" target="GD93v9iV0xq1SFaQ8Sx2-27" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="30" y="160" as="sourcePoint" />
<mxPoint x="60" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-11" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="150" y="265" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-12" value="&lt;div&gt;From&lt;/div&gt;&lt;div&gt;Source&lt;/div&gt;" style="endArrow=none;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="270" as="sourcePoint" />
<mxPoint x="210" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-16" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="210" y="270" as="sourcePoint" />
<mxPoint x="260" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-17" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-8" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="270" as="sourcePoint" />
<mxPoint x="330" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-18" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="270" as="sourcePoint" />
<mxPoint x="400" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-25" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=0;exitY=0;exitDx=0;exitDy=0;startArrow=blockThin;startFill=0;" parent="1" source="GD93v9iV0xq1SFaQ8Sx2-46" target="GD93v9iV0xq1SFaQ8Sx2-9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="450" y="300" as="sourcePoint" />
<mxPoint x="480" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-28" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="450" y="300" as="sourcePoint" />
<mxPoint x="500" y="250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-30" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" source="GD93v9iV0xq1SFaQ8Sx2-46" target="GD93v9iV0xq1SFaQ8Sx2-21" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="450" y="300" as="sourcePoint" />
<mxPoint x="500" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-32" value="" style="endArrow=none;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="270" as="sourcePoint" />
<mxPoint x="450" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-33" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-20" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="270" as="sourcePoint" />
<mxPoint x="530" y="220" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-34" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="670" y="265" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-35" value="Target 1" style="endArrow=none;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="270" as="sourcePoint" />
<mxPoint x="670" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-37" value="" style="endArrow=none;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="610" y="269.79" as="sourcePoint" />
<mxPoint x="620" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-38" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" source="GD93v9iV0xq1SFaQ8Sx2-26" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="350" as="sourcePoint" />
<mxPoint x="620" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-39" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" source="GD93v9iV0xq1SFaQ8Sx2-27" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="690" y="360" as="sourcePoint" />
<mxPoint x="620" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-40" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="670" y="295" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-41" value="Target 2" style="endArrow=none;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="300" as="sourcePoint" />
<mxPoint x="670" y="300" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-42" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
<mxGeometry x="670" y="325" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-43" value="Target 3" style="endArrow=none;html=1;rounded=0;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="330" as="sourcePoint" />
<mxPoint x="670" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-47" value="" style="endArrow=blockThin;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" target="GD93v9iV0xq1SFaQ8Sx2-46" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="450" y="300" as="sourcePoint" />
<mxPoint x="480" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-46" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="445" y="295" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="GD93v9iV0xq1SFaQ8Sx2-13" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="150" y="325" width="10" height="10" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/_static/image/pdc-installation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/container_hashtable_checkpoint.png
Binary file not shown.
Binary file removed docs/data_hashtable_checkpoint.png
Binary file not shown.
Binary file removed docs/data_server_checkpoint.png
Binary file not shown.
Binary file removed docs/pdc_metadata_flow.png
Binary file not shown.
Binary file removed docs/pdc_plots.pptx
Binary file not shown.
Binary file removed docs/pdc_region_transfer_request_flow.png
Binary file not shown.
60 changes: 60 additions & 0 deletions docs/source/advanced_topics.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
.. _advanced_topics:

**4.** Advanced Topics
======================

**4.1** Asynchronous I/O and Event Handling
-------------------------------------------

PDC’s architecture enables efficient asynchronous I/O operations, allowing computation and communication to overlap,
which improves application performance especially in HPC environments.

Using asynchronous APIs:
* PDC provides non-blocking APIs for data transfer such as PDCregion_transfer_start() which initiates a transfer without waiting for completion
* Multiple asynchronous transfers can be launched concurrently to maximize throughputs
* Buffers remain valid until the transfer completes, so the application should avoid modifying memory before transfer completion.

Monitoring events:
* Applications can query the status of transfers using event monitoring APIs like PDCregion_transfer_wait() or polling mechanisms
* Event callbacks can be registered to handle completion asynchronously, improving responsiveness and resource management.

Waiting for events:
* Synchronization can be achieved by explicitly waiting for event completion to ensure data consistency
* Use blocking calls or condition variables to coordinate dependent computations after I/O completion


**4.2** Scalability and Performance
-----------------------------------

Data placement:
* PDC supports policy-driven data placement to optimize locality and bandwidth usage
* Object metadata guides data distribution across different storage hierarchies
* Applications can hint preferred storage classes or tiers to improve I/O performance.

PDC server tuning:
* Server-side parameters such as thread counts, buffer sizes, and cache policies can be tuned for target workloads and for different data types
* Load balancing between servers ensures no single node becomes a bottleneck, and that the data is balanced properly
* Profiling server behavior helps identify hot spots or resource contention.



**4.3** Integration with MPI and Libraries
------------------------------------------

Using PDC with MPI:

PDC seamlessly integrates with MPI for communication in distributed-memory environments.
MPI ranks act as PDC clients issuing data operations concurrently.
Also, MPI synchronization primitives can coordinate phases of PDC usage.

Comparison between libraries:

* Unlike traditional MPI-IO, PDC offers object-based APIs with asynchronous data transfers and metadata indexing
* Compared to HDF5 or ADIOS, PDC provides a more flexible abstraction layer, optimized for highly scalable and concurrent workloads
* PDC’s client-server model decouples data access from storage layout, enabling adaptable backends.

**4.4** PDC HDF5
------------------------------------------

TODO use cases, examples

Loading
Loading