C++中快速实现MD5算法

6

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


11
你们有这些超现代的、比SSD更快的驱动器,是吗? - avakar
如果数据被复制,如果系统允许,至少可以通过在不同的副本上并行运行来加速计算。 - Vlad
1
@avakar:非常好的观点!我应该检查一下我的I/O瓶颈 :) - derekhh
1
我会看一下MD5破解程序... - PlasmaHH
@avakar:好的RAID去哪了? - Kerrek SB
显示剩余2条评论
4个回答

7
我认为 avakar 要表达的观点是:随着现代处理能力的提高,硬盘的IO速度成为瓶颈而非哈希计算。更高效的算法并不能提升速度,因为这很可能不是最慢的点。
如果你在进行一些特殊操作(例如1000轮加密),情况可能会有所不同,但如果你只是计算一个文件的哈希值,你需要加快IO速度,而不是数学计算速度。

3
这不是一个回答。他没有提及任何有关架构的信息。据你所知,这些文件可能存在于RAM磁盘中。 - BrandonL
1
...或者仅仅在磁盘缓存中。我查看了这个线程,因为我发现应用程序中使用的MD5实现由于对许多小文件进行哈希而导致启动变慢。 - asu

3
我认为这并不重要(在相同的硬件上;但确实GPGPU是不同的,也许更快,适用于那种问题)。MD5的主要部分是复杂算术运算的复杂循环。真正重要的是编译器优化的质量。
还有一个重要的问题是如何读取文件。在Linux上,mmap、madvise和readahead可能是相关的。磁盘速度可能是瓶颈(如果可以的话,请使用SSD)。
而且,您确定要特别使用MD5吗?还有更简单和更快的哈希编码算法(MD4等)。但是,您的问题更多的是I/O绑定而不是CPU绑定。

2
我相信有许多CUDA / OpenCL算法的适应性,这应该会给您带来明显的加速。 您还可以采用基本算法并思考一下 -> 开始进行CUDA / OpenCL实现。
块密码是此类型实现的完美候选者。
您也可以获得其C实现,然后获取Intel C编译器的副本,并查看其效果如何。 Intel CPU中的向量化扩展对于提高速度非常惊人。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接