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相关推荐

  1. Android NDK开发之 NEON基础介绍

    原文:http://blog.csdn.net/app_12062011/article/details/50434259 Android NDK开发之 NEON基础介绍 这是官方介绍: http:/ ...

  2. UltraEdit汇编语言高亮

    UltraEdit汇编语言高亮 首先新建一个文本文件命名为masm.uew 使用文本编辑器打开 并将下面的代码复制进masm.uew并保存 在资源管理器中输入文件目录 %appdata%\IDMCom ...

  3. UltraEdit+Masm--打造自己的汇编IDE

    UltraEdit版本 16.0 一. 添加支持汇编语言语法高亮 1. 去官方网站查找汇编语法的配置文件 由于我使用的汇编编译工具是MASM,所以,这里我找到了masm.uew http://www. ...

  4. 【整理】SIMD、MMX、SSE、AVX、3D Now!、neon——指令集大全

    http://blog.csdn.net/conowen/article/details/7255920 SIMD SIMD单指令流多数据流(SingleInstruction Multiple Da ...

  5. Cpuid查询处理器的详细信息

    CPUID操作码是一个面向x86架构的处理器补充指令,它的名称派生自CPU识别,作用是允许软件发现处理器的详细信息.它由英特尔在1993年引入奔腾和SL增强486处理器. 转储从CPUID指令收集到的 ...

  6. RISC、CISC、 SIMD、FPU、MMX、SSE、SSEX、AVX、3D Now以及DSP、ARM的Neon简介

    CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集.在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序需要相配合的指令 ...

  7. 增加对ARM64和X86的硬件预取控制驱动的支持

    这组PATCH增加了sysfs接口来控制CPU硬件预取行为对ARM64和X86进行用户态的性能调优. 1 背景 A64FX和一些intel处理器有依赖于实现的寄存器来控制CPU硬件预取行为.A64FX ...

  8. Linux内核异常向量表在哪,ARM64的启动过程之(六):异常向量表的设定

    ARM64的启动过程之(六):异常向量表的设定 作者:linuxer 发布于:2015-11-24 18:22 分类:ARMv8A Arch 一.前言 本文主要描述了4.1.10内核初始化过程中如何初 ...

  9. 详解 ARM64 内核中对 52 位虚拟地址的支持

    当 64 位硬件变得可用之后,处理更大地址空间(大于 232 字节)的需求变得显而易见.现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址 ...

  10. android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...

    不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...

最新文章

  1. Linux下压力测试工具Webbench介绍
  2. linux zlib简介
  3. python中if错误-python中的异常处理
  4. struts2之单个文件上传(特别推荐)
  5. 经典 MyBatis 面试题
  6. icoding复习5 树 感觉难度巨大....
  7. 【PAT - 甲级1094】The Largest Generation (25分)(dfs建树)
  8. 在密码学研究方面不断创新突破—— 女密码学家的成功密码
  9. 【java学习之路】(java框架)003.Mybatis的介绍和基本使用
  10. NLog 在winform和asp.net下使用快速攻略 .
  11. php ip地址管理系统,phpIPAM – 免费开源的IP地址管理工具,重量级
  12. win7鼠标指针主题包_MouseInc 小巧好用的鼠标手势软件
  13. 安装Win7时删除系统保留的100M隐藏分区
  14. 抖音养号教程技巧,做抖音怎么养号上热门
  15. PLSQL Developer 登录报错 initialization error
  16. 2021_01_04
  17. 秦牧鸿蒙之体有什么用,玄幻:开局奖励鸿蒙圣体
  18. C++学习之路二:C++
  19. rust刷卡点地图_新版rust地图物资 | 手游网游页游攻略大全
  20. VirtuaNES.v0.97源码探究6 内存相关

热门文章

  1. AD 屏蔽原理图中的器件
  2. 英语单词发音中/s/后的/p/,/t/,/k//tr/什么时候读作/b/,/d/,/g/,/dr/?
  3. CORTEX-M4F基本知识
  4. 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会考试——期末考试
  5. 【转】基于gamebryo引擎开发过程中组件的应用和取舍 By 宋晓宇
  6. iphone怎么找本地音乐_为什么iPhone会发出蜂鸣声或振动? 这是找出方法
  7. Linux系统通过console口连接交换机
  8. 16、先天八卦与后天八卦各自有什么用途?
  9. 普通游戏显卡和专业图形显卡的区别
  10. 七月份的尾巴是狮子座