AlphaDev将排序算法提速70%!C语言库作者一文详解DeepMind最新AI 全球微动态
几天前,DeepMind推出了AlphaDev,直接把排序算法提速70%。
(资料图片)
这一全新AI系统,便是基于下棋高手AlphaGo打造。
而这项研究恰恰激起了前谷歌研究人员Justine Tunney的兴趣。
她表示,作为一名C语言库的作者,我一直在寻找机会来策划最好的东西。
一起看看Justine如何详解DeepMind排序算法。
DeepMind排序算法DeepMind的这一发现赢得了当之无愧的关注,但不幸的是,他们本可以更好地解释AlphaDev。
接下来,从DeepMind发布的汇编代码开始,该代码将一个有三个项目的数组进行排序,从伪汇编翻译成汇编:
我将这个函数命名为 move37() ,是因为DeepMind的博客文章,将其与AlphaGo下的令人震惊的「第37步」进行了比较。
在2016那场人机大战中,AlphaGo下了一颗违反人类直觉的棋,一个简单的肩冲,击败了传奇围棋选手李世石。
所以如果运行DeepMind代码:
但是,在我看来这是一个错误。
我们给它的数组是{3,1,2},但 move37() 将其排序为{2,1,3}。
DeepMind一定在欺骗我们,因为我不相信2在1之前。再来看看他们对LLVM libcxx所做的开源贡献,这有望澄清一些事情:
所以 move37() 实际上不是一个排序函数,而是一个排序内核,旨在用作 sort3() 函数的构建块。
如果论文和博客文章能提到这一点就好了,因为它让我在最短的时间内感到非常困惑。下面是更好的代码版本,其中包括缺失的交换(swap)操作。
为了解释为什么他们的代码很重要,让我们考虑一下这个算法在高层次上是如何工作的。当我第一次尝试自己解决 sort3() 问题时,我想到了这个:
然后我查看了libcxx,发现它们也在做同样的事情。上述代码的问题是,编译器并不善于优化它。
如果你尝试编译上面的代码,就会注意到你的编译器插入了大量的分支指令。这就是DeepMind试图通过LLVM贡献来改进的地方。
然而,这些技术往往不太容易理解。
我实际上喜欢天真无邪的代码,因为如果我们眯起眼睛,可以看到一种模式,与DeepMind最先进的汇编代码有相同的基本想法。
这个想法是这个问题本质上归结为3个比较和交换操作:
上面的代码是之前排序网络的最先进技术。现在,这就是DeepMind的新发现发挥作用的地方。他们发现有时上面的 mov 指令是不必要的。
如果你试着运行上面的代码,你会发现不管有没有被删除的行,它都是100%正确的。
这行代码看起来像是在做什么,但实际上什么也没做。所以我并不惊讶这样的事情会被计算机科学忽视几十年。
现在也应该更清楚AlphaDev是如何工作的。
DeepMind基本上构建了一个人工智能,它可以摆弄汇编代码,随机删除一些东西,看看它是否损坏。
我这么说并不是要否定AlphaDev的智能,因为如果我说我没有做同样的事情,那就是在撒谎。
上面的代码中还有两个 mov 指令,我们有可能将其删除。通过使用ARM64指令集来做到这一点,它可以为类似的问题提供更小的代码。
在这里,我们不需要任何指令来创建临时变量:
Arm公司最近风头正劲,我想上面的例子可以作为他们赢得名声的证据。
Arm也是目前开源领域最好的公司之一。比如,他们的MbedTLS库是我迄今为止见过的最被低估的瑰宝之一。
当我开始使用它时,我原本有这样的计划,即修改Arm的代码,使之在x86硬件上更好地工作。
我编写了所有这些精心设计的汇编优化,使其与x86上的OpenSSL达到相同的性能。
MbedTLS是简单、可移植、可破除的C代码,因此对于任何想要一个不是Perl生成的汇编的加密库的人来说,是个好消息。
我告诉了Arm公司的人我在做什么,他们并没有觉得这是颠覆性的。
我希望有一天能找到时间做DeepMind做的事情,并在上游进行修改。Arm公司的优化程序库也是多产的,它在质量上与双转换无懈可击。
它对C库对此特别感兴趣,因为几十年来,开源社区一直依靠Sun Microsystems在90年代初编写的数学函数来维持生计。
Arm找到了一种改进其中几个函数的方法,例如 pow(x,y) 。考虑到这是数学中最基本的运算之一,这是一件非常有影响力的事情。
比如,如果你在纯软件中使用Arm的解决方案在x86机器上实现 pow(x,y) ,那么它将比英特尔的原生x87指令快5倍。
很幸运,DeepMind也加入了这个游戏,所以我冒昧地把他们的libcxx diff翻译成可读的C代码。
这是我希望在论文和博客文章中看到的另一件事,因为在这段代码中,你会发现专家们用来让编译器生成无分支 MOVcc 指令的规范技巧。
当我看到 Sort5() 函数,我觉得自己对DeepMind研究的动机有了更好的理解。
如果你在ARM64上编译 Sort5() 函数,那么编译器将产生一个处理11个寄存器的函数。如果你在推理一个数学方程,那么你能一次在你的工作记忆中保存11个变量吗?
可能不会。这就是为什么有一个像 PartialSort3 这样优秀的内核函数如此有用的原因。
值得一提的是, Sort3() 和 Sort5() 本身就是内核,因为它们旨在成为传统排序功能的构建块。
博客文章涵盖了这个主题,但我认为分享一些实际上可移植和可执行的东西会很有用。
The above algorithm shows what the new and improved libcxx is doing. It"s basically quicksort except it switches to the sorting kernels and insertion sort when recursing into smaller slices. With libcxx I think they even took the added step of schlepping in heapsort, which is kind of slow, but prevents adversaries from smashing your stack. 上面的算法显示了新的和改进的libcxx正在做什么。它基本上是快速排序,除了在递归到更小的切片时切换到排序内核和插入排序。对于libcxx,我认为他们甚至采取了在堆排序中移动的额外步骤,这有点慢,但可以防止对手破坏您的堆栈。
The main thing you may be wondering at this point is, can I use this? Do these sorting network kernels actually make sorting go faster? I would say yes and no. When all you want is to sort ascending longs, the code above will go 2x faster than the standard qsort() function provided by your C library. Except you don"t need the kernels to do that. What I"ve determined so far is that, on my personal computer (which has an Intel Core i9-12900KS) the above function sorts longs at 255 megabytes per second. However if I comment out the sorting kernels: 在这一点上,你可能想知道的主要事情是,我可以使用这个吗?这些排序网络内核真的能让排序变得更快吗?我会说是和不是。当你只想对升序长进行排序时,上面的代码将比你的C库提供的标准 qsort() 函数快2倍。只是你不需要内核来做到这一点。到目前为止,我已经确定,在我的个人电脑上(它有一个英特尔酷睿i9-12900KS),上面的函数以每秒255兆字节的速度排序。但是如果我注释掉排序内核:
然后我的 longsort() 函数以每秒275兆字节的速度运行,通过简化算法实现了7%的性能提升。
long 的好处是它足够长,可以存储 int 键值对,能够快速对地图条目进行排序是一个有用的技巧。
上面的函数编译后只有181字节的x86-64机器代码。
由于DeepMind的 sort3() 只有42字节,我希望可以交换一些大小以获得性能优势。
因为到目前为止,我发现的下一个最佳算法是改用基数排序,速度为400 MB/s,但除了依赖于 malloc() 之外,还需要高达763字节的二进制占用空间。因此,如果能看到这些内核做得更好就好了。
这并不是说DeepMind的想法没有价值。
我认为值得注意的是,DeepMind非常慷慨,去年给了我们他们的矢量化快速排序库(当时他们被称为Google Brain),并通过这样做实现了永远无法挑战的排序优势。
Vqsor在我的电脑上以1155 MB/s的速度对长时间进行排序。
它甚至略微优于djbsor,后者是开源社区中最受欢迎的库之一,尽管它从未推广到比 int 更多的数据类型。
这两种实现实现的方式都是通过矢量化排序网络。我认为这就是排序网络技术真正闪耀的地方。
我想,如果就智能实体而言,AlphaDev不是一个蹒跚学步的孩子,它就会这样做。
当你从基本原则开始时,仅基线指令集就非常难以支持。如果我们等待,那么我认为我们可以期待在未来看到AlphaDev的伟大成就,因为它正在努力应对更强大的挑战。
我也很喜欢DeepMind让算法变得更小的事实,因为这是我不常看到的。
大小编码是我最喜欢的爱好之一。在这个博客上,我发布了一个383字节的lambda演算虚拟机和一个436字节的带有垃圾回收机制的lisp机。
我还在博客上介绍了我在cosmpolitan c库中使用的大小优化技巧。
我也喜欢DeepMind的母公司,因为几周前Google给我颁发了开源同行奖金,很高兴看到他们分享我使软件变小的热情。
很高兴看到他们用它来改进矢量化快速排序。
最后,我喜欢人工智能公司用机器语言编写代码的机器的想法。他们为什么不呢?机器的本质就是机器。
作为一个建设者,我发现这比OpenAI正在创造的未来要少得多。
他们已经建立了一个巨大的家长式机器,在零和经济中与地球上的每个建设者竞争,然后诱使世界上的寻租者通过政府监管来控制这台机器。
我不认为OpenAI承诺将所有我最喜欢做的任务(如编码)自动化是一种进步。我想要的是能够控制一台机器,这台机器能够完成我自己无法完成的事情,比如发现排序内核。这才是真正的进步。
我认为,我们能够砍掉的每一条装配线都是朝着这个梦想的积极方向迈出的一步。
标签:
百科词典 哪些场所要设置自动喷水灭火系统
2023-01-23
智库知识 人在什么时候记忆力最好
2023-01-23
百科问答 卤素灯疝气灯和led灯的区别
2023-01-23
知识课堂 蝗虫养殖技术和养殖的最佳时间
2023-01-23
字词小课堂 上海哪些地方可以用OK卡
2023-01-23
网络百科全书 雪糕制作方法
2023-01-23
知识百科 中国第一艘航空母舰叫什么名字
2023-01-23
百科知识 什么小说主角是用冰的越多越好
2023-01-23
进入了发展快车道 冷链行业市场规模正在快速膨胀
2022-03-21
行业正站在风口 数字化时代在为传统的自行车产业赋能
2022-03-21
智库知识 人在什么时候记忆力最好
百科问答 卤素灯疝气灯和led灯的区别
知识课堂 蝗虫养殖技术和养殖的最佳时间
字词小课堂 上海哪些地方可以用OK卡
网络百科全书 雪糕制作方法
知识百科 中国第一艘航空母舰叫什么名字
百科知识 什么小说主角是用冰的越多越好
迎新年、开新局,平安人寿2023年职业发展开年论坛助力青年才俊把握市场先机
进入了发展快车道 冷链行业市场规模正在快速膨胀
行业正站在风口 数字化时代在为传统的自行车产业赋能
以做强实体经济支撑为重点 成都单个项目年度计划投资同比提升
拥有多个国际赛事的直播版权 广州游戏电竞企业业绩向好
投诉量激增 直播带货存在这么多问题的主要原因是什么?
工作专班深入到各企业 春寒料峭挡不住松原市施工热情
引导企业向提供“产品+服务”转变 湖南加快智能农机服务化转型
创新平台建设和科技成果转化 德州加大力度重奖创新
潜在风险进一步放大 商品房现房销售已是大势所趋
有序复工复产 1—2月份工业经济发展新动能持续增强
多层次高频调度 1至2月河北省工业运行先行指标稳中有增
以车路协同为基础 智能交通推动城市交通绿色高质量发展
人才短板成为制约产业链高质量发展的关键节点
通过技术手段整合调配供给资源 家政行业不断提质扩容
强化产业链深层次合作 加强重大装备国产化“一条龙”模式构建
如何进一步提升纳税人缴费人的减税降费获得感?
探索建设大数据及网络安全示范试点城市有哪些积极意义?
对制造业中小微企业实施缓缴税费政策有哪些积极意义?
进一步增强自我保护意识 消费者需注意辨别谨慎消费
将“走出去”变“请进来” 西安贸易产业转移承接作用不断得到增强
厦门应如何融入“数字中国”的重大战略发展大局?
- AlphaDev将排序算法提速70%!C语言库作者一文详解DeepMind最新AI 全球微动态
- 死神千年血战第二季开播在即,织姬遇上乱菊,谁才是你的梦中情人
- 天天观天下!去年上海销毁300余吨侵权假冒商品,货值金额近5000万元
- 全球速讯:蓉港直达高铁开通在即 “动妹儿”将穿巴蜀特色制服并培训基本粤语技能
- 每日视点!杭州市余杭区气象台发布暴雨黄色预警【Ⅲ级/较重】【2023-06-20】
- 当前消息!又一家美国造车新势力计划来华,首个交付中心落户上海
- 微头条丨民航局:订座数据显示 今年暑期旺季较2019年有明显增长
- 跑步可以减肥么_跑步可以减肥
- 中油资本:在人民币国际化进程中,积极推动跨境人民币结算_天天快看
- 《全球发展倡议落实进展报告》正式发布|全球速讯
- 江苏省如何不断满足老人日益增长的养老服务需求?
- 建设一体化的职业健康信息管理平台 天津职业人群保障加强
- 潜力持续释放 1—2月乡村消费品市场恢复略好于城镇
- 直接对接社会化服务 楼宇调解室将整体提升青岛劳动争议水平
- 成功化解纠纷11.47万件 银保监会服务质量日趋提高
- 春雷响百虫出 惊蛰文化在其他方面有了进一步发展
- 青绿山水画在古代山水画发展史上有着怎样的影响与地位?
- 开播即爆款 “文化类节目收视率低”这一固有印象被推翻
- 涵盖了109件真迹作品 凯斯·哈林展览将持续至6月13日
- 带有一点自信的自嘲 “隔路”是另一种味道的“凡尔赛”
- 与文渊阁前后呼应 “何以中国”特展隆重致敬文化大成
- 严重者可造成暂时性失明 享受冰雪运动要注意眼睛的健康防护
- 种类繁多让人眼花缭乱 选购牛奶时需要重点关注什么?
- 网课让孩子感到不安焦虑怎么办?八问八答回应广大家长关切
- 循环系统很容易受到刺激 “倒春寒”期间老人该如何做?
- 青少年患者睡眠问题日趋增加 9条建议为孩子助眠
- 我国肥胖人群正逐年递增 不良饮食习惯是重要诱因
- 如何减少噪声对听力的损伤?这份耳部和听力保健小贴士请收好
- 强化住房限购措施 西安限购限售范围进一步扩大
- 多种方式增加供给 进一步降低新市民和青年人的居住成本
- 预计9月下旬海口可实现安居房申请网上办理
- 政策调控力度持续升级 8月百城二手房市场均价止涨转跌
- 8月中国新房找房热度依然保持平稳 环比微涨0.2%
- 进一步加强商品房销售价格备案管理 今年全国楼市调控刷新历史纪录
- 西安第二批集中供地中28宗为现场拍卖方式出让
- 细分化需求得到释放 房屋居住的属性越发凸显
- 佛山顺德龙江近日挂牌商住地起拍价约19.88亿元
- 青岛市4宗地竞品质抽签结果出炉 地溢价均约15%
- 坚持政策支持、多方参与 浙江版保障性租赁住房明确新增比例目标
- 简化审批流程 武汉将实现房源申请配租全程网上办
- 哈尔滨新增本土确诊病例3例 活动轨迹公布
- 哈尔滨市公布3例新增本土新冠肺炎确诊病例活动轨迹
- 山东深耕文化资源 推动旅游业高质量发展
- 今年新增952件(套)!南京大屠杀再添新证
- 四川非遗传承人张雄志:巧手捏面塑 指尖传非遗
- 10月以来我国寒潮为何如此频繁?中国气象局回应
- 56位残疾人士登上黄山 互利互勉共建生活希望
- 安徽潜山两车相撞 已致8人死亡3人受伤
- 上海洋山海关首次在出口货运渠道查获夹带卷烟
- 山西忻州古城:一城风华延续千年历史文脉
- 呼伦贝尔新巴尔虎右旗公布1例无症状感染者行动轨迹
- 新增“53+1” 内蒙古累计本土确诊病例增至185例
- 昆明公安打击破坏生物多样性犯罪 抓获130名涉案嫌疑人
- 山西朔州“11·11”较大透水事故调查报告发布 对38人问责处理
- “海关国门小卫士”竞争上岗 淘汰率接近一半
- 深圳摧毁特大品牌化妆品走私网
- 28人被问责!山西石港煤业“3·25”事故调查报告公布
- 湖南韶山以河长制带动全民治水 让每一处水面“长治久清”
- 上海市奉贤区人大常委会原党组书记袁晓林被“双开”
- 民进会员谈反映社情民意信息工作:心怀大我 敢讲实情