相关疑难解决方法(0)

为什么循环指令慢?英特尔无法有效实施吗?

LOOP(英特尔参考手动输入)递减ecx/rcx,然后如果非零则跳转.这很慢,但是英特尔不能廉价地把它变得很快吗? dec/jnz已经将宏观融合成 Sandybridge家族的一个 uop; 唯一的区别是设置标志.

loop关于各种微体系结构,来自Agner Fog的说明表:

  • K8/K10:7 m-ops
  • Bulldozer-family/Ryzen:1 m-op(与宏观融合测试和分支相同,或者jecxz)

  • P4:4次(相同jecxz)

  • P6(PII/PIII):8次
  • Pentium M,Core2:11 uops
  • Nehalem:6个uops.(11为loope/ loopne).吞吐量= 4c(loop)或7c(loope/ne).
  • SnB家族:7个uops.(11为loope/ loopne). 吞吐量=每5个循环一个,这是将循环计数器保留在内存中的瓶颈!jecxz只有2 uops,吞吐量与普通吞吐量相同jcc
  • Silvermont:7次
  • AMD Jaguar(低功耗):8 uops,5c吞吐量
  • 通过Nano3000:2 uops

难道解码器不能像lea rcx, [rcx-1]/ 那样解码jrcxz吗?这将是3 uops.至少那是没有地址大小前缀的情况,否则它必须使用ecx和截断RIP,EIP如果跳转; 也许奇怪的地址大小选择控制减量的宽度解释了许多uops?

或者更好,只需将其解码为不设置标志的融合分支和分支? dec ecx …

performance x86 assembly intel cpu-architecture

53
推荐指数
3
解决办法
6096
查看次数

INC指令与ADD 1:重要吗?

来自Ira Baxter回答,为什么INC和DEC指令不会影响进位标志(CF)?

大多数情况下,我远离INCDEC现在,因为他们做的部分条件代码更新,这样就可以在管道中引起滑稽的摊位,和ADD/ SUB没有.因此,无关紧要(大多数地方),我使用ADD/ SUB避免失速.我使用INC/ DEC仅在保持代码较小的情况下,例如,适合高速缓存行,其中一个或两个指令的大小产生足够的差异.这可能是毫无意义的纳米[字面意思!] - 优化,但我在编码习惯上相当老派.

我想问一下为什么它会导致管道中的停顿,而添加不会?毕竟,无论是ADDINC更新标志寄存器.唯一的区别是INC不更新CF.但为什么重要呢?

performance x86 assembly increment micro-optimization

26
推荐指数
2
解决办法
4234
查看次数

为什么我们需要不同的CPU架构用于服务器和迷你/大型机和混合核心?

我只是想知道除INTEL和AMD之外还有哪些其他CPU架构可用.因此,在Wikipedia上找到了CPU架构列表.

它将值得注意的CPU架构分为以下几类.

  1. 嵌入式CPU架构
  2. 微机CPU架构
  3. 工作站/服务器CPU架构
  4. 迷你/大型机CPU架构
  5. 混合核心CPU架构

我正在分析他们的目的并且几乎没有疑问.以微电脑CPU(PC)架构为参考,并将其与其他人进行比较:

嵌入式CPU架构:

  • 他们是一个全新的世界.
  • 嵌入式系统很小并且执行非常特定的任务,主要是实时和低功耗,因此我们不需要在微型计算机CPU(典型PC)中提供如此多的这样的宽寄存器.换句话说,我们确实需要一个新的小而小的架构.因此新架构和新指令RISC.
  • 上述观点还阐明了为什么我们需要一个单独的操作系统(RTOS).

工作站/服务器CPU架构

  • 我不知道什么是工作站.有人澄清了工作站.
  • 截至服务器.它专门用于运行特定的软件(如httpd,mysql等服务器软件).即使其他进程运行,我们也需要提供服务器进程优先级,因此需要新的调度方案,因此我们需要与通用操作系统不同的操作系统.如果您对服务器操作系统的需求有更多要点,请提及.
  • 但我不明白为什么我们需要一个新的CPU架构.为什么微电脑CPU架构无法完成这项工作.有人可以澄清一下吗?

迷你/大型机CPU架构

  • 我再一次不知道这些以及用于什么样的miniframes或大型机?我只知道它们非常大并且占据了整个楼层.但我从未读过他们试图解决的一些现实问题.如果有人在其中一个工作.分享您的知识.
  • 有人可以澄清其目的吗?为什么微电脑CPU架构不适合它呢?
  • 这也有一种新的操作系统吗?为什么?

混合核心CPU架构

  • 从来没有听说过这些.

如果可能,请以这种格式保留您的答案:

XYZ CPU架构

  • XYZ的目的
  • 需要一个新的架构.为什么现在的微机CPU架构不能工作?它们达到3GHZ并具有多达8个核心.
  • 需要新的操作系统为什么我们需要一种新的操作系统来实现这种架构?

编辑:

伙计们,这不是一个家庭作业问题.我无法做任何让你相信的事情.我不知道问题是不清楚还是别的,但我只对具体的技术细节感兴趣.

让我以另一种方式提出这个问题的一部分.您正在接受采访,如果面试官问您"告诉我,微电脑处理器速度快,功能强大,我们的PC操作系统也很好.为什么我们需要不同的架构,如SPARC,Itanium,需要不同的操作系统,如Windows Server对于服务器?" 你会回答什么?我希望得到我的观点.

assembly computer-science operating-system computer-architecture

8
推荐指数
4
解决办法
5571
查看次数

x86汇编:反汇编程序如何知道如何分解指令?

x86反汇编程序如何知道在哪里分解指令?

我正在查看8088指令集.例如,移动指令有7种变化,范围从2到4个字节.说明本身似乎没有遵循特定的顺序.为什么x86难看的另一个原因是什么?.

例如:

                        76543210  76543210  76543210  76543210
reg/mem to/from reg     100010dw  ||regr/m  
imm to reg/mem          1100011w  ||000r/m  dat       dat w=1
imm to reg              1011wreg  data      dat w=1
imm to accum            1010000w  addr-low  addrhigh
accum to mem            1010001w  addr-low  addrhigh
reg/mem to seg          10001100  ||0ssr/m
seg to reg/mem          10001100  ||0ssr/m

Legend:
||=mod {NO-DISP=0,DISP-LOW,DISP-HIGH,REG}
ss=seg enum{es=0,cs,ss,ds}
reg=enum{ax=0,bx,cd,dx,bx,sp,bp,si,di (if w=1)} enum{al,bl...} (if w=0)
r/m=reg or mem (mod=3 then REG, else mem)
Run Code Online (Sandbox Code Playgroud)

许多指令可以在第一个字节中重叠:

                        76543210  76543210  76543210  76543210
push …
Run Code Online (Sandbox Code Playgroud)

x86 assembly disassembly

4
推荐指数
1
解决办法
1851
查看次数