Example #1
0
int main(void)
{
   int ncid, sfc_tempid;
   float data;
   int dimid;
   size_t l_index[NDIMS] = {10000};
   int mem_used, mem_used1;
   int i;

   printf("\n*** Testing netcdf-4 memory use with unlimited dimensions.\n");
   printf("*** testing with user-contributed code...");

   if (nc_create(FILE_NAME, NC_NETCDF4, &ncid)) ERR;
   if (nc_def_dim(ncid, TIME_NAME, NC_UNLIMITED, &dimid)) ERR;
   if (nc_def_var(ncid, SFC_TEMP_NAME, NC_FLOAT, NDIMS, &dimid, &sfc_tempid)) ERR;

   /* Write data each 100ms*/
   get_mem_used2(&mem_used);
   for (i = 0; i < NUM_TRIES; i++)
   {
      data = 25.5 + l_index[0];
      if (nc_put_var1_float(ncid, sfc_tempid, l_index, (const float*) &data)) ERR;
      l_index[0]++;
      get_mem_used2(&mem_used1);
      if (!(i%100) && mem_used1 - mem_used)
	 printf("delta %d bytes of memory for try %d\n", mem_used1 - mem_used, i);
   }

   if (nc_close(ncid)) ERR;
   SUMMARIZE_ERR;
   FINAL_RESULTS;
}
Example #2
0
int main(void)
{
   float data[X_LEN * Y_LEN * Z_LEN];
   int i;

   printf("\n*** Testing netcdf-4 file functions with caching.\n");

  /* Initialize data. */
   for (i = 0; i < (X_LEN * Y_LEN * Z_LEN); i++)
      data[i] = i;
   printf("*** testing a bunch of file writes with compressed data...\n");
   {
      int mem_used, mem_used1;

      printf("*** testing netcdf-4 writes...\n");
      for (i = 0; i < NUM_TRIES; i++)
      {
	 get_mem_used2(&mem_used);
	 if (dump_file3(data, 1, 0)) ERR_RET;
	 get_mem_used2(&mem_used1);
	 if (mem_used1 - mem_used)
	    printf("delta %d bytes of memory for try %d\n", mem_used1 - mem_used, i);
      }
      printf("*** testing HDF5 writes...\n");
      for (i = 0; i < NUM_TRIES; i++)
      {
	 get_mem_used2(&mem_used);
	 if (dump_hdf_file(data, 1)) ERR_RET;
	 get_mem_used2(&mem_used1);
	 if (mem_used1 - mem_used)
	    printf("delta %d bytes of memory for try %d\n", mem_used1 - mem_used, i);
      }
      printf("*** testing netcdf-4 writes again...\n");
      for (i = 0; i < NUM_TRIES; i++)
      {
	 get_mem_used2(&mem_used);
	 if (dump_file2(data, 1, 0)) ERR_RET;
	 get_mem_used2(&mem_used1);
	 if (mem_used1 - mem_used)
	    printf("delta %d bytes of memory for try %d\n", mem_used1 - mem_used, i);
      }
   }
   SUMMARIZE_ERR;
   FINAL_RESULTS;
}
Example #3
0
int
main(int argc, char **argv)
{

   printf("\n*** Testing netcdf-4 file functions, some more.\n");
   last_sbrk = sbrk(0);
   printf("*** testing lots of open files...\n");
   {
#define NUM_TRIES 6
      int *ncid_in;
      int mem_used, mem_used2;
      /* int mem_per_file; */
      int num_files[NUM_TRIES] = {1, 5, 10, 20, 35, 50};
      char file_name[NUM_TRIES][NC_MAX_NAME + 1];
      int num_vars[NUM_TRIES];
      size_t cache_size[NUM_TRIES];
      int mode[NUM_TRIES];
      char mode_name[NUM_TRIES][8];
      int ndims[NUM_TRIES];
      int dim_len[NUM_TRIES][MAX_DIMS];
      int dim_4d[MAX_DIMS] = {NC_UNLIMITED, 10, 100, 100};
      char dimstr[30];
      char chunkstr[30];
      int num_recs[NUM_TRIES] = {1, 1, 1, 1, 1, 1};
      struct timeval start_time, end_time, diff_time;
      struct timeval close_start_time, close_end_time, close_diff_time;
      int open_us, close_us, create_us;
      size_t chunksize[MAX_DIMS];
      int storage;
      int d, f, t;

      printf("dims\t\tchunks\t\tformat\tnum_files\tcache(kb)\tnum_vars\tmem(kb)\t"
	     "open_time(us/file)\tclose_time(us/file)\tcreate_time(us/file)\n");
      for (t = 0; t < NUM_TRIES; t++)
      {
	 strcpy(mode_name[t], "netcdf4");
	 mode[t] = NC_NETCDF4;
	 cache_size[t] = 16000000;
	 num_vars[t] = 10;
	 ndims[t] = 4;
	 for (d = 0; d < ndims[t]; d++)
	    dim_len[t][d] = dim_4d[d];

	 /* Create sample files. */
         if (gettimeofday(&start_time, NULL)) ERR;
	 for (f = 0; f < num_files[t]; f++)
         {
            /* Set up filename. */
            sprintf(file_name[t], "tst_files2_%d_%d.nc", t, f);
            if (create_sample_file(file_name[t], ndims[t], dim_len[t], num_vars[t],
                                   mode[t], num_recs[t])) ERR;

            /* How long did it take? */
            if (gettimeofday(&end_time, NULL)) ERR;
            if (nc4_timeval_subtract(&diff_time, &end_time, &start_time)) ERR;
            create_us = ((int)diff_time.tv_sec * MILLION + (int)diff_time.tv_usec) / num_files[t];
         }

         /* /\* Change the cache settings. *\/ */
         /* if (nc_set_chunk_cache(cache_size[t], 20000, .75)) ERR; */

         /* We need storage for an array of ncids. */
         if (!(ncid_in = malloc(num_files[t] * sizeof(int)))) ERR;

         /* How much memory is in use now? */
         if (get_mem_used1(&mem_used)) ERR;

         /* Open the first file to get chunksizes. */
         if (gettimeofday(&start_time, NULL)) ERR;
         if (nc_open(file_name[t], 0, &ncid_in[0])) ERR;
         if (nc_inq_var_chunking(ncid_in[0], 0, &storage, chunksize)) ERR;

         /* Now reopen this file a large number of times. */
         for (f = 1; f < num_files[t]; f++)
            if (nc_open(file_name[t], 0, &ncid_in[f])) ERR_RET;

         /* How long did it take per file? */
         if (gettimeofday(&end_time, NULL)) ERR;
         if (nc4_timeval_subtract(&diff_time, &end_time, &start_time)) ERR;
         open_us = ((int)diff_time.tv_sec * MILLION + (int)diff_time.tv_usec) / num_files[t];

         /* How much memory is in use by this process now? */
         if (get_mem_used1(&mem_used2)) ERR;

         /* Close all netcdf files. */
         if (gettimeofday(&close_start_time, NULL)) ERR;
         for (f = 0; f < num_files[t]; f++)
            if (nc_close(ncid_in[f])) ERR_RET;

         /* How long did it take to close all files? */
         if (gettimeofday(&close_end_time, NULL)) ERR;
         if (nc4_timeval_subtract(&close_diff_time, &close_end_time, &close_start_time)) ERR;
         close_us = ((int)close_diff_time.tv_sec * MILLION +
                     (int)close_diff_time.tv_usec) / num_files[t];

         /* We're done with this. */
         free(ncid_in);

         /* How much memory was used for each open file? */
         /* mem_per_file = mem_used2/num_files[t]; */

         /* Prepare the dimensions string. */
         if (ndims[t] == MAX_DIMS)
            sprintf(dimstr, "%dx%dx%dx%d", dim_len[t][0], dim_len[t][1],
                    dim_len[t][2], dim_len[t][3]);
         else
            sprintf(dimstr, "%dx%dx%d", dim_len[t][0], dim_len[t][1],
                    dim_len[t][2]);

         /* Prepare the chunksize string. */
         if (storage == NC_CHUNKED)
         {
            if (ndims[t] == MAX_DIMS)
               sprintf(chunkstr, "%dx%dx%dx%d", (int)chunksize[0], (int)chunksize[1],
                       (int)chunksize[2], (int)chunksize[3]);
            else
               sprintf(chunkstr, "%dx%dx%d", (int)chunksize[0], (int)chunksize[1],
                       (int)chunksize[2]);
         }
         else
            strcpy(chunkstr, "contig       ");

         /* Output results. */
         printf("%s\t%s\t%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",
                dimstr, chunkstr, mode_name[t], num_files[t], (int)(cache_size[t]/1024),
                num_vars[t], mem_used2, open_us, close_us, create_us);
      }
   }
   SUMMARIZE_ERR;
   printf("Test for memory consumption...\n");
   {
#define NUM_TRIES_100 100
      int ncid, i;
      int mem_used, mem_used1, mem_used2;

      get_mem_used2(&mem_used);
      mem_used1 = mem_used;
      mem_used2 = mem_used;
      printf("start: memuse= %d\t%d\t%d \n",mem_used, mem_used1,
	     mem_used2);

      printf("bef_open\taft_open\taft_close\tused_open\tused_closed\n");
      for (i=0; i < NUM_TRIES_100; i++)
      {
	 /* Open the file. NC_NOWRITE tells netCDF we want read-only access
	  * to the file.*/

	 get_mem_used2(&mem_used);
	 nc_set_chunk_cache(10,10,.5);
	 if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR;
	 get_mem_used2(&mem_used1);

	 /* Close the file, freeing all resources.   ????  */
	 if (nc_close(ncid)) ERR;

	 get_mem_used2(&mem_used2);

	 if (mem_used2 - mem_used)
	    printf("try %d - %d\t\t%d\t\t%d\t\t%d\t\t%d \n", i,
		   mem_used, mem_used1, mem_used2, mem_used1 - mem_used,
		   mem_used2 - mem_used);
      }
   }
   SUMMARIZE_ERR;
   FINAL_RESULTS;
}