1/* This is part of the netCDF package.
2   Copyright 2005 University Corporation for Atmospheric Research/Unidata
3   See COPYRIGHT file for conditions of use.
4
5   Test netcdf-4 variables.
6   $Id: tst_h_files3.c,v 1.2 2010/02/05 17:06:28 ed Exp $
7*/
8
9#include <nc_tests.h>
10#include "err_macros.h"
11#include "netcdf.h"
12#include <unistd.h>
13#include <time.h>
14#include <sys/time.h> /* Extra high precision time info. */
15#include <hdf5.h>
16#include <H5DSpublic.h>
17
18#define MAX_LEN 30
19#define TMP_FILE_NAME "tst_files2_tmp.out"
20#define FILE_NAME "tst_files2_1.nc"
21#define MILLION 1000000
22
23void *last_sbrk;
24
25void
26get_mem_used2(int *mem_used)
27{
28   char buf[30];
29   FILE *pf;
30
31   snprintf(buf, 30, "/proc/%u/statm", (unsigned)getpid());
32   pf = fopen(buf, "r");
33   if (pf) {
34      unsigned size; /*       total program size */
35      unsigned resident;/*   resident set size */
36      unsigned share;/*      shared pages */
37      unsigned text;/*       text (code) */
38      unsigned lib;/*        library */
39      unsigned data;/*       data/stack */
40      /*unsigned dt;          dirty pages (unused in Linux 2.6)*/
41      fscanf(pf, "%u %u %u %u %u %u", &size, &resident, &share,
42      &text, &lib, &data);
43      *mem_used = data;
44   }
45   else
46      *mem_used = -1;
47  fclose(pf);
48}
49
50int
51main(int argc, char **argv)
52{
53
54   printf("\n*** Testing netcdf-4 file functions, some more.\n");
55   last_sbrk = sbrk(0);
56/*    printf("Test for memory consumption of simple HDF5 file read...\n"); */
57/*    { */
58/* #define NUM_TRIES 200000 */
59/* #define CHUNK_CACHE_NELEMS_1 1009 */
60/* #define CHUNK_CACHE_SIZE_1 1000000 */
61/* #define CHUNK_CACHE_PREEMPTION_1 .75 */
62/* #define MAX_OBJ 2       */
63/* #define FILE_NAME2 "ref_tst_kirk.nc" */
64/*       int mem_used, mem_used1, mem_used2; */
65/*       hid_t fapl_id, fileid, grpid, datasetid; */
66/*       int try; */
67/*       int num_scales; */
68
69/*       printf("\t\t\tbef_open\taft_open\taft_close\tused_open\tused_closed\n"); */
70/*       for (try = 0; try < NUM_TRIES; try++) */
71/*       { */
72/*   char obj_name2[] = "Captain_Kirk"; */
73/*   get_mem_used2(&mem_used); */
74
75/*   /\* Reopen the file. *\/ */
76/*    if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; */
77/*   if ((fileid = H5Fopen(FILE_NAME2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) ERR; */
78/*   if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; */
79
80/*   if ((datasetid = H5Dopen2(grpid, obj_name2, H5P_DEFAULT)) < 0) ERR; */
81/*   num_scales = H5DSget_num_scales(datasetid, 0); */
82
83/*   get_mem_used2(&mem_used1); */
84
85/*   /\* Close everything. *\/ */
86/*   if (H5Dclose(datasetid)) ERR_RET; */
87/*   if (H5Pclose(fapl_id)) ERR_RET; */
88/*   if (H5Gclose(grpid) < 0) ERR_RET; */
89/*   if (H5Fclose(fileid) < 0) ERR_RET; */
90
91/*   get_mem_used2(&mem_used2); */
92
93/*   if (mem_used2 - mem_used) */
94/*   { */
95/*      printf("try %d - \t\t%d\t\t%d\t\t%d\t\t%d\t\t%d \n", try,  */
96/*     mem_used, mem_used1, mem_used2, mem_used1 - mem_used,  */
97/*     mem_used2 - mem_used); */
98/*      /\*if (try > 1) */
99/*        ERR_RET;*\/ */
100/*   } */
101/*       } */
102/*    } */
103/*    SUMMARIZE_ERR; */
104/*    printf("Test for memory consumption of HDF5 file read...\n"); */
105/*    { */
106/* #define NUM_TRIES 2000 */
107/* #define CHUNK_CACHE_NELEMS_1 1009 */
108/* #define CHUNK_CACHE_SIZE_1 1000000 */
109/* #define CHUNK_CACHE_PREEMPTION_1 .75 */
110/* #define MAX_OBJ 2       */
111/* #define FILE_NAME2 "ref_tst_kirk.nc" */
112/*       hsize_t num_obj, i; */
113/*       int mem_used, mem_used1, mem_used2; */
114/*       hid_t fapl_id, fileid, grpid, datasetid[MAX_OBJ]; */
115/*       hid_t access_pid, spaceid; */
116/*       char obj_name[NC_MAX_NAME + 1]; */
117/*       int try; */
118/*       H5O_info_t obj_info; */
119/*       H5_index_t idx_field = H5_INDEX_CRT_ORDER; */
120/*       ssize_t size; */
121/*       int ndims; */
122/*       hsize_t dims[NC_MAX_DIMS], max_dims[NC_MAX_DIMS]; */
123/*       int is_scale = 0; */
124
125/*       get_mem_used2(&mem_used); */
126/*       mem_used1 = mem_used; */
127/*       mem_used2 = mem_used; */
128/*       printf("start: memuse= %d\t%d\t%d \n",mem_used, mem_used1,   */
129/*       mem_used2); */
130
131/* /\*      if (H5Eset_auto(NULL, NULL) < 0) ERR;*\/ */
132
133/*       printf("bef_open\taft_open\taft_close\tused_open\tused_closed\n"); */
134/*       for (try = 0; try < NUM_TRIES; try++) */
135/*       { */
136/*   get_mem_used2(&mem_used); */
137
138/*   /\* Reopen the file. *\/ */
139/*   if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; */
140/*   if (H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI)) ERR; */
141/*   if (H5Pset_cache(fapl_id, 0, CHUNK_CACHE_NELEMS_1, CHUNK_CACHE_SIZE_1, */
142/*    CHUNK_CACHE_PREEMPTION_1) < 0) ERR; */
143/*   if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST,  */
144/*    H5F_LIBVER_LATEST) < 0) ERR; */
145/*   if ((fileid = H5Fopen(FILE_NAME2, H5F_ACC_RDONLY, fapl_id)) < 0) ERR; */
146/*   if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; */
147
148/*   if (H5Gget_num_objs(grpid, &num_obj) < 0) ERR; */
149/*   if (num_obj > MAX_OBJ) ERR; */
150/*   for (i = 0; i < num_obj; i++) */
151/*   { */
152/*      if (H5Oget_info_by_idx(grpid, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, */
153/*     i, &obj_info, H5P_DEFAULT) < 0) ERR; */
154/*      if ((size = H5Lget_name_by_idx(grpid, ".", idx_field, H5_ITER_INC, i, */
155/*     NULL, 0, H5P_DEFAULT)) < 0) ERR; */
156/*      if (H5Lget_name_by_idx(grpid, ".", idx_field, H5_ITER_INC, i, */
157/*     obj_name, size+1, H5P_DEFAULT) < 0) ERR; */
158/*      if ((datasetid[i] = H5Dopen2(grpid, obj_name, H5P_DEFAULT)) < 0) ERR; */
159/*      if ((access_pid = H5Dget_access_plist(datasetid[i])) < 0) ERR; */
160/*      if ((spaceid = H5Dget_space(datasetid[i])) < 0) ERR; */
161/*      if ((ndims = H5Sget_simple_extent_ndims(spaceid)) < 0) ERR; */
162/*      if (H5Sget_simple_extent_dims(spaceid, dims, max_dims) < 0) ERR; */
163/*      if ((is_scale = H5DSis_scale(datasetid[i])) < 0) ERR; */
164/*      if (is_scale) */
165/*      { */
166/*         char dimscale_name_att[NC_MAX_NAME + 1]; */
167/*         int natts, a; */
168/*         hid_t attid = 0; */
169/*         char att_name[NC_MAX_HDF5_NAME + 1]; */
170
171/*         if ((natts = H5Aget_num_attrs(datasetid[i])) < 0) ERR; */
172/*         for (a = 0; a < natts; a++) */
173/*         { */
174/*    if ((attid = H5Aopen_idx(datasetid[i], (unsigned int)a)) < 0) ERR; */
175/*    if (H5Aget_name(attid, NC_MAX_HDF5_NAME, att_name) < 0) ERR; */
176/*    if (H5Aclose(attid) < 0) ERR; */
177/*         } */
178/*         if (H5DSget_scale_name(datasetid[i], dimscale_name_att, NC_MAX_NAME) < 0) ERR; */
179/*      } */
180/*      else */
181/*      { */
182/*         int num_scales; */
183/*         size_t chunk_cache_size, chunk_cache_nelems; */
184/*         double rdcc_w0; */
185/*         hid_t propid; */
186
187/*         num_scales = H5DSget_num_scales(datasetid[i], 0); */
188/*         if ((H5Pget_chunk_cache(access_pid, &chunk_cache_nelems, */
189/*         &chunk_cache_size, &rdcc_w0)) < 0) ERR; */
190/*         if ((propid = H5Dget_create_plist(datasetid[i])) < 0) ERR; */
191
192/*         if (H5Pclose(propid)) ERR; */
193
194/*      } */
195
196/*      if (H5Pclose(access_pid)) ERR; */
197/*      if (H5Sclose(spaceid)) ERR; */
198/*   } */
199
200/*   get_mem_used2(&mem_used1); */
201
202/*   /\* Close everything. *\/ */
203/*   for (i = 0; i < num_obj; i++) */
204/*      if (H5Dclose(datasetid[i])) ERR; */
205/*   if (H5Pclose(fapl_id)) ERR; */
206/*   if (H5Gclose(grpid) < 0) ERR; */
207/*   if (H5Fclose(fileid) < 0) ERR; */
208
209/*   get_mem_used2(&mem_used2); */
210
211/*   if (mem_used2 - mem_used) */
212/*   { */
213/*      printf("try %d - %d\t\t%d\t\t%d\t\t%d\t\t%d \n", try,  */
214/*     mem_used, mem_used1, mem_used2, mem_used1 - mem_used,  */
215/*     mem_used2 - mem_used); */
216/*      if (try > 1) */
217/*         ERR_RET; */
218/*   } */
219/*       } */
220/*    } */
221/*    SUMMARIZE_ERR; */
222   FINAL_RESULTS;
223}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed