-
Notifications
You must be signed in to change notification settings - Fork 3
edge profiling
xiehuc edited this page Jun 23, 2014
·
1 revision
EdgeProfiling的实现比较简单,是只使用一个大的数组作为计数器来设计的.唯一注意的是 计数器的安排是值得考究的. 总的来说,计数器的每一个格子都定义为了一条边的计数. 如 果当前节点的后继节点只有1个,那么当前节点到后继节点自然形成了唯一的一条边,其计数 器安放在当前节点的末尾.如果当前节点的后继节点有多个.对每个后继节点进行遍历.如果 后继节点是一个关键边(Critical Edge), 首先通过插入一个空的基本块切离边(因为实际 上无论是插到当前节点还是后继节点,都不能够唯一的表示经过的边,所以就在边上插入一 个空的节点,将计数器安放在那里,那么当经过边的时候和计数器增长就是等价定义的了.), 然后安放计数器.如果不是关键边的话,只需要简单的把计数器安放在后继节点的开始即可. 因为后继节点的数量等于边的数量.
在读取的时候也是按照同样的过程重复一遍.因为遍历的顺序是一样的,所以两次访问到的 同一个计数器单元是对应着的同一条边.当返回基本块的执行频数的时候,则需要将所有包 含该基本块的出边和入边的权值的和加起来除以2.就是基本块的执行次数了.