source: thirdparty/SZ/sz/src/pastri.c @ 2c47b73

Revision 2c47b73, 3.5 KB checked in by Hal Finkel <hfinkel@…>, 6 years ago (diff)

more work on adding SZ (latest version)

  • Property mode set to 100644
Line 
1#include "pastri.h"
2#include "pastriD.h"
3#include "pastriF.h"
4
5void SZ_pastriReadParameters(char paramsFilename[512],pastri_params *paramsPtr){
6  FILE *paramsF;
7  paramsF=fopen(paramsFilename,"r");
8 
9  if(paramsF==NULL){
10    printf("ERROR: Parameters file cannot be opened.\n");
11    printf("Filename: %s\n",paramsFilename);
12    assert(0);
13  }
14 
15  fscanf(paramsF,"%d %d %d %d %lf %d %d",&paramsPtr->bf[0],&paramsPtr->bf[1],&paramsPtr->bf[2],&paramsPtr->bf[3],&paramsPtr->originalEb,&paramsPtr->dataSize,&paramsPtr->numBlocks);
16  //printf("Params: %d %d %d %d %.3e %d\n",paramsPtr->bf[0],paramsPtr->bf[1],paramsPtr->bf[2],paramsPtr->bf[3],paramsPtr->originalEb,paramsPtr->numBlocks);
17  fclose(paramsF);
18}
19
20void SZ_pastriPreprocessParameters(pastri_params *p){
21  //Preprocess by calculating some pastri_params:
22  //Calculate sbSize, sbNum, etc.:
23  p->idxRange[0]=(p->bf[0]+1)*(p->bf[0]+2)/2;
24  p->idxRange[1]=(p->bf[1]+1)*(p->bf[1]+2)/2;
25  p->idxRange[2]=(p->bf[2]+1)*(p->bf[2]+2)/2;
26  p->idxRange[3]=(p->bf[3]+1)*(p->bf[3]+2)/2;
27  p->sbSize=p->idxRange[2]*p->idxRange[3];
28  p->sbNum=p->idxRange[0]*p->idxRange[1];
29  p->bSize=p->sbSize*p->sbNum;
30  p->usedEb=p->originalEb*0.999;  //This is needed just to eliminate some rounding errors. It has almost no effect on compression rate/ratios.
31}
32
33void SZ_pastriCompressBatch(pastri_params *p,unsigned char *originalBuf, unsigned char** compressedBufP,size_t *compressedBytes){
34  (*compressedBufP) = (unsigned char*)calloc(p->numBlocks*p->bSize*p->dataSize,sizeof(char));
35  int bytes; //bytes for this block
36  int i;
37  size_t bytePos=0; //Current byte pos in the outBuf
38 
39  memcpy(*compressedBufP, p, sizeof(pastri_params));
40  bytePos+=sizeof(pastri_params);
41 
42  for(i=0;i<p->numBlocks;i++){
43    if(p->dataSize==8){
44      pastri_double_Compress(originalBuf + (i*p->bSize*p->dataSize),p,(*compressedBufP) + bytePos,&bytes);
45    }else if(p->dataSize==4){
46      pastri_float_Compress(originalBuf + (i*p->bSize*p->dataSize),p,(*compressedBufP) + bytePos,&bytes);
47    }
48    bytePos+=bytes;
49    //printf("bytes:%d\n",bytes);
50  }
51  *compressedBytes=bytePos;
52  //printf("totalBytesWritten:%d\n",*compressedBytes);
53}
54
55void SZ_pastriDecompressBatch(unsigned char*compressedBuf, pastri_params *p, unsigned char** decompressedBufP ,size_t *decompressedBytes){
56  int bytePos=0; //Current byte pos in the outBuf
57  memcpy(p, compressedBuf, sizeof(pastri_params));
58  bytePos+=sizeof(pastri_params);       
59       
60  (*decompressedBufP) = (unsigned char*)malloc(p->numBlocks*p->bSize*p->dataSize*sizeof(char)); 
61  int bytes; //bytes for this block
62  int i;
63 
64  for(i=0;i<p->numBlocks;i++){
65    if(p->dataSize==8){
66      pastri_double_Decompress(compressedBuf + bytePos,p->dataSize,p,(*decompressedBufP) + (i*p->bSize*p->dataSize),&bytes);
67    }else if(p->dataSize==4){
68      pastri_float_Decompress(compressedBuf + bytePos,p->dataSize,p,(*decompressedBufP) + (i*p->bSize*p->dataSize),&bytes);
69    }
70         
71    bytePos += bytes;
72    //printf("bytes:%d\n",bytes);
73  }
74  //printf("totalBytesRead:%d\n",bytePos);
75  *decompressedBytes=p->numBlocks*p->bSize*p->dataSize;
76}
77
78void SZ_pastriCheckBatch(pastri_params *p,unsigned char*originalBuf,unsigned char*decompressedBuf){       
79  int i;
80  for(i=0;i<p->numBlocks;i++){
81    if(p->dataSize==8){
82      pastri_double_Check(originalBuf+(i*p->bSize*p->dataSize),p->dataSize,decompressedBuf+(i*p->bSize*p->dataSize),p);
83    }else if(p->dataSize==4){
84      pastri_float_Check(originalBuf+(i*p->bSize*p->dataSize),p->dataSize,decompressedBuf+(i*p->bSize*p->dataSize),p);
85    }
86  }
87}
Note: See TracBrowser for help on using the repository browser.