飞腾CPU体系结构之低功耗指令

WFE和WFI指令

当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核会进入低功耗状态; 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生。ARM体系结构并没有定义CPU核进入低功耗的具体属性要求;但是确保在进入、保持和退出低功耗的整个过程中,内存和高速缓冲依然满足数据一致性。

在AArch64状态下,低功耗常规唤醒事件列表如下:

唤醒事件 WFE WFI
当前核接收到物理中断 v v
当前核接收到虚拟中断 v v
当前核接收到定时器事件流的事件 v -
SVE指令 v -
全局性能计时器被清零 v -
  1. 当前飞腾CPU还不支持WFET和WFIT这两个指令。
  2. 当飞腾CPU核执行WFE,CPU核首先检查内部的唤醒事件列表(软件不可直接访问),如果唤醒事件列表为空,CPU核就会进入低功耗状态。

SEV和SEVL指令

当飞腾CPU核执行SEV指令,就会向CPU内部所有核发送唤醒事件。
当飞腾CPU核执行SEVL指令,只会向该CPU核发送唤醒事件。

WFE和SEV/SEVL常规用法

抢占操作

 sevl
1:  wfe/*抢占操作*/.../*如果抢占不成功,就跳转回到 1*/cbxx...

释放操作

 /*释放操作*/...dsbsev

问题1:为什么要sevl?
答:cpu核给自己发送唤醒事件,这是为了保证第一次wfe由于唤醒事件列表不为空,所以不会进入低功耗,但依然会清空唤醒事件列表。
问题2:为什么sev之前要用dsb指令?
答:因为CPU不能保证sev在释放操作之后运行,为了确保sev在释放操作完成之后执行,必须加入dsb指令。

WFI常规用法

CPU核退出

1: wfewfib 1b

CPU核进入idle状态

static void __cpu_do_idle(void)
{dsb(sy);wfi();
}

参考定义

#define sev()           asm volatile("sev" : : : "memory")
#define wfe()           asm volatile("wfe" : : : "memory")
#define wfi()           asm volatile("wfi" : : : "memory")

飞腾CPU体系结构之低功耗指令相关推荐

  1. 飞腾CPU体系结构之系统指令

    访问系统寄存器编码空间的指令,提供以下功能: 访问系统寄存器,包括调试寄存器,系统状态和控制相关的寄存器. 访问专用寄存器,例如程序状态保存寄存器SPSR.异常链接寄存器ELR,以及CPU状态的某些域 ...

  2. 飞腾CPU体系结构(九)

    飞腾CPU体系结构(九) 向量访存指令主要包括LD1/ST1. LD2/ST2.LD3/ST3和LD4/ST4四种. LD1/ST1一般针对一个向量寄存器,也有两个.三个或四个向量寄存器的模式. LD ...

  3. 飞腾CPU体系结构(八)

    飞腾CPU体系结构(八)--标量访存指令 在阅读之前,请先查看<飞腾CPU体系结构(五)>的SIMD和浮点寄存器.飞腾CPU还提供了32个128 位SIMD和浮点寄存器,这32个128位寄 ...

  4. 飞腾CPU体系结构简单介绍(一)

    第一章 飞腾CPU体系结构简介 ARM体系结构是一种精简指令集体系结构RISC,具有以下基本特点:通用寄存器数量较多:采用统一寻址模式,系统主存和外设分布在CPU物理地址空间的不同范围:采用load/ ...

  5. 飞腾CPU体系结构(十)

    飞腾CPU体系结构(十) 1.高速缓存模型 为了优化整体性能,飞腾CPU芯片内部提供L1高速缓存和L2高速缓存,有些飞腾CPU也提供芯片内部的L3高速缓存,本节不对这个情况进行赘述. 靠近流水线的高速 ...

  6. 飞腾CPU体系结构(十二)

    飞腾CPU体系结构(十二) 1. CPU物理地址空间 飞腾CPU支持的物理地址宽度为44位,物理地址空间实际上只有16TB.系统主存(芯片外部内存)和IO外设(例如SoC设备.PCIe设备)都在这个物 ...

  7. 飞腾CPU体系结构(十四)

    飞腾CPU体系结构(十四) 1. MMU原理 MMU的大致工作原理是: 64位虚拟地址首先分成虚拟页帧号和页内偏移量两部分,虚拟页帧号即页表项索引:根据页表项索引,在进程的页表里查找到对应页表项,然后 ...

  8. 飞腾CPU体系结构(五)

    飞腾CPU体系结构(五)-- 通用寄存器 1. 64位通用寄存器 在AArch64执行状态下,飞腾CPU提供31个64位通用寄存器Xn(n=0/1/-/30),其中X30用作跳转链接寄存器. 某些指令 ...

  9. 飞腾CPU体系结构(六)

    飞腾CPU体系结构(六)-- 寻址方式 1. 基本寻址方式 在AArch64执行模式下,飞腾CPU的Load/Store访存指令采用64位地址. 访存的基地址是由64位的通用寄存器Xn或者堆栈寄存器S ...

最新文章

  1. mysql的字符串函数大全_MySQL的字符串函数大全
  2. 一文让你秒懂AQS,附带源码剖析!
  3. python开发需要掌握哪些知识-研究深度学习的开发者,需要对 Python 掌握哪些知识?...
  4. visual studio 2005没有chart空间_彭啸专访:2005年的国少跳级生 天赋+汗水造就成功...
  5. UVA-804 模拟
  6. java for list i_Java中ArrayList的fori和foreach效率比较
  7. Linux格式化异常,Linux下DateFormat的parse方法出现”ParseException”异常
  8. #Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别
  9. Hbase对时,时差范围的确定
  10. dmz区服务器系统激活,dmz主机搭建服务器
  11. 动物笼行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. L2-004. 这是二叉搜索树吗?-PAT团体程序设计天梯赛GPLT
  13. Hbase高级功能过滤(Filter)
  14. extend Thread 和 implements Runnable
  15. recurdyn和matlab联合仿真,基于RecurDyn与Simulink的液压破碎锤联合仿真与试验分析
  16. spingboot视图层实例(JSP+Freemaker)以及自定义配置读取
  17. 苹果Mac如何限制进程 CPU 资源占用?
  18. matlab 报错 索引超出数组元素的数目(1)。
  19. 控制系统状态空间表达式的解(1)——求解线性定常系统零输入响应
  20. h5 前端 PHP,十分钟搞定微信H5支付(ThinkPHP5.1)

热门文章

  1. python批量处理视频_Python调用ffmpeg开源视频处理库,批量处理视频
  2. Cannot find JRE '1.8'. You can specify JRE to run maven goals in Settings
  3. 20170803~20170804
  4. qt中十进制转换为十六进制和二进制字符串,以及二进制字符串转十进制,十六进制字符串
  5. Web前端-Vue ElementUI点击Table 索引行获取index处理
  6. 【C++常用函数】取绝对值abs()
  7. 应届生去公司找个Java程序员的职位需要什么技能?
  8. windows串口通信CreateFile
  9. 我国第一天巨型电子计算机,2018年12月22日是什么日子,2018年12月22日是什么节日...
  10. 【FFMpeg】获取ffmpeg版本号