嗯,我正好做过优化
当是一侧是emulator,一侧是C
运行在emulator上的RTL通过DPI-C调用(every posedge clk),把数据送到C里,C写到文件里
一旦做格式化(不管是任何格式化),就会导致硬件侧等待软件侧。
后来直接存二进制,在每cycle写的不多的情况下,可以完全不拖慢硬件速度。
然后再写个小程序来做读入二进制,写出格式化数据,这样总的时间要比在线做格式化+写快得多。
写的时候也试了mmap, 对于binary格式,速度还不如fwrite,
可以参考我这篇日志
https://segmentfault.com/a/1190000023431834
我的结论(和我用的nfs有关)
fwrite在绝大分场景下比mmap快, 当写入量为4GB左右时, fwriter用时10.5 sec, mmap用时29.6 sec.
用fread读入4GB binary数据, 用fwrite写出8.9GB数据时需要103.4 sec
用mmap读入4GB binary数据, 用fwrite写出8.9GB数据时需要88.1 sec
producer比较快, consumer比较慢, producer 2秒可以产生1GB数据,consumer需要20 sec左右才可以处理完。当两者并行跑时,收益并不高。
【 在 dormouseBHU 的大作中提到: 】
: 直接存二进制,不要转成字符串。
: float就可以,都不需要double,一个数4个字节,文件大小可以小一半。
: 如果怕出错可以在中间插几个检验字节。比如一兆加一个检验。
--
FROM 101.86.19.*