【问题标题】:Fast implementation of MD5 in C++C++中MD5的快速实现
【发布时间】:2012-01-01 15:12:41
【问题描述】:

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

【问题讨论】:

  • 您拥有这些超现代、比 SSD 更快的驱动器,不是吗?
  • 这个question 可能会有所帮助。我本来打算建议一些你可以并行化的东西,但我想这取决于你的数据是如何存储的。
  • @avakar:如果数据被复制,如果系统允许的话,至少应该可以通过在不同的副本上并行运行来加速计算。
  • @avakar:非常好的观点!我应该检查一下我的 I/O 瓶颈 :)
  • 我去看看md5破解程序...

标签: c++ algorithm hash md5


【解决方案1】:

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

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

【讨论】:

  • 这不是答案。他没有提到任何关于建筑的事情。据您所知,这些文件可能存在于 RAMdisk 中。
  • ... 或者只是在磁盘缓存中。我查找了这个线程,因为我发现我正在查看的应用程序中使用的 MD5 实现由于许多小文件的散列而减慢了启动速度。
【解决方案2】:

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

同样重要的是您阅读文件的方式。在 Linux 上,mmap 和 madvise 和 readahead 可能是相关的。磁盘速度可能是瓶颈(如果可以,请使用 SSD)。

您确定要专门使用 md5 吗?有更简单更快的哈希编码算法(md4等)。你的问题仍然是更多的 I/O 限制而不是 CPU 限制。

【讨论】:

    【解决方案3】:

    我敢肯定,该算法有很多 CUDA/OpenCL 改编版本,它们应该会给你一个明确的加速。您还可以采用基本算法并思考一下 -> 开始执行 CUDA/OpenCL。

    分组密码是此类实施的完美候选者。

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

    【讨论】:

      【解决方案4】:

      这里有表格:

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

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

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2017-02-18
        • 1970-01-01
        • 2014-09-23
        • 1970-01-01
        • 2011-09-29
        • 2015-07-08
        • 1970-01-01
        相关资源
        最近更新 更多