花了两个礼拜把sha1,sha256用opencl实现。算是个调研性质的工作。

首先,还是谈谈我对opencl的看法,opencl是显卡/GPU对计算提供的一套标准接口。

优势一:在显卡中有并行计算单元类似与多核心的cpu但他的并行度很高,一块好的显卡可以提供上千个并行计算单元,在矩阵计算等一些可并行执行的逻辑时提高计算速度很明显。

优势二:浮点计算,显卡本身就是用于图像处理浮点乘除,不再赘述。

缺点:cpu使用的内存与显卡内存没有直接映射关系,必然存在内存拷贝的开销。计算可能会得不偿失。

再谈谈sha1,sha256算法,这两个算法比较接近,原理可见wiki,但这两个算法逻辑上都是不能并行,下一步的计算需要上一步计算的结果,opencl的并行计算的优势不能发挥出来。

sha1,sha256的opencl实现源码sha.tar.gz

source