Ale*_*nov 4 x86 assembly interrupt
假设CPU正在运行汇编指令,例如,FOO
将在几个时钟(例如10)中执行
中断请求刚好在执行过程中FOO
,处理器需要中断.它是否等待命令正确执行,或FOO
中止并将重新启动?考虑到不同类型的中断优先级,它的行为是否有所不同?
CPU可以选择决定做任何一个,即决定何时相对于原始指令流处理中断.
已发布但尚未发送到执行单元的Insns在AMD和Intel的当前实施中被取消. 当发生中断时,管道中的指令会发生什么?
对于无序执行,通常有数十条指令在运行,并且不止一个指令可以在ALU中同时执行.
但是,这是一个有趣的问题是否不低延时指令类似add
或imul
已开始执行但尚未退休的将被允许完成和中断处理程序看到或不更新架构状态.
如果没有,这可能是因为很难建立逻辑来检测有多少连续指令准备好"很快"退出,超出当前的退休状态.中断是罕见的(最坏情况下每千条指令一个,或者I/O负载较低的每百万条指令一个),因此在中断处理周围挤压周围代码的更多吞吐量的好处很低.中断延迟的任何潜在成本都将是一个缺点.
某些指令,尤其是微编码指令,具有中断的机制,无需从头开始重启.例如
rep movsb
可以将RSI,RDI和RCX更新到部分通过副本(因此它将在重新启动时完成复制).其他REP字符串指令可以类似地被中断.对于中断,只有一次操作计数是原子的.
AVX2收集像vpgatherdd
一个输入掩码向量,显示要收集哪些元素而忽略.它在成功收集相应的索引后清除掩码元素.在异常(例如页面错误)上,错误元素是最右边的元素,其掩码仍然设置(收集顺序不保证,但故障顺序是,请参阅英特尔的手册条目).
这使得聚集成功成为可能,而无需同时映射所有相关页面.即使在内存压力的情况下,在另一个元素中进行分页时,驱逐已经收集的元素也不会导致无限循环.保证前进.
在异步中断上,硬件可以类似地使聚集部分完成,使用掩码来记录进度.IDK,如果任何硬件实际上这样做,但ISA设计保持该选项打开.
无论如何,这就是为什么你需要在循环内为每个聚集创建一个全新的全屏模板.
AVX512收集和散布具有相同的机制,但使用掩码寄存器而不是向量寄存器. http://felixcloutier.com/x86/VPSCATTERDD:VPSCATTERDQ:VPSCATTERQD:VPSCATTERQQ.html
没有中断和重启机制的非常慢的指令包括wbinvd
.(将所有缓存同步到主内存并使其无效). 英特尔的手册提到wbinvd
延迟中断.
因此,使用WBINVD指令会对逻辑处理器中断/事件响应时间产生影响.
这可能是为什么它是一个特权指令.用户空间可以做很多事情来使系统变慢(例如占用大量内存带宽),但它不能过于显着地增加中断延迟.(从ROB退出但尚未提交给L1d的商店可能会增加中断延迟,因为它们必须发生并且不能中止.但是在飞行中创建大量分散的缓存缺失存储的病态情况更难.)
归档时间: |
|
查看次数: |
226 次 |
最近记录: |