Return to "Szip Compression in HDF5"

Example of Szip Usage in HDF5


The following sample program illustrates the use of Szip compression in HDF5. This sample program is also available in the subdirectory h5_examples/.



#include "hdf5.h"
#define NX 500
#define NY 600
#define CH_NX 100
#define CH_NY 25

int main(void)
{
   hid_t file, data_space, dataset32, properties;
   float buf[NX][NY];
   float buf_r[NX][NY];
   hsize_t dims[2], chunk_size[2];
   int i, j;
   unsigned szip_options_mask;
   unsigned szip_pixels_per_block;

   /* Initiliaze data buffer with some bogus data. */
   for (i=0; i < NX; i++) {
       for (j=0; j < NY; j++) 
           buf[i][j] = i + j;
   }

   /* Describe the size of the array. */
   dims[0] = NX;
   dims[1] = NY;
   data_space = H5Screate_simple (2, dims, NULL);

  /*
   * Create a new file using read/write access, default file 
   * creation properties, and default file access properties.
   */
   file = H5Fcreate ("test.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

  /*
   * Set the dataset creation property list to specify that
   * the raw data is to be partitioned into 100x100 element
   * chunks and that each chunk is to be compressed.
   */
   chunk_size[0] = CH_NX;
   chunk_size[1] = CH_NY;
   properties = H5Pcreate (H5P_DATASET_CREATE);
   H5Pset_chunk (properties, 2, chunk_size);

  /* 
   * Set parameters for SZIP compression; check the description of
   * the H5Pset_szip function in the HDF5 Reference Manual for more 
   * information.
   */
   szip_options_mask=H5_SZIP_NN_OPTION_MASK;
   szip_pixels_per_block=32;

   H5Pset_szip (properties, szip_options_mask, szip_pixels_per_block);

  /*
   * Create a new dataset within the file.  The datatype
   * and data space describe the data on disk, which may
   * be different from the format used in the application's
   * memory.
   */

   dataset32 = H5Dcreate (file, "datasetF32", H5T_NATIVE_FLOAT,
                       data_space, properties);


  /*
   * Write the array to the file.  The datatype and dataspace
   * describe the format of the data in the `buf' buffer.
   * The raw data is translated to the format required on disk, 
   * as defined above.  We use default raw data transfer properties.
   */

   H5Dwrite (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
            H5P_DEFAULT, buf);


  /*
   * Read the array.  This is similar to writing data,
   * except the data flows in the opposite direction.
   * Note: Decompression is automatic.
   */

   H5Dread (dataset32, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
           H5P_DEFAULT, buf_r);


   H5Dclose (dataset32);
   H5Sclose (data_space);
   H5Pclose (properties);
   H5Fclose (file);
}

Return to "Szip Compression in HDF5"