【问题标题】:Can md5 be broken up to run across multiple cores/threads?可以分解 md5 以跨多个内核/线程运行吗?
【发布时间】:2012-05-30 09:04:25
【问题描述】:

在计算大文件的 md5 和时,我看到一个 cpu 核心无论花费多长时间都会跳到 100%,而其他所有核心都处于空闲状态。

我对 md5 的初步理解是整个过程是完全线性的,其中的值依赖于之前读取的所有值,我们无法使其成为多线程。这是真的吗?

或者有没有办法将文件分成多个部分,使用多核计算多个部分的 ,然后将这些 值组合成最后的md5?

我们用来计算 md5sum 的库是 http://libmd5-rfc.sourceforge.net/,但如果可以跨多个内核打破 md5sum 以便更快地完成,我会切换到另一个库。

(注意:改成md5以外的东西不是问题,也不是因为这个接口的其他封闭系统,这个问题也不是关于使用md5的安全问题。)

【问题讨论】:

  • 你是用谷歌搜索的吗? “并行实现 MD5”的第一个命中是:wwwcip.cs.fau.de/~spjsschl/md5.pdf,这似乎表明简短的回答是“是的,它可以。”
  • 您的“笔记”+1。尽管您知道这些问题这一事实意味着您或许应该考虑对它们采取一些措施......
  • @JerryCoffin 我认为那篇文章有点误导。我收集到他们正在并行化 MD5 的多次迭代以进行密码散列,而不是并行化 MD5 算法本身。他们的另一个优化是使用一个大的 128 位 SSE 寄存器而不是 4 个 32 位寄存器。
  • 阅读那篇论文,基本上他们没有对单个输入上的多线程 MD5 计算做任何事情。他们的多线程仅用于同时计算多个 MD5 哈希,这仅对操作员有多个要哈希的大文件有用。他们在第 3.2 节中对其进行了总结:“由于 MD5 迭代的每一步之间存在不可移除的数据依赖关系,因此无法加快单次迭代的运行时间”
  • 流水线也是并行化。 MD5 运行 64 轮,这些轮可以流水线化。这就是他们所做的。

标签: c md5


【解决方案1】:

不,您不能在文件级别将其拆分。 MD5 在遍历数据时保持一个状态。

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 2017-05-13
    • 2016-05-08
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2011-06-19
    • 2014-09-17
    相关资源
    最近更新 更多