John

Thank you for your report. Could you please try with the latest 1.8.5-snap4 
ftp://ftp.hdfgroup.uiuc.edu/pub/outgoing/hdf5/snapshots/v18/ and see if the 
problem is still there? (BTW, we stopped supporting HDF5 1.6.*)

I will enter a bug report and we will investigate.

Thank you!

Elena
On Aug 2, 2010, at 7:39 AM, Berkery, John (GE Energy, Non-GE) wrote:

> We do compile the main app on Linux with such imbedded data statements
> but I don't know which compiler is used. I'm using visual fortran on
> Windows.
> 
> Yes, the memory allocation continues to grow without deflate but not as
> much. Whereas it grew from 5.7 to 12.1 Mb before, it now grows from 5.7
> to 9.9 Mb. Compression is a must in the real app though, otherwise the
> H5 file would grow to an enormous size. There is very little difference
> in memory allocation between compression level 1 and 7.
> 
> Attached are graphs of the program runs with and without. There is a
> difference in how memory is accumulating and it is inconsistent between
> iterations of the loop which is also disconcerting. One would expect a
> regular stair step pattern more similar to the run with compression.
> 
> Jack Berkery
> GE Energy Applications
> Schenectady, NY
> 
> -----Original Message-----
> From: hdf-forum-boun...@hdfgroup.org
> [mailto:hdf-forum-boun...@hdfgroup.org] On Behalf Of Elena Pourmal
> Sent: Sunday, August 01, 2010 7:14 PM
> To: HDF Users Discussion List
> Subject: Re: [Hdf-forum] HDF5 1.6.10 memory growth
> 
> John,
> 
> I couldn't compile your program on Mac or Linux due to the usage of
> (/..,.../) in the function calls.
> 
> I also don't see anything obviously wrong. Could you please comment out
> h5pset_deflate_f call, rerun the program and check if you still see
> memory growth?
> 
> Thank you!
> 
> Elena
> On Jul 29, 2010, at 4:01 PM, Berkery, John (GE Energy, Non-GE) wrote:
> 
>> I've got a problem with excessive memory leakage using HDF5 in a 
>> Fortran program. Here's a simple example of adding a large fixed size 
>> matrix to a H5 file. It Iterates through a loop where the dataspace is
> 
>> enlarged, another matrix is added to the file and the dataspace is
> closed.
>> Shouldn't it free all the memory at the end of each loop and return to
> 
>> a certain base memory footprint? Instead it continues to grow 
>> throughout the process.
>> 
>> Jack Berkery
>> GE Energy Applications
>> Schenectady, NY
>> 
>> 
>> 
>> !
>> **********************************************************************
>> **
>> ******
>> ! *
>> ! * Project: memtest.f90
>> ! * Subject: Test appending a matrix to H5 file.
>> ! *
>> !
>> **********************************************************************
>> **
>> ******
>> 
>> program main
>>      
>>   use HDF5
>> 
>>   implicit none
>> 
>>   integer :: i, j, h5err
>>   integer :: nrows = 1000
>>   integer :: ncols = 500
>>   real, dimension(500,1000) :: matrix
>> 
>>   integer(HID_T)   :: file       ! File id 
>>   integer(HID_T)   :: hdata       ! Group id for storing hourly data
>>   integer(HID_T)   :: dset       ! Dataset id
>>   integer(HID_T)   :: dspc       ! Dataspace id
>>   integer(HID_T)   :: dprp       ! Dataproperties id
>>   integer(HID_T)   :: dtyp       ! Datatype id
>>   integer(HID_T)   :: mset       ! Memory Dataset id
>>   integer(HID_T)   :: mspc       ! Memory Dataspace id
>> 
>>   ! Variables for fetching dimension sizes from dataspaces within the
> 
>> file.
>>   integer(HSIZE_T) :: dimd(2), maxdim(2)
>> 
>>   ! Initialize FORTRAN interface.
>>   call H5open_f ( h5err )
>>   ! Create a new file using default properties.
>>   call H5Fcreate_f ( "test03.h5", H5F_ACC_TRUNC_F, file, h5err )
>>   ! Hourly data - Stores info about the settings at a given year.
>>   call H5Gcreate_f ( file, "HData", hdata, h5err )
>>   ! Create dataspace to store expandable matrix of values
>>   call H5Screate_simple_f ( 2, (/0, nrows/), dspc, h5err, 
>> (/H5S_UNLIMITED_F, nrows/) )
>>   ! Define the datatype for this set
>>   call H5Tcopy_f ( H5T_NATIVE_REAL, dtyp, h5err )
>>   ! Create property objects
>>   call H5Pcreate_f ( H5P_DATASET_CREATE_F, dprp, h5err )
>>   ! Set properties - chunked (one at a time)
>>   call H5Pset_chunk_f ( dprp, 2, (/1, nrows/), h5err )
>>   ! Set properties - using compression level 7 [0-9] (9 most
>> compression)
>>   call H5Pset_deflate_f ( dprp, 7, h5err )
>>   ! Create the dataset with modified properties.
>>   call H5Dcreate_f ( hdata, "vals", dtyp, dspc, dset, h5err, dprp )
>>   ! Create memory dataspaces to enable chunked write
>>   call H5Screate_simple_f ( 2, (/ncols, nrows/), mspc, h5err )
>> 
>>   ! Fill in data variables
>>   do i = 1, ncols
>>       do j = 1, nrows
>>           matrix (i,j) = 100.0 * real(i) + real(j)
>>       end do
>>   end do
>> 
>>   ! Write dataspace in a loop
>>   ! New data has to be appended to the dataset already in the file.
>>      
>>   do i = 1, 30
>>       print *, "Loop", i
>>       ! Get a new pointer to a copy of the dataspace for this set
>>       call H5Dget_space_f ( dset, dspc, h5err )
>>       ! Figure out how big is the dataset in the file.
>>       call H5Sget_simple_extent_dims_f ( dspc, dimd, maxdim, h5err )
>>       ! Extend size of the dataset in the file
>>       call H5Dextend_f ( dset, dimd+(/ncols,0/), h5err )
>>       ! Close the dataspace now that it has been extended
>>       call H5Sclose_f ( dspc, h5err )
>>       ! Fetch the dataspace of the extended dataset
>>       call H5Dget_space_f ( dset, dspc, h5err )
>>       ! Select the appropriate slab in the extended dataset
>>       call H5Sselect_hyperslab_f ( dspc, H5S_SELECT_SET_F, &
>>                (/dimd(1),0/), (/1,1/), h5err, (/1,1/), shape(matrix)
> )
>>       ! Write the data from memory to the selected slab
>>       call H5Dwrite_f ( dset, H5T_NATIVE_REAL, matrix, shape(matrix),
> 
>> h5err, &
>>                mspc, dspc, H5P_DEFAULT_F )
>>       ! Close the extended dataspace to free memory
>>       call H5Sclose_f ( dspc, h5err ) 
>>       call sleep (3)      ! for a better view of process explorer
>> graph
>>   end do
>> 
>> ! Cleanup, end access and release resources
>> 
>>   call sleep (5)                    ! for a better view of process
>> explorer graph
>>   call H5Dclose_f ( dset, h5err )   ! dataset
>>  !call H5Sclose_f ( dspc, h5err )   ! dataspace (released inside
> loop)
>>   call H5Pclose_f ( dprp, h5err )   ! properties
>>   call H5Tclose_f ( dtyp, h5err )   ! data types
>> 
>>   call H5Fclose_f ( file, h5err )   ! file id
>>   call H5close_f  ( h5err )         ! fortran interface
>>   call sleep (5)
>> 
>> end program main
>> 
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> Hdf-forum@hdfgroup.org
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
> 
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> Hdf-forum@hdfgroup.org
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
> <nocompression.jpg><compression.jpg>_______________________________________________
> Hdf-forum is for HDF software users discussion.
> Hdf-forum@hdfgroup.org
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org


_______________________________________________
Hdf-forum is for HDF software users discussion.
Hdf-forum@hdfgroup.org
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to