.dat文件解码的改进

时间:2018-11-06 15:36:51

标签: c fread

我正在编写一个程序,该程序在具有46个逻辑内核和128 GB RAM的Windows机器上,对3000个.dat文件(每个500 MB)进行零抑制。我正在使用30个线程,因此每个线程必须使用100多个文件。第一步是解码由数字化仪创建的.dat文件,为此,我得到了一个C源文件,其内容如下:

out_file=fopen(output_file.txt, "w");
ptr_myfile=fopen(Data_0.dat, "rb");

uint32_t nwords = 0;
int16_t wfm_adc;

i=0;
offset=0;
while(i<NSAMPLE){
            fseek(ptr_myfile,offset,SEEK_SET);
            fread(&nwords, 4, 1, ptr_myfile);
            wfm_adc = (int16_t)(nwords & 0xFFFF);
            fprintf(out_file, "%d\n", wfm_adc);
            i++;
            wfm_adc = (int16_t)((nwords & 0xFFFF0000) >> 16);
            fprintf(out_file, "%d\n", wfm_adc);
            i++;
            offset = offset + 4;
}

据我了解,它一次读取4个字节的数据,并在文件中写入2 + 2个字节。 输出文件中的数据看起来像这样

-96
-139
-115
-143
-119
-188
-408
-1355

它工作正常,唯一的问题是它非常慢,大约有2.5亿个样本,仅从文件中读取数据就花费了大约250秒,甚至没有使用fprintf写入文件,因此每个线程都必须解码100多个文件,仅此一个线程就需要25000秒。 有办法改善吗?我已经读过,通过读取更多的数据,而不是读取4个字节(例如64Kb),调用读取的数据会减少开销,但是我还没有找到一种方法来获取所需的数据并将其写入文件。

0 个答案:

没有答案