2011-11-18 42 views
5

首先,要清楚,我知道C++中存在大量的MD5實現。這裏的問題是我想知道是否比其他實現更快。由於我在尺寸大於10GB的文件上使用了這種MD5哈希函數,所以速度的確是這裏的一個主要問題。在C++中快速實現MD5

+11

你有這些超現代,比SSD更快的驅動器,不是嗎? – avakar

+0

This [question](http://stackoverflow.com/questions/2717216/what-hash-algorithms-are-parallelizable-optimizing-the-hashing-of-large-files-u)可能會有所幫助。我會建議你可以並行化的東西,但我想這取決於你的數據如何存儲。 – Vlad

+0

@avakar:如果數據被複制,如果系統允許的話,通過並行運行不同副本來加快計算速度至少應該是合理的。 – Vlad

回答

9

我認爲這一點avakar是想說明的是:用現代的處理能力的IO速度您的硬盤驅動器不是散列計算的瓶頸。獲得更高效的算法不會對您有所幫助,因爲這不是最可能的最慢點。

如果你正在做任何特殊的事情(例如1000輪),那麼它可能會不同,但如果你只是計算一個文件的散列。你需要加快你的IO,而不是你的數學。

2

我確信有很多CUDA/OpenCL適應算法在那裏應該給你一個確定的加速。你也可以採用基本的算法並思考一下 - > CUDA/OpenCL的實現。

塊密碼是這種類型實現的最佳人選。

你也可以得到它的C實現並獲取英特爾C編譯器的副本,看看它有多好。英特爾CPU中的矢量化擴展對於提升速度來說是驚人的。

3

我不認爲這很重要(在同一個硬件上;但實際上GPGPU-s對於這類問題是不同的,也許速度更快)。 md5的主要部分是一個非常複雜的複雜算術運算循環。重要的是編譯器優化的質量。

還有一點重要的是你如何閱讀文件。在Linux上,mmapmadvisereadahead可能是相關的。磁盤速度可能是瓶頸(如果可以,請使用SSD)。

你確定你想要md5嗎?有更簡單和更快的散列編碼算法(md4等)。儘管如此,你的問題比受CPU限制的更多的I/O限制。