LLAMA:用于内存访问的低层抽象

摘要:CPU和存储器之间的性能差距不断扩大。随着越来越多的程序变得内存密集型,为每个硬件架构选择最佳的存储器布局变得越来越重要。对于那些在异构硬件架构上运行的便携代码来说,理想情况下,数据结构的存储器布局选择与程序的其他部分是解耦的。这可以通过一个运行时开销为零的抽象层实现,在该抽象层下,存储器布局可以自由交换。 我们提出了内存访问的底层抽象(LLAMA),这是一个C++库,它提供了这样一个数据结构抽象层,并提供了针对多维数组的嵌套结构数据的示例实现。LLAMA提供了完全符合C++的方法,用于定义和切换用户自定义数据类型的自定义存储器布局。该库可以与第三方分配器集成。 我们提供了两个近似真实的示例,展示了LLAMA生成的AoS(结构数组)和SoA(数组结构)布局产生了与手动编写的数据结构相同的代码和性能特性。将其集成到SPEC CPU lbm基准和粒子-格点模拟PIConGPU中,展示了LLAMA在实际应用中的能力。LLAMA的布局感知复制例程可以显著加快数据在不同布局之间的传输和重排速度,相比于朴素的逐元素复制。 LLAMA为在异构环境中开发高性能C++应用程序提供了一种新的工具。

作者:Bernhard Manfred Gruber, Guilherme Amadio, Jakob Blomer, Alexander Matthes, Ren''e Widera, Michael Bussmann

论文ID:2106.04284

分类:Performance

分类简称:cs.PF

提交时间:2022-03-10

PDF 下载: 英文版 中文版pdf翻译中