大佬教程收集整理的这篇文章主要介绍了C BZ2_bz解压缩比bzip2命令慢,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试处理的文件使用多个bz2流,所以我正在检查BZ_S_bEAM_END的BZ2_bzDecompress,如果它发生,请使用BZ2_bzDecompressEnd(strm);如果文件尚未完全处理,则使用下一个流重新启动BZ2_bzDecompressInit(strm,0).我也试过没有BZ2_bzDecompressEnd,但没有改变任何东西(我在文档中没有真正看到如何正确处理多个流)
该文件之前是mmap’,在那里我也尝试了不同的标志组合,目前MAP_RDONLY,MAP_PRIVATE与madvise到MADV_SEQUENTIAL | MADV_WILLNEED | MADV_HUGEPAGE(我正在检查返回值,并且madvise没有报告任何问题,我正在使用linux内核3.2x debian设置,它具有巨大的页面支持)
在进行分析时,我确保除了一些用于测量速度的计数器和一个每n次迭代限制一次的printf之外,没有其他任何操作.此外,这是在一个现代多核服务器处理器上,其中所有其他核心处于空闲状态,而且它是裸机,而不是虚拟化.
关于我可能做错什么/做什么以提高性能的任何想法?
更新:感谢James Chong的建议,我尝试用read()“交换”mmap(),速度仍然相同.所以似乎mmap()不是问题(或者mmap()和read()共享一个潜在的问题)
更新2:认为在bzDecompressInit / bzDecompressEnd中完成的malloc / free调用可能是原因,我将bz_stream结构的bzalloc / bzfree设置为自定义实现,该实现仅在第一次分配内存并且不释放它,除非标志是set(由opaque参数= strm.opaque传递).它工作得非常好,但速度并没有增加.
更新3:我现在也试过fread()而不是read(),但速度仍然保持不变.还尝试了不同数量的读取字节和解压缩数据缓冲区大小 – 没有变化.
更新4:读取速度绝对不是问题,因为我已经能够使用mmap()在顺序读取中实现接近约120MB / s的速度.
以上是大佬教程为你收集整理的C BZ2_bz解压缩比bzip2命令慢全部内容,希望文章能够帮你解决C BZ2_bz解压缩比bzip2命令慢所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。