论文部分内容阅读
本文着重研究如何使用基于GPU的并行化技术,尤其是基于OpenCL的并行化技术,对分组密码算法中的AES以及KLEIN两个算法进行并行化优化。与以往的并行化实现方式相比,基于GPU的并行化技术具有方便、灵活、可移植性强、易于维护,性价比高等特点。然而,在利用GPU进行并行化实现的时候,选择何种并行模式,采用何种并行计算粒度,如何合理利用不同类型的内存以及采用何种调度策略能使算法性能最优化,这些都是至关重要的问题。 针对这些问题,Iwai[1]等人通过实验,从并行粒度,内存分配策略两方面总结出了使用CUDA技术对AES进行并行实现时的最佳方案。而刘伯仲[2]等人则通过理论推导与实验相结合,对管道延迟隐藏技术进行了深入的研究,得出了在使用GPU进行并行化实验时的最佳分块和调度策略。 那么,Iwai等人提出的方案是否在使用OpenCL技术进行并行化实现时同样适用?我们能否相似地得出在使用OpenCL技术对AES进行并行化实现时的最佳方案?如何对bitslicing化后的KLEIN进行并行化优化?这些都是本文要着重解决的问题。本文的主要工作及研究成果如下: 首先,在AES的优化方面,本文采用了Iwai等人的研究和实验方法,对使用OpenCL技术在AMD GPU上进行AES并行化实现时的各种并行粒度及内存分配方案进行了讨论和试验,提出了在使用OpenCL技术对AES进行并行化时的最佳实现方案。实验结果显示,在4 Bytes/Thread、8 Bytes/Thread、16Bytes/Thread三种并行粒度中,16 Bytes/Thread时由于不需要同步,拥有更好的性能。而在16Bytes/Thread的并行粒度下,在各种的内存分配策略中,将明/密文(及加/解密过程中用到的临时变量)放在私有内存中,而将轮密钥放在常量内存中,得到的性能最好。在该策略下,当输入数据大小为128 MB时,使用AMDHD7670m能达到的吞吐率约为5Gbps,该结果与以往工作相比具有较高的性价比。 其次,在Bitslicing-KLEIN的优化方面,本文针对原有的KLEIN算法的bitslicing实现所存在的缺陷,通过引入重排的机制,使bitslicing的并行特性能有效地发挥出来,从而改进了其实现。在此基础上,本文采用了刘伯仲等人提出的模型,合理地选择了分块大小和调度策略,对改进后的Bitslicing-KLEIN进行了并行化实现,从而使算法的性能得到了进一步的提高。实验结果显示,在处理数据均为10MB时,最终优化后的版本性能较原先的KLEIN的性能提升了约9.8倍,与原版的Bitslicing-KLEIN相比提升了292倍。