type
status
date
slug
summary
tags
icon
password
一、 如何进行优化
LLVM编译器支持手动预读取(指的是不用在代码里面写内建函数_builtin_prefetch(addr,rw,locality)),也支持LLVM的自动预读取(自动预读取仅支持一些特定的平台)。
在代码中使用内建函数_builtin_prefetch(addr,rw,locality),其中参数addr为预取的内存地址;rw为一个可选参数,值为0或者1(默认为0),0代表的是读操作,1代表的是写操作;locality是必写的常数,范围为[0,3],0代表的无时间局部性,表示只会访问一次,3代表的是高局部性,表示数据在首次访问之后不久会被再次访问。
二、 实验代码
三、 实验结果分析
在X86-64 clang 13.0.0的环境下:
首先来看Data_prefetch1函数的汇编和中间文件:


可以看出Data_prefetch1函数里面就是一些正常的赋值、循环等操作,并没有做什么优化
再来看一下Data_prefetch2函数的汇编和中间文件:


最后的结果:

- 作者:JucanaYu
- 链接:https://jucanayu.top/article/ef2897e5-4932-4462-8422-7ce09b074ff8
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。