SlideShare a Scribd company logo
1 of 68
Download to read offline
Overview of Parallel HDF5 and
Performance Tuning in HDF5
Library
HDF and HDF-EOS Workshop VI
Elena Pourmal, Albert Cheng

-1-
Outline
Overview of Parallel HDF5 design
Setting up parallel environment
Programming model for
_ Creating and accessing a File
_ Creating and accessing a Dataset
_ Writing and reading Hyperslabs

Performance tuning in HDF5
Parallel tutorial available at

_ http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor

-2-
PHDF5 Initial Target
Support for MPI programming
Not for shared memory programming
_ Threads
_ OpenMP

Has some experiments with
_ Thread-safe support for Pthreads
_ OpenMP if called correctly

-3-
PHDF5 Requirements
PHDF5 files compatible with serial HDF5
files
_ Shareable between different serial or parallel
platforms

Single file image to all processes
_ One file per process design is undesirable
Expensive post processing
Not useable by different number of processes

Standard parallel I/O interface
_ Must be portable to different platforms
-4-
Implementation Requirements
No use of Threads
_ Not commonly supported (1998)

No reserved process
_ May interfere with parallel algorithms

No spawn process
_ Not commonly supported even now

-5-
PHDF5 Implementation Layers

Parallel
Application

Parallel
Application

Parallel
Application

Parallel
Application

HDF library

Parallel HDF5 + MPI

MPI-IO

O2K Unix I/O

SP GPFS

User Applications

Parallel I/O layer

TFLOPS PFS

-6-

Parallel File systems
Parallel Environment
Requirements
MPI with MPI-IO
_ Argonne ROMIO
_ Vendor s MPI-IO

Parallel file system
_ IBM GPFS
_ PVFS

-7-
How to Compile PHDF5
h5cc _ HDF5 compiler command
_ Similar to mpicc

To compile:
% h5cc h5prog.c
Show the compiler commands
without executing them (i.e.,
dryrun):
% h5cc _show h5prog.c
-8-
Collective vs. Independent
Calls
MPI definition of collective call
_ All processes of the communicator must
participate in the right order

Independent means not collective
Collective is not necessarily
synchronous

-9-
Programming Restrictions
Most PHDF5 APIs are collective
PHDF5 opens a parallel file with a
communicator

_ Returns a file-handle
_ Future access to the file via the filehandle
_ All processes must participate in
collective PHDF5 APIs
_ Different files can be opened via
different communicators
- 10 -
Examples of PHDF5 API
Examples of PHDF5 collective API
_ File operations: H5Fcreate, H5Fopen, H5Fclose
_ Objects creation: H5Dcreate, H5Dopen,
H5Dclose
_ Objects structure: H5Dextend (increase
dimension sizes)

Array data transfer can be collective or
independent
_ Dataset operations: H5Dwrite, H5Dread

- 11 -
What Does PHDF5 Support ?
After a file is opened by the processes of
a communicator
_ All parts of file are accessible by all processes
_ All objects in the file are accessible by all
processes
_ Multiple processes write to the same data
array
_ Each process writes to individual data array

- 12 -
PHDF5 API Languages
C and F90 language interfaces
Platforms supported:
_ IBM SP2 and SP3
_ Intel TFLOPS
_ SGI Origin 2000
_ HP-UX 11.00 System V
_ Alpha Compaq Clusters
_ Linux clusters
_ SUN clusters
_ Cray T3E

- 13 -
Creating and Accessing a File
Programming model
HDF5 uses access template object to
control the file access mechanism
General model to access HDF5 file in
parallel:
_ Setup MPI-IO access template
_ Open File
_ Close File

- 14 -
Setup access template
Each process of the MPI communicator creates an
access template and sets it up with MPI parallel
access information
C:
herr_t H5Pset_fapl_mpio(hid_t plist_id,
MPI_Comm comm, MPI_Info info);

F90:
h5pset_fapl_mpio_f(plist_id, comm, info);
integer(hid_t) :: plist_id
integer
:: comm, info
plist_id is a file access property list identifier
- 15 -
C Example
Parallel File Create
23
24
26
27
28
29
33
34
35
36
37
38
42
49
50
51
52
54

comm = MPI_COMM_WORLD;
info = MPI_INFO_NULL;
/*
* Initialize MPI
*/
MPI_Init(&argc, &argv);
/*
* Set up file access property list for MPI-IO access
*/
plist_id = H5Pcreate(H5P_FILE_ACCESS);
H5Pset_fapl_mpio(plist_id, comm, info);
file_id = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC,
H5P_DEFAULT, plist_id);
/*
* Close the file.
*/
H5Fclose(file_id);
MPI_Finalize();
- 16 -
F90 Example
Parallel File Create
23
24
26
29
30
32
34
35
37
38
40
41
43
45
46
49
51
52
54
56

comm = MPI_COMM_WORLD
info = MPI_INFO_NULL
CALL MPI_INIT(mpierror)
!
! Initialize FORTRAN predefined datatypes
CALL h5open_f(error)
!
! Setup file access property list for MPI-IO access.
CALL h5pcreate_f(H5P_FILE_ACCESS_F, plist_id, error)
CALL h5pset_fapl_mpio_f(plist_id, comm, info, error)
!
! Create the file collectively.
CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id,
error, access_prp = plist_id)
!
! Close the file.
CALL h5fclose_f(file_id, error)
!
! Close FORTRAN interface
CALL h5close_f(error)
CALL MPI_FINALIZE(mpierror)

- 17 -
Creating and Opening Dataset
All processes of the MPI communicator
open/close a dataset by a collective call
_ C: H5Dcreate or H5Dopen; H5Dclose
_ F90: h5dcreate_f or h5dopen_f; h5dclose_f
All processes of the MPI communicator extend
dataset with unlimited dimensions before writing
to it
_ C: H5Dextend
_ F90: h5dextend_f

- 18 -
C Example
Parallel Dataset Create
56
57
58
59
60
61
62
63
64
65
66
67
68

file_id = H5Fcreate(…);
/*
* Create the dataspace for the dataset.
*/
dimsf[0] = NX;
dimsf[1] = NY;
filespace = H5Screate_simple(RANK, dimsf, NULL);

70
71
72
73
74

H5Dclose(dset_id);
/*
* Close the file.
*/
H5Fclose(file_id);

/*
* Create the dataset with default properties collective.
*/
dset_id = H5Dcreate(file_id, “dataset1”, H5T_NATIVE_INT,
filespace, H5P_DEFAULT);

- 19 -
F90 Example
Parallel Dataset Create
43 CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id,
error, access_prp = plist_id)
73 CALL h5screate_simple_f(rank, dimsf, filespace, error)
76 !
77 ! Create the dataset with default properties.
78 !
79 CALL h5dcreate_f(file_id, “dataset1”, H5T_NATIVE_INTEGER,
filespace, dset_id, error)
90
91
92
93
94
95

!
! Close the dataset.
CALL h5dclose_f(dset_id, error)
!
! Close the file.
CALL h5fclose_f(file_id, error)

- 20 -
Accessing a Dataset
All processes that have opened
dataset may do collective I/O
Each process may do independent
and arbitrary number of data I/O
access calls
_ C: H5Dwrite and H5Dread
_ F90: h5dwrite_f and h5dread_f

- 21 -
Accessing a Dataset
Programming model
Create and set dataset transfer
property
_ C: H5Pset_dxpl_mpio
_ H5FD_MPIO_COLLECTIVE
_ H5FD_MPIO_INDEPENDENT (default)

_ F90: h5pset_dxpl_mpio_f
_ H5FD_MPIO_COLLECTIVE_F
_ H5FD_MPIO_INDEPENDENT_F (default)

Access dataset with the defined
transfer property
- 22 -
C Example: Collective write
95 /*
96
* Create property list for collective dataset write.
97
*/
98 plist_id = H5Pcreate(H5P_DATASET_XFER);
99 H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);
100
101 status = H5Dwrite(dset_id, H5T_NATIVE_INT,
102
memspace, filespace, plist_id, data);

- 23 -
F90 Example: Collective write

88
89
90
91
92
93
94
95
96

! Create property list for collective dataset write
!
CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error)
CALL h5pset_dxpl_mpio_f(plist_id, &
H5FD_MPIO_COLLECTIVE_F, error)
!
! Write the dataset collectively.
!
CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, &
error, &
file_space_id = filespace, &
mem_space_id = memspace, &
xfer_prp = plist_id)
- 24 -
Writing and Reading Hyperslabs
Programming model
Distributed memory model: data is split
among processes
PHDF5 uses hyperslab model
Each process defines memory and file
hyperslabs
Each process executes partial write/read
call
_ Collective calls
_ Independent calls
- 25 -
Hyperslab Example 1
Writing dataset by rows
P0
P1

File

P2
P3

- 26 -
Writing by rows
Output of h5dump utility
HDF5 "SDS_row.h5" {
GROUP "/" {
DATASET "IntArray" {
DATATYPE H5T_STD_I32BE
DATASPACE SIMPLE { ( 8, 5 ) / ( 8, 5 ) }
DATA {
10, 10, 10, 10, 10,
10, 10, 10, 10, 10,
11, 11, 11, 11, 11,
11, 11, 11, 11, 11,
12, 12, 12, 12, 12,
12, 12, 12, 12, 12,
13, 13, 13, 13, 13,
13, 13, 13, 13, 13
}
}
}
}
- 27 -
Example 1
Writing dataset by rows
File

P1 (memory space)

offset[1]

count[1]
offset[0]

count[0]

count[0] = dimsf[0]/mpi_size
count[1] = dimsf[1];
offset[0] = mpi_rank * count[0];
offset[1] = 0;
- 28 -

/* = 2 */
C Example 1
71 /*
72
* Each process defines dataset in memory and
* writes it to the hyperslab
73
* in the file.
74
*/
75
count[0] = dimsf[0]/mpi_size;
76
count[1] = dimsf[1];
77
offset[0] = mpi_rank * count[0];
78
offset[1] = 0;
79
memspace = H5Screate_simple(RANK,count,NULL);
80
81 /*
82
* Select hyperslab in the file.
83
*/
84
filespace = H5Dget_space(dset_id);
85
H5Sselect_hyperslab(filespace,
H5S_SELECT_SET,offset,NULL,count,NULL);
- 29 -
Hyperslab Example 2
Writing dataset by columns

P0
File
P1

- 30 -
Writing by columns
Output of h5dump utility
HDF5 "SDS_col.h5" {
GROUP "/" {
DATASET "IntArray" {
DATATYPE H5T_STD_I32BE
DATASPACE SIMPLE { ( 8, 6 ) / ( 8, 6 ) }
DATA {
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200,
1, 2, 10, 20, 100, 200
}
}
}
}
- 31 -
Example 2
Writing Dataset by Column
Memory

P0 offset[1]

block[0]

P0
dimsm[0]
dimsm[1]

File

P1 offset[1]

block[1]
stride[1]

P1
- 32 -
C Example 2
85
86
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

/*
* Each process defines hyperslab in
* the file
*/
count[0] = 1;
count[1] = dimsm[1];
offset[0] = 0;
offset[1] = mpi_rank;
stride[0] = 1;
stride[1] = 2;
block[0] = dimsf[0];
block[1] = 1;
/*
* Each process selects hyperslab.
*/
filespace = H5Dget_space(dset_id);
H5Sselect_hyperslab(filespace,
H5S_SELECT_SET, offset, stride,
count, block);
- 33 -
Hyperslab Example 3
Writing dataset by pattern

P0

File

P1
P2
P3
- 34 -
Writing by Pattern
Output of h5dump utility
HDF5 "SDS_pat.h5" {
GROUP "/" {
DATASET "IntArray" {
DATATYPE H5T_STD_I32BE
DATASPACE SIMPLE { ( 8, 4 ) / ( 8, 4 ) }
DATA {
1, 3, 1, 3,
2, 4, 2, 4,
1, 3, 1, 3,
2, 4, 2, 4,
1, 3, 1, 3,
2, 4, 2, 4,
1, 3, 1, 3,
2, 4, 2, 4
}
}
}
}
- 35 -
Example 3
Writing dataset by pattern
Memory

File
stride[1]

P2
stride[0]
count[1]
offset[0] = 0;
offset[1] = 1;
count[0] = 4;
count[1] = 2;
stride[0] = 2;
stride[1] = 2;

offset[1]
- 36 -
C Example 3: Writing by pattern
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

/* Each process defines dataset in memory and
* writes it to the hyperslab
* in the file.
*/
count[0] = 4;
count[1] = 2;
stride[0] = 2;
stride[1] = 2;
if(mpi_rank == 0) {
offset[0] = 0;
offset[1] = 0;
}
if(mpi_rank == 1) {
offset[0] = 1;
offset[1] = 0;
}
if(mpi_rank == 2) {
offset[0] = 0;
offset[1] = 1;
}
if(mpi_rank == 3) {
offset[0] = 1;
offset[1] = 1;
}
- 37 -
Hyperslab Example 4
Writing dataset by chunks

P0

P1

P2

P3

- 38 -

File
Writing by Chunks
Output of h5dump utility
HDF5 "SDS_chnk.h5" {
GROUP "/" {
DATASET "IntArray" {
DATATYPE H5T_STD_I32BE
DATASPACE SIMPLE { ( 8, 4 ) / ( 8, 4 ) }
DATA {
1, 1, 2, 2,
1, 1, 2, 2,
1, 1, 2, 2,
1, 1, 2, 2,
3, 3, 4, 4,
3, 3, 4, 4,
3, 3, 4, 4,
3, 3, 4, 4
}
}
}
}
- 39 -
Example 4
Writing dataset by chunks
File

Memory
P2

offset[1]

chunk_dims[1]
offset[0]
chunk_dims[0]
block[0]
block[0] = chunk_dims[0];
block[1] = chunk_dims[1];
offset[0] = chunk_dims[0];
offset[1] = 0;

block[1]
- 40 -
C Example 4
Writing by chunks
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

count[0] = 1;
count[1] = 1 ;
stride[0] = 1;
stride[1] = 1;
block[0] = chunk_dims[0];
block[1] = chunk_dims[1];
if(mpi_rank == 0) {
offset[0] = 0;
offset[1] = 0;
}
if(mpi_rank == 1) {
offset[0] = 0;
offset[1] = chunk_dims[1];
}
if(mpi_rank == 2) {
offset[0] = chunk_dims[0];
offset[1] = 0;
}
if(mpi_rank == 3) {
offset[0] = chunk_dims[0];
offset[1] = chunk_dims[1];
}
- 41 -
Performance Tuning in HDF5

- 42 -
Two Sets of Tuning Knobs
File level knobs
_ Apply to the entire file

Data transfer level knobs
_ Apply to individual dataset read or write

- 43 -
File Level Knobs
H5Pset_meta_block_size
H5Pset_alignment
H5Pset_fapl_split
H5Pset_cache
H5Pset_fapl_mpio

- 44 -
H5Pset_meta_block_size
Sets the minimum metadata block size
allocated for metadata aggregation.
Aggregated block is usually written in a
single write action
Default is 2KB
Pro:
_ Larger block size reduces I/O requests

Con:

_ Could create
bigger

holes

- 45 -

in the file and make file
H5Pset_meta_block_size
When to use:
File is open for a long time and
_ A lot of objects created
_ A lot of operations on the objects
performed
_ As a result metadata is interleaved with
raw data
_ A lot of new metadata (attributes)
- 46 -
H5Pset_alignment
Sets two parameters
_ Threshold
Minimum size of object for alignment to take effect
Default 1 byte

_ Alignment
Allocate object at the next multiple of alignment
Default 1 byte

Example: (threshold, alignment) = (1024,
4K)
_ All objects of 1024 or more bytes starts at
the boundary of 4KB
- 47 -
H5Pset_alignment
Benefits
In general, the default (no alignment)
is good for single process serial
access since the OS already manages
buffering.
For some parallel file systems such
as GPFS, an alignment of the disk
block size improves I/O speeds.
Con: File may be bigger
- 48 -
H5Pset_fapl_split
HDF5 splits to two files

_ Metadata file for metadata
_ Rawdata file for raw data (array data)
_ Two files represent one logical HDF5 file

Pro: Significant I/O improvement if
_ metadata file is stored in Unix file
systems (good for many small I/O)
_ raw data file is stored in Parallel file
systems (good for large I/O).
- 49 -
H5Pset_fapl_split
Con:
_ Both files should be kept together
for integrity of the HDF5 file
_ Can be a potential problem when files
are moved to another platform or file
system

- 50 -
Write speeds of
Standard vs. Split-file HDF5 vs. MPI-IO
Results for ASCI Red machine at Sandia National Laboratory
•Each process writes 10MB of array data

MB/sec

20
16

Standard HDF5 write (one file)

12

Split-file HDF5 write

8

MPI I/O write (one file)

4
2

4

8

16

Number of processes

- 51 -
H5Pset_cache
Sets:
_ The number of elements (objects) in
the meta data cache
_ The number of elements, the total
number of bytes, and the preemption
policy value (default is 0.75) in the raw
data chunk cache

- 52 -
H5Pset_cache
(cont.)
Preemption policy:
_ Chunks are stored in the list with the most
recently accessed chunk at the end
_ Least recently accessed chunks are at the
beginning of the list
_ X*100% of the list is searched for the fully
read/written chunk; X is called preemption
value, where X is between 0 and 1
_ If chunk is found then it is deleted from cache,
if not then first chunk in the list is deleted

- 53 -
H5Pset_cache
(cont.)
The right values of N
_ May improve I/O performance by
controlling preemption policy
_ 0 value forces to delete the oldest
chunk from cache
_ 1 value forces to search all list for the
chunk that will be unlikely accessed
_ Depends on application access pattern

- 54 -
Chunk Cache Effect
by H5Pset_cache
Write one integer dataset
256x256x1024 (256MB)
Using chunks of 256x16x1024
(16MB)
Two tests of
_ Default chunk cache size (1MB)
_ Set chunk cache size 16MB
- 55 -
Chunk Cache
Time Definitions
Total
_ Time to open file, write dataset, close dataset
and close file

Dataset write
_ Time to write the whole dataset

Chunk write
_ Time to write a chunk

User time/System time
_ Total Unix user/system time of test
- 56 -
Chunk Cache Size Results
Cache
buffer
size
(MB)

Chunk
write
time
(sec)

Dataset
write
time
(sec)

Total
time
(sec)

User
time
(sec)

System
time
(sec)

1

132.5
8

2450.
25

2453.
09

14.00

2200.
10

16

0.376

7.83

8.27

6.21

3.45

- 57 -
Chunk Cache Size
Summary
Big chunk cache size improves
performance
Poor performance mostly due to
increased system time
_ Many more I/O requests
_ Smaller I/O requests

- 58 -
I/O Hints via
H5Pset_fapl_mpio
MPI-IO hints can be passed to the
MPI-IO layer via the Info parameter of
H5Pset_fapl_mpio
Examples
_ Telling Romio to use 2-phases I/O
speeds up collective I/O in the ASCI Red
machine
_ Setting IBM_largeblock_io=true speeds
up GPFS write speeds
- 59 -
Effects of I/O Hints
IBM_largeblock_io
GPFS at Livermore National Laboratory
ASCI Blue machine
_ 4 nodes, 16 tasks
_ Total data size 1024MB
_ I/O buffer size 1MB
400
350
300
250
200
150

16 write
16 read

100
50
0
MPI-IO

PHDF5

MPI-IO

PHDF5

IBM_largeblock_io=false IBM_largeblock_io=true
- 60 -
Effects of I/O Hints
IBM_largeblock_io
GPFS at LLNL Blue
_ 4 nodes, 16 tasks
_ Total data size 1024MB
_ I/O buffer size 1MB

Tasks
16
16

write
read

IBM_largeblock_io=false IBM_largeblock_io=true
MPI-IO
PHDF5
MPI-IO
PHDF5
60
48
354
294
44
39
256
248

- 61 -
Data Transfer Level Knobs
H5Pset_buffer
H5Pset_sieve_buf_size

- 62 -
H5Pset_buffer
Sets size of the internal buffers used
during data transfer
Default is 1 MB
Pro:
_ Bigger size improves performance

Con:
_ Library uses more memory

- 63 -
H5Pset_buffer
When should be used:
_ Datatype conversion
_ Data gathering-scattering (e.g. checker
board dataspace selection)

- 64 -
H5Pset_sieve_buf_size
Sets the size of the data sieve buffer
Default is 64KB
Sieve buffer is a buffer in memory
that holds part of the dataset raw
data
During I/0 operations data is
replaced in the buffer first, then one
big I/0 request occurs
- 65 -
H5Pset_sieve_buf_size
Pro:

_ Bigger size reduces I/O requests issued
for raw data access

Con:

_ Library uses more memory

When to use:

_ Data scattering-gathering (e.g. checker
board)
_ Interleaved hyperslabs
- 66 -
Parallel I/O
Benchmark Tool
h5perf
_ Benchmark test I/O performance

Four kinds of API
_ Parallel HDF5
_ MPI-IO
_ Native parallel (e.g., gpfs, pvfs)
_ POSIX (open, close, lseek, read, write)

- 67 -
Useful Parallel HDF Links
Parallel HDF information site
_ http://hdf.ncsa.uiuc.edu/Parallel_HDF/

Parallel HDF mailing list
_ hdfparallel@ncsa.uiuc.edu

Parallel HDF5 tutorial available at
_ http://hdf.ncsa.uiuc.edu/HDF5/doc/Tu
tor

- 68 -

More Related Content

What's hot

eBPF Debugging Infrastructure - Current Techniques
eBPF Debugging Infrastructure - Current TechniqueseBPF Debugging Infrastructure - Current Techniques
eBPF Debugging Infrastructure - Current TechniquesNetronome
 
introduction of c langauge(I unit)
introduction of c langauge(I unit)introduction of c langauge(I unit)
introduction of c langauge(I unit)Prashant Sharma
 
GNU GCC - what just a compiler...?
GNU GCC - what just a compiler...?GNU GCC - what just a compiler...?
GNU GCC - what just a compiler...?Saket Pathak
 
4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...PROIDEA
 
Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer George Markomanolis
 
C Under Linux
C Under LinuxC Under Linux
C Under Linuxmohan43u
 
Advanced Scalable Decomposition Method with MPICH Environment for HPC
Advanced Scalable Decomposition Method with MPICH Environment for HPCAdvanced Scalable Decomposition Method with MPICH Environment for HPC
Advanced Scalable Decomposition Method with MPICH Environment for HPCIJSRD
 

What's hot (12)

Programming in c
Programming in cProgramming in c
Programming in c
 
Usp
UspUsp
Usp
 
Getting started with AMD GPUs
Getting started with AMD GPUsGetting started with AMD GPUs
Getting started with AMD GPUs
 
eBPF Debugging Infrastructure - Current Techniques
eBPF Debugging Infrastructure - Current TechniqueseBPF Debugging Infrastructure - Current Techniques
eBPF Debugging Infrastructure - Current Techniques
 
introduction of c langauge(I unit)
introduction of c langauge(I unit)introduction of c langauge(I unit)
introduction of c langauge(I unit)
 
G++ & GCC
G++ & GCCG++ & GCC
G++ & GCC
 
GNU GCC - what just a compiler...?
GNU GCC - what just a compiler...?GNU GCC - what just a compiler...?
GNU GCC - what just a compiler...?
 
4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...4Developers 2018: The turbulent road to byte-addressable storage support at t...
4Developers 2018: The turbulent road to byte-addressable storage support at t...
 
eBPF maps 101
eBPF maps 101eBPF maps 101
eBPF maps 101
 
Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer Exploring the Programming Models for the LUMI Supercomputer
Exploring the Programming Models for the LUMI Supercomputer
 
C Under Linux
C Under LinuxC Under Linux
C Under Linux
 
Advanced Scalable Decomposition Method with MPICH Environment for HPC
Advanced Scalable Decomposition Method with MPICH Environment for HPCAdvanced Scalable Decomposition Method with MPICH Environment for HPC
Advanced Scalable Decomposition Method with MPICH Environment for HPC
 

Viewers also liked

Ахмад дипломатчын дурсамж: Монголын статус кво
Ахмад дипломатчын дурсамж: Монголын статус квоАхмад дипломатчын дурсамж: Монголын статус кво
Ахмад дипломатчын дурсамж: Монголын статус квоZorigoo Gantumur
 
27th Sunday A
27th  Sunday  A27th  Sunday  A
27th Sunday AchitoA
 
SPED no Sistema Bluesoft
SPED no Sistema BluesoftSPED no Sistema Bluesoft
SPED no Sistema BluesoftIsmael
 
Forbidden Business Transactions In Islaam
Forbidden Business Transactions In IslaamForbidden Business Transactions In Islaam
Forbidden Business Transactions In Islaamzakir2012
 
B Chapman - Codefest BOSC2012
B Chapman - Codefest BOSC2012B Chapman - Codefest BOSC2012
B Chapman - Codefest BOSC2012Jan Aerts
 
Dclt Family Feud
Dclt Family FeudDclt Family Feud
Dclt Family FeudRobinHarvey
 

Viewers also liked (8)

Ахмад дипломатчын дурсамж: Монголын статус кво
Ахмад дипломатчын дурсамж: Монголын статус квоАхмад дипломатчын дурсамж: Монголын статус кво
Ахмад дипломатчын дурсамж: Монголын статус кво
 
27th Sunday A
27th  Sunday  A27th  Sunday  A
27th Sunday A
 
SPED no Sistema Bluesoft
SPED no Sistema BluesoftSPED no Sistema Bluesoft
SPED no Sistema Bluesoft
 
Forbidden Business Transactions In Islaam
Forbidden Business Transactions In IslaamForbidden Business Transactions In Islaam
Forbidden Business Transactions In Islaam
 
Cases and places 2
Cases and places 2Cases and places 2
Cases and places 2
 
B Chapman - Codefest BOSC2012
B Chapman - Codefest BOSC2012B Chapman - Codefest BOSC2012
B Chapman - Codefest BOSC2012
 
008 chap06
008 chap06008 chap06
008 chap06
 
Dclt Family Feud
Dclt Family FeudDclt Family Feud
Dclt Family Feud
 

Similar to Overview of Parallel HDF5 and Performance Tuning in HDF5 Library

Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...EUDAT
 
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, DatatypesHDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, DatatypesThe HDF-EOS Tools and Information Center
 
How To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iHow To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iSam Pinkhasov
 
How To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IHow To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IAlex Frenkel
 
Introduction to Hadoop part1
Introduction to Hadoop part1Introduction to Hadoop part1
Introduction to Hadoop part1Giovanna Roda
 
Supercharging your PHP pages with mod_lsapi in CloudLinux OS
Supercharging your PHP pages with mod_lsapi in CloudLinux OSSupercharging your PHP pages with mod_lsapi in CloudLinux OS
Supercharging your PHP pages with mod_lsapi in CloudLinux OSCloudLinux
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshopjulien pauli
 

Similar to Overview of Parallel HDF5 and Performance Tuning in HDF5 Library (20)

Parallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory TutorialParallel HDF5 Introductory Tutorial
Parallel HDF5 Introductory Tutorial
 
Using HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py moduleUsing HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py module
 
The MATLAB Low-Level HDF5 Interface
The MATLAB Low-Level HDF5 InterfaceThe MATLAB Low-Level HDF5 Interface
The MATLAB Low-Level HDF5 Interface
 
HDF5 Advanced Topics - Datatypes and Partial I/O
HDF5 Advanced Topics - Datatypes and Partial I/OHDF5 Advanced Topics - Datatypes and Partial I/O
HDF5 Advanced Topics - Datatypes and Partial I/O
 
Substituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scriptsSubstituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scripts
 
Introduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIsIntroduction to HDF5 Data Model, Programming Model and Library APIs
Introduction to HDF5 Data Model, Programming Model and Library APIs
 
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
Introduction to HPC Programming Models - EUDAT Summer School (Stefano Markidi...
 
Module net cdf4
Module net cdf4 Module net cdf4
Module net cdf4
 
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, DatatypesHDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
HDF5 Advanced Topics - Object's Properties, Storage Methods, Filters, Datatypes
 
How To Start Up With PHP In IBM i
How To Start Up With PHP In IBM iHow To Start Up With PHP In IBM i
How To Start Up With PHP In IBM i
 
How To Start Up With Php In Ibm I
How To Start Up With Php In Ibm IHow To Start Up With Php In Ibm I
How To Start Up With Php In Ibm I
 
NetCDF and HDF5
NetCDF and HDF5NetCDF and HDF5
NetCDF and HDF5
 
Introduction to Hadoop part1
Introduction to Hadoop part1Introduction to Hadoop part1
Introduction to Hadoop part1
 
HDF Update for DAAC Managers (2017-02-27)
HDF Update for DAAC Managers (2017-02-27)HDF Update for DAAC Managers (2017-02-27)
HDF Update for DAAC Managers (2017-02-27)
 
HDF5 Advanced Topics
HDF5 Advanced TopicsHDF5 Advanced Topics
HDF5 Advanced Topics
 
Advanced HDF5 Features
Advanced HDF5 FeaturesAdvanced HDF5 Features
Advanced HDF5 Features
 
Adding CF Attributes to an HDF5 File
Adding CF Attributes to an HDF5 FileAdding CF Attributes to an HDF5 File
Adding CF Attributes to an HDF5 File
 
Supercharging your PHP pages with mod_lsapi in CloudLinux OS
Supercharging your PHP pages with mod_lsapi in CloudLinux OSSupercharging your PHP pages with mod_lsapi in CloudLinux OS
Supercharging your PHP pages with mod_lsapi in CloudLinux OS
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshop
 
Xdebug from a to x
Xdebug from a to xXdebug from a to x
Xdebug from a to x
 

More from The HDF-EOS Tools and Information Center

STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...The HDF-EOS Tools and Information Center
 

More from The HDF-EOS Tools and Information Center (20)

Cloud-Optimized HDF5 Files
Cloud-Optimized HDF5 FilesCloud-Optimized HDF5 Files
Cloud-Optimized HDF5 Files
 
Accessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDSAccessing HDF5 data in the cloud with HSDS
Accessing HDF5 data in the cloud with HSDS
 
The State of HDF
The State of HDFThe State of HDF
The State of HDF
 
Highly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance FeaturesHighly Scalable Data Service (HSDS) Performance Features
Highly Scalable Data Service (HSDS) Performance Features
 
Creating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 FilesCreating Cloud-Optimized HDF5 Files
Creating Cloud-Optimized HDF5 Files
 
HDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance DiscussionHDF5 OPeNDAP Handler Updates, and Performance Discussion
HDF5 OPeNDAP Handler Updates, and Performance Discussion
 
Hyrax: Serving Data from S3
Hyrax: Serving Data from S3Hyrax: Serving Data from S3
Hyrax: Serving Data from S3
 
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLABAccessing Cloud Data and Services Using EDL, Pydap, MATLAB
Accessing Cloud Data and Services Using EDL, Pydap, MATLAB
 
HDF - Current status and Future Directions
HDF - Current status and Future DirectionsHDF - Current status and Future Directions
HDF - Current status and Future Directions
 
HDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and FutureHDFEOS.org User Analsys, Updates, and Future
HDFEOS.org User Analsys, Updates, and Future
 
HDF - Current status and Future Directions
HDF - Current status and Future Directions HDF - Current status and Future Directions
HDF - Current status and Future Directions
 
H5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only LibraryH5Coro: The Cloud-Optimized Read-Only Library
H5Coro: The Cloud-Optimized Read-Only Library
 
MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10MATLAB Modernization on HDF5 1.10
MATLAB Modernization on HDF5 1.10
 
HDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDFHDF for the Cloud - Serverless HDF
HDF for the Cloud - Serverless HDF
 
HDF5 <-> Zarr
HDF5 <-> ZarrHDF5 <-> Zarr
HDF5 <-> Zarr
 
HDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server FeaturesHDF for the Cloud - New HDF Server Features
HDF for the Cloud - New HDF Server Features
 
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
Apache Drill and Unidata THREDDS Data Server for NASA HDF-EOS on S3
 
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
STARE-PODS: A Versatile Data Store Leveraging the HDF Virtual Object Layer fo...
 
HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?HDF5 and Ecosystem: What Is New?
HDF5 and Ecosystem: What Is New?
 
HDF5 Roadmap 2019-2020
HDF5 Roadmap 2019-2020HDF5 Roadmap 2019-2020
HDF5 Roadmap 2019-2020
 

Recently uploaded

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 

Overview of Parallel HDF5 and Performance Tuning in HDF5 Library

  • 1. Overview of Parallel HDF5 and Performance Tuning in HDF5 Library HDF and HDF-EOS Workshop VI Elena Pourmal, Albert Cheng -1-
  • 2. Outline Overview of Parallel HDF5 design Setting up parallel environment Programming model for _ Creating and accessing a File _ Creating and accessing a Dataset _ Writing and reading Hyperslabs Performance tuning in HDF5 Parallel tutorial available at _ http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor -2-
  • 3. PHDF5 Initial Target Support for MPI programming Not for shared memory programming _ Threads _ OpenMP Has some experiments with _ Thread-safe support for Pthreads _ OpenMP if called correctly -3-
  • 4. PHDF5 Requirements PHDF5 files compatible with serial HDF5 files _ Shareable between different serial or parallel platforms Single file image to all processes _ One file per process design is undesirable Expensive post processing Not useable by different number of processes Standard parallel I/O interface _ Must be portable to different platforms -4-
  • 5. Implementation Requirements No use of Threads _ Not commonly supported (1998) No reserved process _ May interfere with parallel algorithms No spawn process _ Not commonly supported even now -5-
  • 6. PHDF5 Implementation Layers Parallel Application Parallel Application Parallel Application Parallel Application HDF library Parallel HDF5 + MPI MPI-IO O2K Unix I/O SP GPFS User Applications Parallel I/O layer TFLOPS PFS -6- Parallel File systems
  • 7. Parallel Environment Requirements MPI with MPI-IO _ Argonne ROMIO _ Vendor s MPI-IO Parallel file system _ IBM GPFS _ PVFS -7-
  • 8. How to Compile PHDF5 h5cc _ HDF5 compiler command _ Similar to mpicc To compile: % h5cc h5prog.c Show the compiler commands without executing them (i.e., dryrun): % h5cc _show h5prog.c -8-
  • 9. Collective vs. Independent Calls MPI definition of collective call _ All processes of the communicator must participate in the right order Independent means not collective Collective is not necessarily synchronous -9-
  • 10. Programming Restrictions Most PHDF5 APIs are collective PHDF5 opens a parallel file with a communicator _ Returns a file-handle _ Future access to the file via the filehandle _ All processes must participate in collective PHDF5 APIs _ Different files can be opened via different communicators - 10 -
  • 11. Examples of PHDF5 API Examples of PHDF5 collective API _ File operations: H5Fcreate, H5Fopen, H5Fclose _ Objects creation: H5Dcreate, H5Dopen, H5Dclose _ Objects structure: H5Dextend (increase dimension sizes) Array data transfer can be collective or independent _ Dataset operations: H5Dwrite, H5Dread - 11 -
  • 12. What Does PHDF5 Support ? After a file is opened by the processes of a communicator _ All parts of file are accessible by all processes _ All objects in the file are accessible by all processes _ Multiple processes write to the same data array _ Each process writes to individual data array - 12 -
  • 13. PHDF5 API Languages C and F90 language interfaces Platforms supported: _ IBM SP2 and SP3 _ Intel TFLOPS _ SGI Origin 2000 _ HP-UX 11.00 System V _ Alpha Compaq Clusters _ Linux clusters _ SUN clusters _ Cray T3E - 13 -
  • 14. Creating and Accessing a File Programming model HDF5 uses access template object to control the file access mechanism General model to access HDF5 file in parallel: _ Setup MPI-IO access template _ Open File _ Close File - 14 -
  • 15. Setup access template Each process of the MPI communicator creates an access template and sets it up with MPI parallel access information C: herr_t H5Pset_fapl_mpio(hid_t plist_id, MPI_Comm comm, MPI_Info info); F90: h5pset_fapl_mpio_f(plist_id, comm, info); integer(hid_t) :: plist_id integer :: comm, info plist_id is a file access property list identifier - 15 -
  • 16. C Example Parallel File Create 23 24 26 27 28 29 33 34 35 36 37 38 42 49 50 51 52 54 comm = MPI_COMM_WORLD; info = MPI_INFO_NULL; /* * Initialize MPI */ MPI_Init(&argc, &argv); /* * Set up file access property list for MPI-IO access */ plist_id = H5Pcreate(H5P_FILE_ACCESS); H5Pset_fapl_mpio(plist_id, comm, info); file_id = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, plist_id); /* * Close the file. */ H5Fclose(file_id); MPI_Finalize(); - 16 -
  • 17. F90 Example Parallel File Create 23 24 26 29 30 32 34 35 37 38 40 41 43 45 46 49 51 52 54 56 comm = MPI_COMM_WORLD info = MPI_INFO_NULL CALL MPI_INIT(mpierror) ! ! Initialize FORTRAN predefined datatypes CALL h5open_f(error) ! ! Setup file access property list for MPI-IO access. CALL h5pcreate_f(H5P_FILE_ACCESS_F, plist_id, error) CALL h5pset_fapl_mpio_f(plist_id, comm, info, error) ! ! Create the file collectively. CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error, access_prp = plist_id) ! ! Close the file. CALL h5fclose_f(file_id, error) ! ! Close FORTRAN interface CALL h5close_f(error) CALL MPI_FINALIZE(mpierror) - 17 -
  • 18. Creating and Opening Dataset All processes of the MPI communicator open/close a dataset by a collective call _ C: H5Dcreate or H5Dopen; H5Dclose _ F90: h5dcreate_f or h5dopen_f; h5dclose_f All processes of the MPI communicator extend dataset with unlimited dimensions before writing to it _ C: H5Dextend _ F90: h5dextend_f - 18 -
  • 19. C Example Parallel Dataset Create 56 57 58 59 60 61 62 63 64 65 66 67 68 file_id = H5Fcreate(…); /* * Create the dataspace for the dataset. */ dimsf[0] = NX; dimsf[1] = NY; filespace = H5Screate_simple(RANK, dimsf, NULL); 70 71 72 73 74 H5Dclose(dset_id); /* * Close the file. */ H5Fclose(file_id); /* * Create the dataset with default properties collective. */ dset_id = H5Dcreate(file_id, “dataset1”, H5T_NATIVE_INT, filespace, H5P_DEFAULT); - 19 -
  • 20. F90 Example Parallel Dataset Create 43 CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error, access_prp = plist_id) 73 CALL h5screate_simple_f(rank, dimsf, filespace, error) 76 ! 77 ! Create the dataset with default properties. 78 ! 79 CALL h5dcreate_f(file_id, “dataset1”, H5T_NATIVE_INTEGER, filespace, dset_id, error) 90 91 92 93 94 95 ! ! Close the dataset. CALL h5dclose_f(dset_id, error) ! ! Close the file. CALL h5fclose_f(file_id, error) - 20 -
  • 21. Accessing a Dataset All processes that have opened dataset may do collective I/O Each process may do independent and arbitrary number of data I/O access calls _ C: H5Dwrite and H5Dread _ F90: h5dwrite_f and h5dread_f - 21 -
  • 22. Accessing a Dataset Programming model Create and set dataset transfer property _ C: H5Pset_dxpl_mpio _ H5FD_MPIO_COLLECTIVE _ H5FD_MPIO_INDEPENDENT (default) _ F90: h5pset_dxpl_mpio_f _ H5FD_MPIO_COLLECTIVE_F _ H5FD_MPIO_INDEPENDENT_F (default) Access dataset with the defined transfer property - 22 -
  • 23. C Example: Collective write 95 /* 96 * Create property list for collective dataset write. 97 */ 98 plist_id = H5Pcreate(H5P_DATASET_XFER); 99 H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE); 100 101 status = H5Dwrite(dset_id, H5T_NATIVE_INT, 102 memspace, filespace, plist_id, data); - 23 -
  • 24. F90 Example: Collective write 88 89 90 91 92 93 94 95 96 ! Create property list for collective dataset write ! CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error) CALL h5pset_dxpl_mpio_f(plist_id, & H5FD_MPIO_COLLECTIVE_F, error) ! ! Write the dataset collectively. ! CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, & error, & file_space_id = filespace, & mem_space_id = memspace, & xfer_prp = plist_id) - 24 -
  • 25. Writing and Reading Hyperslabs Programming model Distributed memory model: data is split among processes PHDF5 uses hyperslab model Each process defines memory and file hyperslabs Each process executes partial write/read call _ Collective calls _ Independent calls - 25 -
  • 26. Hyperslab Example 1 Writing dataset by rows P0 P1 File P2 P3 - 26 -
  • 27. Writing by rows Output of h5dump utility HDF5 "SDS_row.h5" { GROUP "/" { DATASET "IntArray" { DATATYPE H5T_STD_I32BE DATASPACE SIMPLE { ( 8, 5 ) / ( 8, 5 ) } DATA { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 } } } } - 27 -
  • 28. Example 1 Writing dataset by rows File P1 (memory space) offset[1] count[1] offset[0] count[0] count[0] = dimsf[0]/mpi_size count[1] = dimsf[1]; offset[0] = mpi_rank * count[0]; offset[1] = 0; - 28 - /* = 2 */
  • 29. C Example 1 71 /* 72 * Each process defines dataset in memory and * writes it to the hyperslab 73 * in the file. 74 */ 75 count[0] = dimsf[0]/mpi_size; 76 count[1] = dimsf[1]; 77 offset[0] = mpi_rank * count[0]; 78 offset[1] = 0; 79 memspace = H5Screate_simple(RANK,count,NULL); 80 81 /* 82 * Select hyperslab in the file. 83 */ 84 filespace = H5Dget_space(dset_id); 85 H5Sselect_hyperslab(filespace, H5S_SELECT_SET,offset,NULL,count,NULL); - 29 -
  • 30. Hyperslab Example 2 Writing dataset by columns P0 File P1 - 30 -
  • 31. Writing by columns Output of h5dump utility HDF5 "SDS_col.h5" { GROUP "/" { DATASET "IntArray" { DATATYPE H5T_STD_I32BE DATASPACE SIMPLE { ( 8, 6 ) / ( 8, 6 ) } DATA { 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200, 1, 2, 10, 20, 100, 200 } } } } - 31 -
  • 32. Example 2 Writing Dataset by Column Memory P0 offset[1] block[0] P0 dimsm[0] dimsm[1] File P1 offset[1] block[1] stride[1] P1 - 32 -
  • 33. C Example 2 85 86 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 /* * Each process defines hyperslab in * the file */ count[0] = 1; count[1] = dimsm[1]; offset[0] = 0; offset[1] = mpi_rank; stride[0] = 1; stride[1] = 2; block[0] = dimsf[0]; block[1] = 1; /* * Each process selects hyperslab. */ filespace = H5Dget_space(dset_id); H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, stride, count, block); - 33 -
  • 34. Hyperslab Example 3 Writing dataset by pattern P0 File P1 P2 P3 - 34 -
  • 35. Writing by Pattern Output of h5dump utility HDF5 "SDS_pat.h5" { GROUP "/" { DATASET "IntArray" { DATATYPE H5T_STD_I32BE DATASPACE SIMPLE { ( 8, 4 ) / ( 8, 4 ) } DATA { 1, 3, 1, 3, 2, 4, 2, 4, 1, 3, 1, 3, 2, 4, 2, 4, 1, 3, 1, 3, 2, 4, 2, 4, 1, 3, 1, 3, 2, 4, 2, 4 } } } } - 35 -
  • 36. Example 3 Writing dataset by pattern Memory File stride[1] P2 stride[0] count[1] offset[0] = 0; offset[1] = 1; count[0] = 4; count[1] = 2; stride[0] = 2; stride[1] = 2; offset[1] - 36 -
  • 37. C Example 3: Writing by pattern 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 /* Each process defines dataset in memory and * writes it to the hyperslab * in the file. */ count[0] = 4; count[1] = 2; stride[0] = 2; stride[1] = 2; if(mpi_rank == 0) { offset[0] = 0; offset[1] = 0; } if(mpi_rank == 1) { offset[0] = 1; offset[1] = 0; } if(mpi_rank == 2) { offset[0] = 0; offset[1] = 1; } if(mpi_rank == 3) { offset[0] = 1; offset[1] = 1; } - 37 -
  • 38. Hyperslab Example 4 Writing dataset by chunks P0 P1 P2 P3 - 38 - File
  • 39. Writing by Chunks Output of h5dump utility HDF5 "SDS_chnk.h5" { GROUP "/" { DATASET "IntArray" { DATATYPE H5T_STD_I32BE DATASPACE SIMPLE { ( 8, 4 ) / ( 8, 4 ) } DATA { 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 4, 4, 3, 3, 4, 4, 3, 3, 4, 4 } } } } - 39 -
  • 40. Example 4 Writing dataset by chunks File Memory P2 offset[1] chunk_dims[1] offset[0] chunk_dims[0] block[0] block[0] = chunk_dims[0]; block[1] = chunk_dims[1]; offset[0] = chunk_dims[0]; offset[1] = 0; block[1] - 40 -
  • 41. C Example 4 Writing by chunks 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 count[0] = 1; count[1] = 1 ; stride[0] = 1; stride[1] = 1; block[0] = chunk_dims[0]; block[1] = chunk_dims[1]; if(mpi_rank == 0) { offset[0] = 0; offset[1] = 0; } if(mpi_rank == 1) { offset[0] = 0; offset[1] = chunk_dims[1]; } if(mpi_rank == 2) { offset[0] = chunk_dims[0]; offset[1] = 0; } if(mpi_rank == 3) { offset[0] = chunk_dims[0]; offset[1] = chunk_dims[1]; } - 41 -
  • 42. Performance Tuning in HDF5 - 42 -
  • 43. Two Sets of Tuning Knobs File level knobs _ Apply to the entire file Data transfer level knobs _ Apply to individual dataset read or write - 43 -
  • 45. H5Pset_meta_block_size Sets the minimum metadata block size allocated for metadata aggregation. Aggregated block is usually written in a single write action Default is 2KB Pro: _ Larger block size reduces I/O requests Con: _ Could create bigger holes - 45 - in the file and make file
  • 46. H5Pset_meta_block_size When to use: File is open for a long time and _ A lot of objects created _ A lot of operations on the objects performed _ As a result metadata is interleaved with raw data _ A lot of new metadata (attributes) - 46 -
  • 47. H5Pset_alignment Sets two parameters _ Threshold Minimum size of object for alignment to take effect Default 1 byte _ Alignment Allocate object at the next multiple of alignment Default 1 byte Example: (threshold, alignment) = (1024, 4K) _ All objects of 1024 or more bytes starts at the boundary of 4KB - 47 -
  • 48. H5Pset_alignment Benefits In general, the default (no alignment) is good for single process serial access since the OS already manages buffering. For some parallel file systems such as GPFS, an alignment of the disk block size improves I/O speeds. Con: File may be bigger - 48 -
  • 49. H5Pset_fapl_split HDF5 splits to two files _ Metadata file for metadata _ Rawdata file for raw data (array data) _ Two files represent one logical HDF5 file Pro: Significant I/O improvement if _ metadata file is stored in Unix file systems (good for many small I/O) _ raw data file is stored in Parallel file systems (good for large I/O). - 49 -
  • 50. H5Pset_fapl_split Con: _ Both files should be kept together for integrity of the HDF5 file _ Can be a potential problem when files are moved to another platform or file system - 50 -
  • 51. Write speeds of Standard vs. Split-file HDF5 vs. MPI-IO Results for ASCI Red machine at Sandia National Laboratory •Each process writes 10MB of array data MB/sec 20 16 Standard HDF5 write (one file) 12 Split-file HDF5 write 8 MPI I/O write (one file) 4 2 4 8 16 Number of processes - 51 -
  • 52. H5Pset_cache Sets: _ The number of elements (objects) in the meta data cache _ The number of elements, the total number of bytes, and the preemption policy value (default is 0.75) in the raw data chunk cache - 52 -
  • 53. H5Pset_cache (cont.) Preemption policy: _ Chunks are stored in the list with the most recently accessed chunk at the end _ Least recently accessed chunks are at the beginning of the list _ X*100% of the list is searched for the fully read/written chunk; X is called preemption value, where X is between 0 and 1 _ If chunk is found then it is deleted from cache, if not then first chunk in the list is deleted - 53 -
  • 54. H5Pset_cache (cont.) The right values of N _ May improve I/O performance by controlling preemption policy _ 0 value forces to delete the oldest chunk from cache _ 1 value forces to search all list for the chunk that will be unlikely accessed _ Depends on application access pattern - 54 -
  • 55. Chunk Cache Effect by H5Pset_cache Write one integer dataset 256x256x1024 (256MB) Using chunks of 256x16x1024 (16MB) Two tests of _ Default chunk cache size (1MB) _ Set chunk cache size 16MB - 55 -
  • 56. Chunk Cache Time Definitions Total _ Time to open file, write dataset, close dataset and close file Dataset write _ Time to write the whole dataset Chunk write _ Time to write a chunk User time/System time _ Total Unix user/system time of test - 56 -
  • 57. Chunk Cache Size Results Cache buffer size (MB) Chunk write time (sec) Dataset write time (sec) Total time (sec) User time (sec) System time (sec) 1 132.5 8 2450. 25 2453. 09 14.00 2200. 10 16 0.376 7.83 8.27 6.21 3.45 - 57 -
  • 58. Chunk Cache Size Summary Big chunk cache size improves performance Poor performance mostly due to increased system time _ Many more I/O requests _ Smaller I/O requests - 58 -
  • 59. I/O Hints via H5Pset_fapl_mpio MPI-IO hints can be passed to the MPI-IO layer via the Info parameter of H5Pset_fapl_mpio Examples _ Telling Romio to use 2-phases I/O speeds up collective I/O in the ASCI Red machine _ Setting IBM_largeblock_io=true speeds up GPFS write speeds - 59 -
  • 60. Effects of I/O Hints IBM_largeblock_io GPFS at Livermore National Laboratory ASCI Blue machine _ 4 nodes, 16 tasks _ Total data size 1024MB _ I/O buffer size 1MB 400 350 300 250 200 150 16 write 16 read 100 50 0 MPI-IO PHDF5 MPI-IO PHDF5 IBM_largeblock_io=false IBM_largeblock_io=true - 60 -
  • 61. Effects of I/O Hints IBM_largeblock_io GPFS at LLNL Blue _ 4 nodes, 16 tasks _ Total data size 1024MB _ I/O buffer size 1MB Tasks 16 16 write read IBM_largeblock_io=false IBM_largeblock_io=true MPI-IO PHDF5 MPI-IO PHDF5 60 48 354 294 44 39 256 248 - 61 -
  • 62. Data Transfer Level Knobs H5Pset_buffer H5Pset_sieve_buf_size - 62 -
  • 63. H5Pset_buffer Sets size of the internal buffers used during data transfer Default is 1 MB Pro: _ Bigger size improves performance Con: _ Library uses more memory - 63 -
  • 64. H5Pset_buffer When should be used: _ Datatype conversion _ Data gathering-scattering (e.g. checker board dataspace selection) - 64 -
  • 65. H5Pset_sieve_buf_size Sets the size of the data sieve buffer Default is 64KB Sieve buffer is a buffer in memory that holds part of the dataset raw data During I/0 operations data is replaced in the buffer first, then one big I/0 request occurs - 65 -
  • 66. H5Pset_sieve_buf_size Pro: _ Bigger size reduces I/O requests issued for raw data access Con: _ Library uses more memory When to use: _ Data scattering-gathering (e.g. checker board) _ Interleaved hyperslabs - 66 -
  • 67. Parallel I/O Benchmark Tool h5perf _ Benchmark test I/O performance Four kinds of API _ Parallel HDF5 _ MPI-IO _ Native parallel (e.g., gpfs, pvfs) _ POSIX (open, close, lseek, read, write) - 67 -
  • 68. Useful Parallel HDF Links Parallel HDF information site _ http://hdf.ncsa.uiuc.edu/Parallel_HDF/ Parallel HDF mailing list _ hdfparallel@ncsa.uiuc.edu Parallel HDF5 tutorial available at _ http://hdf.ncsa.uiuc.edu/HDF5/doc/Tu tor - 68 -