|
直接访问表是ELT的一种高度稀疏的表示形式,它以高内存使用率为代价提供了非常快的查找性能。例如,考虑一个包含2000000个事件的事件目录和一个包含20000个事件的ELT,其中获得了非零损失值。为了使用直接访问表表示ELT,将在内存中生成2000000个损失值的数组,其中20000个为非零损失值,其余1980000个事件为零损失值。因此,如果一个层有15个ELT,那么在内存中会生成15×2,000,000=30,000,000个事件丢失对。出于任何其他原因,在下面的表格中使用了compact-Solver。搜索操作需要在紧凑表示中查找eventloss对。Sequential和binarysearch分别需要O(n)和O(log(n))内存访问来定位事件丢失对。即使采用需要恒定内存访问次数的恒定时间空间效率哈希方案(例如,布谷鸟哈希[15]),也存在相当大的实现和运行时性能复杂性。这种开销在具有由全局和共享内存组成的复杂内存层次结构的GPU上会很高。要对100万个试验(每个试验包含1000个事件)进行聚合分析,对于覆盖15个ELT的层,有1000×10000000×15=1500000000000个事件,需要随机访问150亿个损失值。直接访问表虽然浪费内存空间,但允许最少的内存访问,因为ELT中的每次查找只需要每次搜索操作一次内存访问。考虑了15个ELT的两种数据结构实现。在第一个实现中,每个ELT都是一个独立的表,因此,在一个读取周期中,每个线程都独立地从ELT中查找其事件。
|