-
Notifications
You must be signed in to change notification settings - Fork 22
/
print_h5repack_farg.c
116 lines (101 loc) · 4.8 KB
/
print_h5repack_farg.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
Copyright (c) 2016, Lawrence Livermore National Security, LLC.
Produced at the Lawrence Livermore National Laboratory
Written by Mark C. Miller, miller86@llnl.gov
LLNL-CODE-707197. All rights reserved.
This file is part of H5Z-ZFP. Please also read the BSD license
https://raw.githubusercontent.com/LLNL/H5Z-ZFP/master/LICENSE
*/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_WIN32) || defined(_WIN64)
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif
typedef unsigned int uint;
#include "H5Zzfp_plugin.h"
#define NAME_LEN 256
/* convenience macro to handle command-line args and help */
#define HANDLE_SEP(SEPSTR) \
{ \
char tmpstr[64]; \
int len = snprintf(tmpstr, sizeof(tmpstr), "\n%s...", #SEPSTR);\
printf(" %*s\n",60-len,tmpstr); \
}
#define HANDLE_ARG(A,PARSEA,PRINTA,HELPSTR) \
{ \
int i; \
char tmpstr[64]; \
int len; \
int len2 = strlen(#A)+1; \
for (i = 0; i < argc; i++) \
{ \
if (!strncmp(argv[i], #A"=", len2)) \
{ \
A = PARSEA; \
break; \
} \
else if (!strncasecmp(argv[i], "help", 4)) \
{ \
return 0; \
} \
} \
len = snprintf(tmpstr, sizeof(tmpstr), "%s=" PRINTA, #A, A);\
printf(" %s%*s\n",tmpstr,60-len,#HELPSTR); \
}
static void print_cdvals(int zfpmode, double rate, double acc, uint prec,
uint minbits, uint maxbits, uint maxprec, int minexp)
{
unsigned int cd_values[10] = {0,0,0,0,0,0,0,0,0,0};
int i, cd_nelmts = 10;
/* setup zfp filter via generic (cd_values) interface */
if (zfpmode == H5Z_ZFP_MODE_RATE)
H5Pset_zfp_rate_cdata(rate, cd_nelmts, cd_values);
else if (zfpmode == H5Z_ZFP_MODE_PRECISION)
H5Pset_zfp_precision_cdata(prec, cd_nelmts, cd_values);
else if (zfpmode == H5Z_ZFP_MODE_ACCURACY)
H5Pset_zfp_accuracy_cdata(acc, cd_nelmts, cd_values);
else if (zfpmode == H5Z_ZFP_MODE_EXPERT)
H5Pset_zfp_expert_cdata(minbits, maxbits, maxprec, minexp, cd_nelmts, cd_values);
else if (zfpmode == H5Z_ZFP_MODE_REVERSIBLE)
H5Pset_zfp_reversible_cdata(cd_nelmts, cd_values);
else
return;
/* h5repack -f argument format...
h5repack -f UD=32013,0,6,3,0,3539053052,1062232653,0,0
*/
printf("\nh5repack -f argument...\n");
printf(" -f UD=%u,0,%u", H5Z_FILTER_ZFP, cd_nelmts);
for (i = 0; i < cd_nelmts; i++)
printf(",%u", cd_values[i]);
printf("\n");
}
int main(int argc, char **argv)
{
/* compression parameters (defaults taken from ZFP header) */
int zfpmode = 1;
double rate = 3.5;
double acc = 0;
uint prec = 0;
uint minbits = 0;
uint maxbits = 0;
uint maxprec = 0;
int minexp = 0;
int help = 0;
/* ZFP filter arguments */
HANDLE_SEP(Print cdvals for set of ZFP compression parameters)
HANDLE_ARG(zfpmode,(int) strtol(argv[i]+len2,0,10),"%d",set zfp mode (1=rate,2=prec,3=acc,4=expert,5=rev));
HANDLE_ARG(rate,(double) strtod(argv[i]+len2,0),"%g",set rate for rate mode of filter);
HANDLE_ARG(acc,(double) strtod(argv[i]+len2,0),"%g",set accuracy for accuracy mode of filter);
HANDLE_ARG(prec,(uint) strtol(argv[i]+len2,0,10),"%u",set precision for precision mode of zfp filter);
HANDLE_ARG(minbits,(uint) strtol(argv[i]+len2,0,10),"%u",set minbits for expert mode of zfp filter);
HANDLE_ARG(maxbits,(uint) strtol(argv[i]+len2,0,10),"%u",set maxbits for expert mode of zfp filter);
HANDLE_ARG(maxprec,(uint) strtol(argv[i]+len2,0,10),"%u",set maxprec for expert mode of zfp filter);
HANDLE_ARG(minexp,(int) strtol(argv[i]+len2,0,10),"%d",set minexp for expert mode of zfp filter);
HANDLE_ARG(help,(int)strtol(argv[i]+len2,0,10),"%d",this help message); /* must be last */
if (!help)
print_cdvals(zfpmode, rate, acc, prec, minbits, maxbits, maxprec, minexp);
return 0;
}