美文网首页
简析duff device

简析duff device

作者: Joe_HUST | 来源:发表于2017-05-27 16:35 被阅读0次

达夫设备是一个很棒的迂回循环展开法,是由Tom Duff在Lucasfilm时所设计的。它的传统的形态是用来复制多个字节的:
register n = (count + 7) / 8; /* count > 0 assumed */ switch (count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while (--n > 0); }
咋一看,XXX这是什么东西,怎么这么乱,看不懂。这代码的也太难懂了,好吧,既然他这么有名,咱们还是勉强看一看吧。
   先看一遍解释:代码的本意是将count个字节从from指向的数组复制到to指向的内存地址(这是个内存映射的输出寄存器,这也是为什么它没有被增加)。他把switch语句和复制八个字节的循环交织在一起,从而解决了剩余字节的处理问题(当count不是8的整数倍时).

既然是复制那么我们就来写一个复制的程序:

来看一下这个程序的耗时:


然后我们使用上面的duff device来改写这个程序。如下:

可是这个程序并不能正常的运行,只有第一个位置a[0]的值变成了B剩下所有的仍然是A,这是怎么回事,难道是程序错了????好吧,暂且以我们180的智商认为是程序错了,再看一眼程序,为什么*to = *from ++ 中*to的位置永远不变,那不是每一次都是复制给a[0]这个位置了么,这怎么行?好,咱们来改一改。

运行结果没问题。咱们来看一下运行时间。

还真是提速不少,再来看看速度这么快是不是所有的内容都复制到了, ,没有缺斤少两,确实是100000个字符。

这么看来duff device确实能够增快循环的运行速度,再回头理解一下代码的本意是将count个字节从from指向的数组复制到to指向的内存地址(这是个内存映射的输出寄存器,这也是为什么它没有被增加)。这段话的意思,为什么之前to指向的是一个固定的位置????
找了一圈duff device相关的资料也没有找到这段话的解释,那我们就先来了解一下 "内存映射的输出寄存" 是个什么东西。"映射设备寄存器到内存"找到这么一篇博客,那么我猜就不是那个源程序有问题,to指向的地址应该是一个设备寄存器的地址,那么它的地址就是固定不变的了,循环的往这个寄存器的这个地址中写入数据。

稍后再来理解duff device的原理,看看他是怎么实现加速的。

相关文章

  • 简析duff device

    达夫设备是一个很棒的迂回循环展开法,是由Tom Duff在Lucasfilm时所设计的。它的传统的形态是用来复制多...

  • 笨办法学C 练习23:认识达夫设备

    练习23:认识达夫设备 原文:Exercise 23: Meet Duff's Device 译者:飞龙 这个练习...

  • Duff's Device

    所谓的Duff's Device其实只是一种代码的特殊写法,他将switch和do...while结合起来使得算法...

  • Duff's device是什么

    2020-4-14今天,我在知乎上面看到一个很有意思的回答,在这里附上链接哪段代码最能代表程序员的暴力美学其中,一...

  • 达夫设备(Duff`s Device)减少迭代次数

    "Duff`s Device"是一个循环体展开技术, 它使得一次迭代中实际执行了多次迭代的操作. Jeff Gre...

  • 达夫设备(Duff's device)

    若干年前在校园招聘的时候,做到了这样一道笔试题, 当时一头雾水,并没有做出来: 问题: 下面这段代码的作用是什么?...

  • mybatis-spring解析

    1、概述 原生Mybatis源码简析(上)原生Mybatis源码简析(下)在介绍原生Mybatis源码简析文章中,...

  • 简析 Swift 的模块系统

    简析 Swift 的模块系统 简析 Swift 的模块系统

  • The Duff

    偶然间,看到了这部电影,无聊的情况下看完了,谢影评,我应是无能为力的。哈哈,但是若说感悟,多多少少还是有的,女主因...

  • DUFF

    感觉还算是可以的电影。 duff是指用来衬托朋友的美丽抑或帅气的那颗绿叶。 主角的选择是挺适中的,刚出场时成功用一...

网友评论

      本文标题:简析duff device

      本文链接:https://www.haomeiwen.com/subject/ehsqfxtx.html