From 4c935ae59e6d7e91c4c2698466d9046ae6ad4341 Mon Sep 17 00:00:00 2001 From: Kepontry Date: Wed, 10 May 2023 04:04:30 -0700 Subject: [PATCH] add articles/20230509-vf2-hw-prefetch.md --- articles/20230509-vf2-hw-prefetch.md | 203 +++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 articles/20230509-vf2-hw-prefetch.md diff --git a/articles/20230509-vf2-hw-prefetch.md b/articles/20230509-vf2-hw-prefetch.md new file mode 100644 index 0000000..5ab048c --- /dev/null +++ b/articles/20230509-vf2-hw-prefetch.md @@ -0,0 +1,203 @@ +> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.1 - [tounix spaces codeinline tables urls pangu autocorrect]
+> Author: Kepontry
+> Date: 2023/5/9
+> Revisor: Falcon
+> Project: [RISC-V Linux 内核剖析](https://gitee.com/tinylab/riscv-linux)
+> Proposal: [VisionFive 2 开发板软硬件评测及软件 gap 分析](https://gitee.com/tinylab/riscv-linux/issues/I64ESM)
+> Sponsor: PLCT Lab, ISCAS + +# 基于 RISC-V SoC JH7110 的缓存预取调优 + +## 简介 + +### 缓存预取 + +缓存预取(Cache Prefetching),即提前将指令或数据从内存中取到 Cache,是 CPU 用于提升执行性能的一项技术。根据预取数据的不同类型,可以划分为指令预取和数据预取。指令预取通常与分支预测结合,用于预测执行未来的指令,目前已经广泛应用于各大高性能 CPU 中。数据预取通常分软件和硬件两种,本文默认指硬件预取。数据预取的准确率和覆盖率不如指令预取,但近年来也不断出现在各款 CPU 中,发挥着重要作用。 + +### 预取及时性 + +除了准确率与覆盖率,数据预取也需要关注及时性。如果数据过早进入 Cache,将会替换其它可能被用到的数据,从而污染 Cache。如果数据过晚进入 Cache,预取的作用不能得到充分发挥。 + +### 预取距离 + +预取距离通常指在固定步长(相邻两次访存的地址差)的访问中,提前多少个元素取数据。下面是一个数组遍历赋值的示例,假设一个 int 类型数据的大小为 4 字节,数组 arr 的大小为 10240*4=40k。示例中,由于是逐个元素访问,步长为 4 字节。如果仅提前一个元素取数,例如在访问 arr[2] 时预取 arr[3],数据可能来不及取回 Cache。所以需要提前多个元素取数,这个值被称为预取距离。 + +```shell +#define N 10240 +int i; +long sum = 0; +int arr[N]; +init(arr); +for(i=0;i