arm64的prefetch/prefetchw/spin_lock_prefetch
prefetch 用于手工执行预抓取,其是通过gcc内置的函数,arm64 则是自己通过汇编实现的,主要用于提升性能
prefetch定义在incude/linux/prefetch.h中
#ifndef ARCH_HAS_PREFETCH
#define prefetch(x) __builtin_prefetch(x)
#endif
#ifndef ARCH_HAS_PREFETCHW
#define prefetchw(x) __builtin_prefetch(x,1)
#endif
#ifndef ARCH_HAS_SPINLOCK_PREFETCH
#define spin_lock_prefetch(x) prefetchw(x)
#endif
#ifndef PREFETCH_STRIDE
#define PREFETCH_STRIDE (4*L1_CACHE_BYTES)
#endif
static inline void prefetch_range(void *addr, size_t len)
{
#ifdef ARCH_HAS_PREFETCH
char *cp;
char *end = addr + len;
for (cp = addr; cp < end; cp += PREFETCH_STRIDE)
prefetch(cp);
#endif
}
#endif
prefetch 用于读预取
prefetchw 用于写预取
spin_lock_prefetch 用于spin lock的预取
前面三个都是单个变量的预取,而prefetch_range 用于一定范围的预取。
在arm64 实现在kernel/sched/core.c 中则是通过汇编指令实现的,没有用gcc中的默认实现
* Prefetching support
*/
#define ARCH_HAS_PREFETCH
static inline void prefetch(const void *ptr)
{
asm volatile("prfm pldl1keep, %a0\n" : : "p" (ptr));
}
#define ARCH_HAS_PREFETCHW
static inline void prefetchw(const void *ptr)
{
asm volatile("prfm pstl1keep, %a0\n" : : "p" (ptr));
}
#define ARCH_HAS_SPINLOCK_PREFETCH
static inline void spin_lock_prefetch(const void *ptr)
{
asm volatile(ARM64_LSE_ATOMIC_INSN(
"prfm pstl1strm, %a0",
"nop") : : "p" (ptr));
}
arm64的prefetch/prefetchw/spin_lock_prefetch相关推荐
- Android NDK开发之 NEON基础介绍
原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...
- UltraEdit汇编语言高亮
UltraEdit汇编语言高亮 首先新建一个文本文件命名为masm.uew 使用文本编辑器打开 并将下面的代码复制进masm.uew并保存 在资源管理器中输入文件目录 %appdata%\IDMCom ...
- UltraEdit+Masm--打造自己的汇编IDE
UltraEdit版本 16.0 一. 添加支持汇编语言语法高亮 1. 去官方网站查找汇编语法的配置文件 由于我使用的汇编编译工具是MASM,所以,这里我找到了masm.uew http://www. ...
- 【整理】SIMD、MMX、SSE、AVX、3D Now!、neon——指令集大全
http://blog.csdn.net/conowen/article/details/7255920 SIMD SIMD单指令流多数据流(SingleInstruction Multiple Da ...
- Cpuid查询处理器的详细信息
CPUID操作码是一个面向x86架构的处理器补充指令,它的名称派生自CPU识别,作用是允许软件发现处理器的详细信息.它由英特尔在1993年引入奔腾和SL增强486处理器. 转储从CPUID指令收集到的 ...
- RISC、CISC、 SIMD、FPU、MMX、SSE、SSEX、AVX、3D Now以及DSP、ARM的Neon简介
CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集.在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序需要相配合的指令 ...
- 增加对ARM64和X86的硬件预取控制驱动的支持
这组PATCH增加了sysfs接口来控制CPU硬件预取行为对ARM64和X86进行用户态的性能调优. 1 背景 A64FX和一些intel处理器有依赖于实现的寄存器来控制CPU硬件预取行为.A64FX ...
- Linux内核异常向量表在哪,ARM64的启动过程之(六):异常向量表的设定
ARM64的启动过程之(六):异常向量表的设定 作者:linuxer 发布于:2015-11-24 18:22 分类:ARMv8A Arch 一.前言 本文主要描述了4.1.10内核初始化过程中如何初 ...
- 详解 ARM64 内核中对 52 位虚拟地址的支持
当 64 位硬件变得可用之后,处理更大地址空间(大于 232 字节)的需求变得显而易见.现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址 ...
- android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...
不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...
最新文章
- Linux下压力测试工具Webbench介绍
- linux zlib简介
- python中if错误-python中的异常处理
- struts2之单个文件上传(特别推荐)
- 经典 MyBatis 面试题
- icoding复习5 树 感觉难度巨大....
- 【PAT - 甲级1094】The Largest Generation (25分)(dfs建树)
- 在密码学研究方面不断创新突破—— 女密码学家的成功密码
- 【java学习之路】(java框架)003.Mybatis的介绍和基本使用
- NLog 在winform和asp.net下使用快速攻略 .
- php ip地址管理系统,phpIPAM – 免费开源的IP地址管理工具,重量级
- win7鼠标指针主题包_MouseInc 小巧好用的鼠标手势软件
- 安装Win7时删除系统保留的100M隐藏分区
- 抖音养号教程技巧,做抖音怎么养号上热门
- PLSQL Developer 登录报错 initialization error
- 2021_01_04
- 秦牧鸿蒙之体有什么用,玄幻:开局奖励鸿蒙圣体
- C++学习之路二:C++
- rust刷卡点地图_新版rust地图物资 | 手游网游页游攻略大全
- VirtuaNES.v0.97源码探究6 内存相关
热门文章
- AD 屏蔽原理图中的器件
- 英语单词发音中/s/后的/p/,/t/,/k//tr/什么时候读作/b/,/d/,/g/,/dr/?
- CORTEX-M4F基本知识
- 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试
- 【转】基于gamebryo引擎开发过程中组件的应用和取舍 By 宋晓宇
- iphone怎么找本地音乐_为什么iPhone会发出蜂鸣声或振动? 这是找出方法
- Linux系统通过console口连接交换机
- 16、先天八卦与后天八卦各自有什么用途?
- 普通游戏显卡和专业图形显卡的区别
- 七月份的尾巴是狮子座