论文标题
评估数据划分的影响C/C ++代码中的近似内存
Assessing Impact of Data Partitioning for Approximate Memory in C/C++ Code
论文作者
论文摘要
近似内存是一种以数据完整性成本减少访问延迟的方法,以减轻内存子系统和CPU之间的性能差距。为了从现实应用程序中的近似内存中获取受益,这对于划分应用程序的数据以近似数据和关键数据至关重要,并应用不同的错误率。但是,由于如何实现近似内存的基本限制,无法以细粒度的方式(例如,每个字节)控制错误率。因此,如果近似数据和关键数据在数据结构中交织在一起(例如,具有指针和可作为其成员的C结构),则数据分配可能会降低应用程序的性能,因为必须将数据结构分配给具有不同错误率不同的单独存储器区域。本文是第一个对现实的C/C ++代码进行分析以评估该问题的影响的文章。首先,我们找到了通过通过基准中造成最多数量的高速缓存错过的指令来评估的数据类型(例如“ int”,“ struct Point”),我们将其称为目标数据类型。其次,我们定性地估计应用程序的目标数据类型是否具有近似数据和关键数据交错。为此,我们设置了三个标准来分析它,因为将数据定义为近似数据或关键数据是不可行的,因为它取决于每个用例。我们分析了Spec CPU 2006和2图分析框架的11个内存密集型基准,并表明9个基准的目标数据类型是C结构或C ++类(标准1)。其中,两个有指针和一个非分量成员(标准2),三个具有浮点数和其他成员(标准3)。
Approximate memory is a technique to mitigate the performance gap between memory subsystems and CPUs with its reduced access latency at a cost of data integrity. To gain benefit from approximate memory for realistic applications, it is crucial to partition applications' data to approximate data and critical data and apply different error rates. However, error rates cannot be controlled in a fine-grained manner (e.g., per byte) due to fundamental limitations of how approximate memory can be realized. Due to this, if approximate data and critical data are interleaved in a data structure (e.g., a C struct that has a pointer and an approximatable number as its members), data partitioning may degrade the application's performance because the data structure must be split to separate memory regions that have different error rates. This paper is the first to conduct an analysis of realistic C/C++ code to assess the impact of this problem. First, we find the type of data (e.g., "int", "struct point") that is assessed by the instruction that incurs the largest number of cache misses in a benchmark, which we refer to as the target data type. Second, we qualitatively estimate if the target data type of an application has approximate data and critical data interleaved. To this end, we set up three criteria to analyze it because definitively distinguishing a piece of data as approximate data or critical data is infeasible since it depends on each use-case. We analyze 11 memory intensive benchmarks from SPEC CPU 2006 and 2 graph analytics frameworks, and show that the target data types of 9 benchmarks are either a C struct or a C++ class (criterion 1). Among them, two have a pointer and a non-pointer member together (criterion 2) and three have a floating point number and other members together (criterion 3).