在C ++中快速实现MD5

时间:2011-11-18 21:37:48

标签: c++ algorithm hash md5

首先,要清楚,我知道C ++中存在大量的MD5实现。这里的问题是我想知道是否有比较哪个实现比其他实现更快。由于我在大小超过10GB的文件上使用这个MD5哈希函数,因此速度确实是一个主要问题。

4 个答案:

答案 0 :(得分:8)

我认为avakar试图做的一点是:凭借现代处理能力,硬盘的IO速度是瓶颈,而不是哈希的计算。获得更有效的算法对你没有帮助,因为它不是(可能)最慢的点。

如果您正在做任何特殊的事情(例如1000轮)那么它可能会有所不同,但如果您只是计算文件的哈希值。你需要加速你的IO,而不是你的数学。

答案 1 :(得分:3)

我认为这并不重要(在相同的硬件上;但实际上GPGPU-s对于那种问题是不同的,也许是更快的硬件)。 md5的主要部分是一个非常复杂的复杂算术运算循环。重要的是编译器优化的质量。

同样重要的是你如何阅读文件。在Linux上,mmapmadvise以及readahead可能相关。磁盘速度可能是瓶颈(如果可以,请使用SSD)。

你确定要特别想要md5吗?有更简单和更快速的哈希编码算法(md4等)。仍然你的问题是I / O绑定比CPU绑定更多。

答案 2 :(得分:2)

我确信有很多CUDA / OpenCL适应算法可以给你一个明确的加速。您也可以采用基本算法并思考一下 - >得到一个CUDA / OpenCL实现。

分组密码是此类实现的理想选择。

您还可以获得它的C实现并获取英特尔C编译器的副本,看看它有多好。英特尔CPU中的矢量化扩展对于速度提升而言是惊人的。

答案 3 :(得分:1)

表格可在此处获取:

http://www.golubev.com/gpuest.htm

看起来可能你的瓶颈将是你的硬盘IO