现在的编译器有没有利用统计与概率方面的算法来做优化?

问题描述

现在的编译器有没有利用统计与概率方面的算法来做优化?

比如编译 C 等静态语言。或者在某种语言上有应用.............................

解决方案

有编译器用到概率的,但我不知道最先进的编译器用到的概型有哪些先进的做法。编译器使用到概率的地方,最常见是跟profile-guided optimization(PGO)相关的。通过收集profile信息来估算某些代码执行的频繁程度,并对其做相应的优化。例如说,1. cold code outlining如果有:if (cond) {
// then...
} else {
// else...
}
// next
并且收集到的profile说cond有超过90%都走到then分支上,那么就把then分支放在fallthrough位置上,而把else分支放到主干代码的“更后面”。于是生成的代码会是这样:if !cond goto Label_else
// then...
// next...
...
Label_else:
// else...
这样,高概率执行的代码就都放在一起了,低概率执行的代码则会放到“外面”去。2. guarded devirtualization例如说有这样一个虚函数调用:o->foo()
如果profile收集到信息说,有80%的可能调用到A::foo(),有11%的可能调用到B::foo(),有9%未知,那么一种可能的代码生成策略是:if (o.type == A) {
A::foo(o) // devirtualized
} else if (o.type == B) {
B::foo(o) // devirtualized
} else {
o->vtableslotid(#foo) // virtual call fallback

解决方案二:

应该没有,统计与概率是数学领域中非精确的,而编译器则需要精确的将代码文本翻译成cpu指令,包括优化在内期间不允许任何假设或模糊的判断。

时间: 2024-07-28 19:33:35

现在的编译器有没有利用统计与概率方面的算法来做优化?的相关文章

SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行)

原文:SQL Server调优系列玩转篇三(利用索引提示(Hint)引导语句最大优化运行) 前言 本篇继续玩转模块的内容,关于索引在SQL Server的位置无须多言,本篇将分析如何利用Hint引导语句充分利用索引进行运行,同样,还是希望扎实掌握前面一系列的内容,才进入本模块的内容分析. 闲言少叙,进入本篇的内容. 技术准备 数据库版本为SQL Server2012,利用微软的以前的案例库(Northwind)进行分析,部分内容也会应用微软的另一个案例库AdventureWorks. 相信了解S

sql-数据库一项特殊的统计,求高效率点的算法

问题描述 数据库一项特殊的统计,求高效率点的算法 有一个数据表 ID time pos result 1 15:00:1 1 true 1 15:00:1 2 true 1 15:00:1 3 true 1 15:00:1 4 true 1 15:00:2 1 true 1 15:00:2 2 true 3 15:00:1 1 true 3 15:00:1 2 False 3 15:00:1 3 true 3 15:00:1 4 true 如上: 在ID time 作为唯一标识的情况下 Pos项

A5优化小组:如何利用统计工具让流量飞起来

流量统计工具,反应网站流量的基本现况,使站长每一天最即使的掌握网站的发展动态,更可通过流量的浮动直观判断搜索引擎给予网站权重的高低.那么除此之外,它还可以做些什么呢?事实上,利用好站长工具所反馈出的信息,完全可以使流量"放大"增益,让网站流量再生出更多. 一:"放大"长尾词流量 用户每一天通过什么关键字访问网站了?这些流量统计工具都有着详细的记录.同时也说明了一个道理:这些关键字在搜索引擎中有着较高的排名,更重要的是有搜索的关键字.作为一名站长,善于分析这些带来流量

利用统计工具对营销策划类网站进行数据分析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 对于我们做营销策划的人来说,数据分析极其重要,而且白鹿也注意到现在的网站几乎都自有或者安装了第三方的流量监控程序,那么如何很好的利用第三方流量统计工具为我们服务呢?白鹿觉得应该重点从以下几个方面入手: 1.直接访问用户的数量及其所占的比例 说到直接访问用户,就好比白鹿每天打开浏览器做的前两件事情就是访问我们的团队博客青裝营销策划机构和白鹿自己

DB2利用统计视图提高查询执行性能

DB2® 基于成本的优化器(以下简称优化器)可以评估每个访问计划的执行成本,并根据评估结果选择出最优的访问计划.在访问计划中,在每个操作符上进行评估所用的基数(或行数)是成本评估过程中的一个重要因素.基数评估的准确性取决于收集到的统计信息.用户通常将重点放在从单个表上收集统计信息,包括基本的单列统计.单个列上的分布统计信息,两个或多个列上的多列统计信息.这些统计信息通常可满足大多数需求,但无法捕获复杂的关系,比如跨连接关系.统计视图提供了捕获复杂关系所需的统计信息. 本文通过几个示例向您展示如何

百度推广商机怎样利用统计数据来监测

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 百度搜索推广商机中心(百度留言板)首页为您展示了"今日商机中心展现量趋势"."每日商机量趋势"."每日网站访客留言时间分布"三种统计数据. 1. 想知道商机中心展现次数的变化趋势? 您可以点击商机中心展现量趋势图,图中会显示最近一月内的商机中心展现量变化趋势,最近更新到前一天的数据.

请站长利用我们的影响力,为民族未来做点贡献

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 首先说明我这不是AD!文章中出现的链接大家不点就是,我不在乎这几个流量. 我听了一位不愿透漏姓名的知名艺人对海艺事件的看法 引用我在BLOG中的话: 以下为引用的内容: 海艺事件反应的不是几个学生的问题,也不是一个学校的问题, 不过也不代表全部. 希望大家继续关注海艺事件,关注中国教育,关注我们的下一代.这不是哪一个人的事,这是一个民

如何利用关键词的几种变化形式做优化

关键词在网站优化中的作用是举足轻重的,所以我们要使用各种方法尽可能的挖掘行业关键词,我们挖掘的越多越详细,对这个行业把握的就越好,因为有关键词代表了用户需求,词库就是行业用户需要的一个集合,那么我们在做关键词布局的时候,关键词的几种变化形式也是不容忽略的. 1.关键词的同义词.近义词形式 我们在布局一个网页的时候,不但要把我们预选的一些关键词写进网页里边,而且它的同义词以及近义词也是可以巧秒的布置进去的,例如计算机与电脑,就是密不可分的同义近义关系,有的人喜欢搜索计算机,有些人喜欢搜索电脑,可是

堆排序(Heapsort)是利用堆这种数据结构的排序算法。堆是一个近似完全二叉树的结构。

堆的性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 堆节点的访问 通常堆是通过一维数组来实现的.在起始数组为 0 的情形中: 堆的根节点(即堆积树的最大值)存放在数组位置 1 的地方; 注意:不使用位置 0,否则左子树永远为 0[2] 父节点i的左子节点在位置 (2*i); 父节点i的右子节点在位置 (2*i+1); 子节点i的父节点在位置 floor(i/2); 堆的操作 在堆的数据结构中,堆中的最大值总是位于根节点.堆中定义以下几种操作: 最大堆调整(Max_Heapify):将