一句话:提出事件触发的可编程预取器,结合通用计算单元与事件编程模型及编译器自动生成事件,为不规则访存负载带来平均 3.0 倍加速。
许多现代负载需要在大规模数据上进行计算,且访存模式高度不规则,现有预取技术难以捕捉其访存模式,导致应用严重受限于内存带宽。已有的显式配置遍历模式的预取器虽能显著加速,但无法泛化到目标数据结构之外。本文提出一种事件触发的可编程预取器,将通用计算单元的灵活性与基于事件的编程模型相结合,并配合编译器技术,从带注解的源代码中自动生成事件。该设计使得预取器可以做出更复杂的取数决策,且在需要中间结果时无需停顿等待。作者从应用中提取小型预取内核(prefetch kernel),在模拟环境下对图计算、数据库与 HPC 等多类负载进行评估,平均取得 3.0 倍加速。
Many modern workloads compute on large amounts of data, often with irregular memory accesses. Current architectures perform poorly for these workloads, as existing prefetching techniques cannot capture the memory access patterns; these applications end up heavily memory-bound as a result. Although a number of techniques exist to explicitly configure a prefetcher with traversal patterns, gaining significant speedups, they do not generalise beyond their target data structures. Instead, we propose an event-triggered programmable prefetcher combining the flexibility of a general-purpose computational unit with an event-based programming model, along with compiler techniques to automatically generate events from the original source code with annotations. This allows more complex fetching decisions to be made, without needing to stall when intermediate results are required. Using our programmable prefetching system, combined with small prefetch kernels extracted from applications, we achieve an average 3.0x speedup in simulation for a variety of graph, database and HPC workloads.