这个过程跟一般的native PGO优化一样,都是要运行多次,依赖training run收集到的profile来引导后续运行的优化。 在这种模式下运行的RyuJIT就可以做到类似本文开头所说的优化——但Visual C++的编译器同样支持PGO,同样可以做这种优化(而且可能做得更好)。 相信未来的.NET Native在逐渐成熟起来之后也会考虑支持PGO。
而眼尖的朋友可能會注意到椅墊造型相當扁平,造就只有740mm超低座高。 对于汽车爱好者来说,汽车能产生一种真正的诱惑力。 作为法国唯一的小型汽车生产商,PGOAutomobles决定将这种诱惑力变得触手可及。
- 2011年Tigra彪虎125上市,是台灣首輛運用航太科技渦旋式冷卻技術(vortex cooling)水冷噴射機車,並榮獲第19屆台灣精品獎。
- 科技配備也是這次PGO在市場上丟下的震撼彈,首先是PBGN電動車中常見的NFC感應鑰匙竟然來到汽油車上頭成為標準配備,沒錯這次PGO SPRING使用的啟動方式可不是傳統鑰匙,而是改為卡片感應取代。
- 自适应动态编译的思路就是把这种多次运行才能得到的好处压缩在一次运行中完成:执行引擎自动在开始的时候生成收集profile的代码,然后自动收集profile,最后自动利用profile来做优化编译。
- CLR的执行引擎的模型是“纯编译的单层JIT编译器“。
- 这样就减少了程序启动时收集profile的开销,让程序快速达到稳定的高性能状态。
2012 SUPERMOTO8 超級摩托幫 正式成立, 我們除了愛車成痴,更想給所有人不一樣的資訊,一個具精采度‧迅速正確‧並且有品味的資訊平台。 8並不只是數字而是一個符號,一個毫無界線‧無極限,不停擴張散佈的意念。 另外儀表兩側也加上可自行設定的變色光導條提升科技感;隨著PGO SPRING推出,PGO也推出專屬APP讓你控制、查看車輛細節,還加上透過手機設定的儀表鎖增強安全性。 科技配備也是這次PGO在市場上丟下的震撼彈,首先是PBGN電動車中常見的NFC感應鑰匙竟然來到汽油車上頭成為標準配備,沒錯這次PGO SPRING使用的啟動方式可不是傳統鑰匙,而是改為卡片感應取代。
pgo原廠: 使用 PGO 的经验
Zing VM基于HotSpot VM开发,与HotSpot VM的执行模式相似,都是解释器+C1+C2的多层混合模式执行引擎,使用了自适应动态编译。 CLR的执行引擎的模型是“纯编译的单层JIT编译器“。 所有被执行的有MSIL方法体的方法,要么被NGen事先编译成机器码了(PreJIT),要么在方法第一次被调用前进行JIT编译到机器码;总之就是MSIL要编译成机器码之后才被执行。 下面具体说说在 MacOS 上进行 PGO 的一些方法和经验,不过核心知识可以迁移到其他平台,只要使用的编译器是 Clang 即可。 不但能通过profile信息来指导优化,还可以指导不做某些过于激进的优化,减少因过度优化而导致的“去优化”(deoptimization)。 这样也有利于程序快速达到稳定的性能水平,而不必在过度优化—去优化-再优化-再去优化-⋯的震荡多次后才达到稳定。
而PGO技术就是自适应编译,通过对程序增加探针进行profile,运行程序之后,再在下一次编译时根据profile结果进行结构的优化调整。 PGO是一个可以平均提高任何程序5%~8%性能的技术,全称是Profile Guided Optimization,它的思路其实很简单,就是编译器在对变量和函数如何放置排布和使用问题上,其实是有很大的自由权利的。 我们一直致力于提升PHP7的性能, 上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性能提升, 这个让我们很激动. 然而, PGO正如名字所说(Profile Guided Optimization 有兴趣的可以Google), 他需要用一些用例来获得反馈, 也就是说这个优化是需要和一个特定的场景绑定的.
pgo原廠: 工具
使用 GCC PGO 编译 PHP7.0 … 自适应动态编译的思路就是把这种多次运行才能得到的好处压缩在一次运行中完成:执行引擎自动在开始的时候生成收集profile的代码,然后自动收集profile,最后自动利用profile来做优化编译。 这样不但用起来方便,而且可以保证收集到的profile能够反映本次运行的特征。 Native PGO的多次运行模型非常依赖于training run的代表性,如果其特征与后来实际运行的特征不匹配,那PGO“优化”反而会带来性能损失。 这是JIT编译的一种特殊做法,虽然没有脱离JIT编译的范畴但增加了一个自由度。
能在程序运行一次的过程中就自动进行PGO当然是方便,但收集profile时总有额外开销,不一定适用于所有场景。 特别是,收集profile通常发生在程序启动阶段,也就是说启动时会比较慢;如果特别在意程序启动的速度的话,这种做法就不合适了。 Size/Speed Optimization – 根据profile信息,编译器可以找到常用的函数的使用情况,可以将常用的函数进行加速,不常用的函数的代码体积减少。 在 Mac 上,必须直接启动可执行文件,才能产生 profraw;若使用 open XXX.app 的方式,则没有 profraw 文件产生。 与之相对,自适应动态编译由于可以等程序执行了一段时间之后才做编译,所以有充分时间收集profile并利用profile来优化,经典例子就是收集分支跳转的次数,看taken分支还是not-taken分支的次数多。 这样才可以做到本文开头引用的那段文字所描述的优化。
除了应对建立、发展品牌时的种种出乎意料的挑战和冒险,对于我们来说,最重要是满足客户的期望。 高雅的气质和纤细精巧的设计是使我们的双座敞篷车和双门跑车独特又吸引人的两种必要品质。 车款既复古又现代,不仅拥有出众的尖端机械装置,还有着使用合成材料打造的流畅车身。 #注:目前clang并不支持内核的gcov优化,因此以上gcc的pgo和clang的lto两种优化方案你只能二选一。 这与CLR正常执行时的模型其实仍然一致:每个MSIL方法体仍然只有一次被编译的机会;所谓“重新JIT编译“编译的是新的MSIL方法体。 2008年5月PGO E-BUBU電動車與I’ME風格125雙重榮獲第16屆台灣精品獎,6月I’ME 風格125上市,並推出X-HOT 125。
从.NET 4.5开始,CLR支持一个新功能叫做ReJIT,用于支持managed profiler通过动态插桩(instrument)来收集性能数据(profile)。 动态插桩意味着修改某个已有方法的MSIL方法体,所以在修改过后需要重新JIT编译才可以执行,因而得名ReJIT。 注意ReJIT功能自身并不用于收集profile;收集profile的是CLR外部的managed profiler。 所以收集到的profile也无法供给CLR的JIT编译器使用。 在 Linux 内核上使用链接时优化并不是新概念,过去已有多家厂商发布了针对 Linux 内核的… 自适应动态编译(adaptive dynamic compilation)也是一种动态编译,但它通常执行的时机比JIT编译迟,先让程序“以某种形式”先运行起来,收集一些信息之后再做动态编译。
第3部分是PG优化部分,会将pgc文件合并成pgd文件,被Bakend编译器做决策时提供数据支持,生成更高效的可执行文件。 在这个阶段链接器将cli文件传递给Bakend编译器,Bakend编译器会插入一些探针指令,并且会和可执行文件一起生成一个.pgd文件,这是一个后续其他阶段会用到的数据库文件。 Basic Block Reordering(基础结构重新排序) – 尽量将执行顺序最多的路径的代码块放在一起,这样可以提高指令缓存的命中来实现。 同时将使用较少的代码挪到最底部,结合下面的“function layout”一起可以显著减少大型应用程序的工作集(一个时间间隔内使用的页面数)。
这样的编译可以更加优化,可以很自然的融入PGO优化。 这个“某种形式”可以称为“baseline execution“,可以由解释器或简单的JIT编译器承担。 第二阶段是训练阶段,在具体场景下运行程序,前面插入的探针将会记录运行时的信息,数据会被存放在.pgc文件中,每次运行都会产生一个appname! #.pgc的文件,如上图,第一次运行会产生App!
的思路是让传统PGO与自适应动态编译结合起来:一个程序可以先跑些training run把细粒度profile信息记录下来,后续执行的时候可以跳过原本收集profile的阶段,直接利用之前记录的profile信息来做优化编译。 这样就减少了程序启动时收集profile的开销,让程序快速达到稳定的高性能状态。 介绍PGO 即 Profile-guided optimization(归档引导优化),是一种自适应优化手段,不需要对软件代码本身做出改进,即可获得性能的提升,目前已经应用于 GCC、VC++ 等常见的编译器中。 一些开源项目像 Firefox 就默认使用 PGO 编译来优化性能,但是大部分软件上应用率并不高。
在开始介绍PGO的过程之前,先介绍一下作为一个编译器,有哪些决定可以去做,并且会怎样影响到程序的效率。 有没有办法结合传统的PGO与自适应动态编译呢? Azul Systems的Zing VM所实现的ReadyNow! 如果你也是老屁股車迷,應該都會知道PGO過往在車輛配備都是牛肉滿滿、誠意十足,PGO SPRING擁有CBS/ABS兩種版本,引擎使用PGO油冷125引擎最大馬力10.88hp,前後輪也都是碟煞配置。
由香港SEO公司 Featured 提供SEO服務