在设计和选择流密码时,每个字节的周期似乎是一个关键问题。例如,从维基百科来看,RC4在原始奔腾芯片上有7个周期/字节。
这是怎么计算出来的?它们是否只是对多兆字节的加密进行计时,然后除以CPU的时钟速度?他们是否在某个表中查看汇编代码和每条指令的查找周期、流水线计算、分支预测等?
发布于 2012-10-02 22:08:41
通过查看程序集来预测速度是很困难的,特别是因为处理器做了各种有内存的技巧(例如分支预测)。所以是的,这都是关于测量的。
这是一门艺术;例如,您宁愿重复加密相同的相对较小的缓冲区(4或8 kB),以避免缓存效果。一种方法是多次重复加密,以消除外部活动引起的诸如IRQ这样的随机效应(例如,调整循环计数,使运行时间至少为5秒)。二是利用循环计数器平台进行精确测量。无论哪种方式,您都需要做一些“热身”,以确保代码都在L1缓存中,并且分支预测已经达到永久状态;这在为需要JIT编译的虚拟机(例如Java或.NET实现)对实现进行基准测试时尤为重要。
有关如何使用“重复处理”方法处理散列函数的示例,请参见斯皮利卜。eBACS是一项巨大的基准测试工作,它更喜欢使用循环计数器。
发布于 2012-10-02 22:03:30
他们测量它。
很久以前,CPU非常简单,您可以通过查找手册中每条指令的时钟来计算一段代码的时间量,并将它们全部加在一起,这就是总时间。
然而,CPU制造商增加了越来越多的优化和并行性;这使得CPU运行得更快(例如,使用内存缓存、在管道中执行指令、无序执行指令),然而,对于某个人来说,查看某些代码并生成估计值变得越来越困难。
因此,与其试图处理复杂性,我们只是测量它。
https://crypto.stackexchange.com/questions/3943
复制相似问题