arXivDaily arXiv每日学术速递 周一至周五更新
arXiv 2004.01637cs.DC
收藏

评估数据划分对C/C ++代码中近似内存的影响

Assessing Impact of Data Partitioning for Approximate Memory in C/C++ Code

Soramichi Akiyama

摘要:

近似存储器是一种以数据完整性为代价来减少存储器子系统和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).

机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。

↑