cpu-architecture相关内容

等待IO的线程还会阻塞内核吗?

在同步/阻塞计算模型中,我们通常说执行线程在等待IO任务完成时将等待(被阻塞). 我的问题是,这是否通常会导致执行线程的CPU内核处于空闲状态,或者通常会在上下文中切换等待IO的线程,并使其处于等待状态,直到准备好处理IO? 解决方案 CPU内核通常不专用于一个特定的执行线程.内核不断切换正在CPU中执行的进程. CPU当前正在执行的进程处于“正在运行"状态.等待轮换的进程列表处于“就绪"状 ..

多核处理器的关键部分

在单核处理器中,所有线程都在一个CPU上运行,在内存中的某些互斥量(或信号量等)上使用原子测试并设置操作来实现关键部分的想法似乎足够简单;因为您的处理器正在从程序中的一个位置执行测试设置,所以它可能无法伪装成其他线程来从程序中的另一个位置进行测试. 但是,当您实际上拥有多个物理处理器时,会发生什么?似乎简单的指令级原子性是不够的,因为两个处理器可能同时执行其测试和设置操作的b/c,您真正需要 ..
发布时间:2020-05-13 21:16:09 其他开发

为什么除法比乘法更昂贵?

我并不是真的在尝试优化任何东西,但是我记得我一直都在听到程序员的声音,我认为这是事实.毕竟他们应该知道这些东西. 但是我不知道为什么除法实际上比乘法慢?除法不只是光荣的减法,而乘法就是光荣的加法吗?因此,从数学上讲,我不明白为什么一种方式或另一种方式在计算上会产生很大的成本差异. 任何人都可以澄清其原因/原因,以便我知道,而不是我之前从其他程序员那里听到的询问:“因为". 解决方 ..
发布时间:2020-05-13 19:18:56 其他开发

如何在Intel环形和网状架构上选择引导处理器(BSP)

第2.13.2节提到仲裁ID用于确定哪个处理器首先发出无操作周期,我已经在多个来源和英特尔手册上看到了这一点.当有“系统总线"且之前有"APIC总线"时,引用MP初始化序列的英特尔手册仅针对奔腾4.我的印象是,仅在多个CPU共享同一总线的那些体系结构中才需要仲裁ID.但是现在,使用环形总线体系结构,可以通过检测环形总线上的空插槽并将事务置于其上来完成仲裁,并且该事务在每个周期一站地移动,这意味着不 ..
发布时间:2020-05-13 02:27:42 其他开发

您是否期望未来的CPU代不会在缓存方面保持一致?

我正在设计一个程序,我发现假定隐式缓存一致性可以使设计容易得多.例如,我的单个编写器(总是同一线程),多个读取器(总是其他线程)方案没有使用任何互斥体. 对于当前的Intel CPU而言这不是问题.但是我希望该程序至少在未来十年内(对于软件来说是很短的时间)产生收入,所以我想知道您是否认为这对于将来的CPU架构可能是个问题. 解决方案 我怀疑将来的CPU世代仍会为您处理缓存一致性.没 ..

哪些CPU体系结构支持比较和交换(CAS)?

只是好奇地知道哪些CPU体系结构支持比较和交换原子基元? 解决方案 Powerpc具有更强大的原语:"lwarx"和"stwcx" lwarx从内存中加载一个值,但会记住该位置.任何其他触摸该位置的线程或CPU都会导致条件存储指令"stwcx"失败. 因此lwarx/stwcx组合允许您实现原子增量/减量,比较和交换,以及更强大的原子操作,例如“原子增量循环缓冲区索引" ..
发布时间:2020-05-13 02:23:15 其他开发

SMP核心,进程和线程如何精确地协同工作?

在单个核心CPU上,每个进程都在操作系统中运行,并且CPU从一个进程跳转到另一个进程以充分利用自身.一个进程可以有多个线程,在这种情况下,CPU在相应进程上运行时会通过这些线程. 现在,在多核CPU上: 内核是否在每个进程中一起运行,或者内核可以在某个特定时间点在不同进程中单独运行?例如,您的程序A运行两个线程.双核CPU可以同时运行该程序的两个线程吗?我认为,如果我们使用类似 Ope ..

MIPS组装中J对JAL(以及JR对JALR)的必要性

我注册是因为我一直在谷歌上搜索该问题的答案,却找不到答案. 我想知道在MIPS中是否必须严格使用无链接的跳转指令? 我可以想象,例如,在不需要时使用"AL"版本会带来一定的功耗损失,但是在任何情况下(JN/JR不能完全做到这一点或可以相对简单地进行编码)仅可以使用J/JR吗? /p> 谢谢! 解决方案 将评论正式化为答案 可以用JAL/JALR模拟 J/JR,因为后者 ..
发布时间:2020-05-09 23:10:39 其他开发

了解MIPS程序中的lw和sw实际工作方式

我很难理解MIPS程序中sw和lw的功能.我对该主题的理解是,我们使用lw将数据从内存传输到寄存器中,反之亦然.但是,这到底是如何实现的呢? 假设我们有以下代码行: lw Reg.Dest, Offset(Reg.Source) sw Reg.Source, Offset(Reg.Dest) 如果我们专注于lw,它实际上是存储来自存储器的数据,Reg.Source并将该数据的地址乘 ..
发布时间:2020-05-09 23:07:01 其他开发

为什么未在硬件中实现MIPS BLT指令?

我想问为什么BLT指令不是MIPS ISA的一部分.相反,它们实际上使它成为汇编程序员的伪指令.从硬件实现的角度来看,我只是无法识别BLT和BLTZ(这是MIPS ISA的一部分)之间的区别. “计算机组织与设计"一书所说: 听从冯·诺伊曼关于MIPS架构“设备"不简单的警告,其原因在于分支过于复杂,要么会延长时钟周期时间,要么是每条指令都需要额外的时钟周期,这是因为二者过于复杂更快的 ..
发布时间:2020-05-09 23:06:37 其他开发

在单周期数据路径中加载半字和字节

曾有人问过这个问题,即在不更改数据存储器的情况下将加载字节实现到单周期数据路径中的问题,解决方案如下. 替代文字http://img214.imageshack.us/img214/7107/99897101. jpg 这实际上是很现实的 问题;大多数内存系统是 完全基于单词,并且个人 字节通常只处理 在处理器内部.当你看到一个 在许多计算机上出现“总线错误",这是 通常意味着处理器尝 ..
发布时间:2020-05-09 23:05:04 其他开发

MIPS中的影子寄存器是什么?如何使用它们?

当我了解MIPS架构时,我遇到了影子寄存器,据说它们是通用寄存器的副本. 我不明白以下内容:什么时候使用影子寄存器? 解决方案 MIPS影子寄存器用于减少处理中断时的寄存器加载/存储开销.分配了影子寄存器集的中断无需保存任何现有上下文即可提供空闲寄存器,也无需在进入中断处理程序时加载影子寄存器中存储的任何特定于中断的数据;在中断处理程序退出时,无需保存中断处理程序上下文或恢复先前的上 ..
发布时间:2020-05-09 23:05:01 其他开发

EX阶段在流水线式MIPS w转发中分支的作用是什么?

请考虑以下流水线处理器结构: 请注意,在ID阶段执行对分支的条件测试(=电路)以及在发生分支的情况下下一条指令的目标地址计算-这是一种节省停顿/刷新的方法(如反对在EX阶段执行所有操作,并在给定分支指令的MEM阶段转发结果. 既然所有工作都在指令解码阶段完成,为什么还要等待给定的分支指令到达EX阶段呢? EX级ALU单元是否可以通过某种方式发挥作用? 谢谢. 解决方案 ..
发布时间:2020-05-09 23:04:14 其他开发

程序集PC相对寻址模式

我正在研究数据路径,并且一直在尝试理解分支指令. 这就是我的理解.在MIPS中,每条指令均为32位.这是4个字节.因此,下一条指令将相隔四个字节. 在示例中,我说PC地址是128.我的第一个问题是了解128的含义.我目前的看法是它是内存中的索引,因此128指的是内存中128个字节.因此,在数据路径中总是说要在PC上加4.将4位加到128位中,得出132,但这实际上是现在的132个字节( ..
发布时间:2020-05-09 22:56:31 其他开发

为什么x86丑陋?与其他人相比,为什么它被认为是次等的?

最近,我一直在阅读一些SO档案,并遇到了针对x86体系结构的声明. 为什么我们需要用于服务器和服务器的不同CPU体系结构?小型/大型机混合核?说 " PC体系结构很烂,任何OS开发人员都会告诉你." 学习汇编语言值得吗? ( 学习x86汇编器的任何简单方法是什么?说 "大多数大学都使用MIPS之类的方法来教授汇编语言,因为它更容易理解,x86汇编的确很丑 以及更多类似的 ..
发布时间:2020-05-09 22:55:22 其他开发

为什么SPARC或MIPS的%r0始终为0?

我知道当您在SPARC CPU(和MIPS)中读取%r0时,总是返回0,但是我想知道为什么? 这背后是什么设计决定,为什么? 解决方案 这只是CPU的设计方式.一方面,确保r0始终设置为零是一种避免使用非常常见的值进行潜在的代价昂贵的内存访问的方法. 一方面(读取),预留一个寄存器来包含零值很方便,以便您可以使用它.否则,您将不得不自己将零加载到寄存器中. 许多RISC处 ..
发布时间:2020-05-09 22:53:01 其他开发

为什么lw指令的第二个参数同时接受offset和regSource?

因此,lw指令的格式如下:lw RegDest, Offset(RegSource).为什么第二个参数同时包含偏移量和寄存器源?为什么不只有一个(即仅注册源)? 解决方案 因为其余的32位指令字又要做什么? (假设您是设计MIPS指令集的CPU架构师.) 它使 LUI + LW从2个指令中的任意32位地址而不是3个指令中加载.对于循环展开或结构指针->成员访问,避免使用ADDIU指令 ..
发布时间:2020-05-09 22:52:20 其他开发

什么是“立即扩展到32位"?在MIPS中意味着什么?

我正在了解MIPS数据路径中的指令解码(ID)阶段,并且得到以下报价:“一旦知道了操作数,就可以从寄存器中读取实际数据或将数据扩展为32位(立即)." 有人可以解释“将数据扩展到32位(立即数)"部分的含义吗?我知道所有寄存器都包含32位,并且我知道立即数是什么.我只是不明白为什么您需要将立即数从26位扩展到32位. 谢谢! 解决方案 26位立即数仅在跳转指令中,不会符号扩展或 ..

内存页面的大小-使用偏移量进行推理

这是理论上的考虑,但是我认为这个论坛是可以的.如果我错了,请把它移到某个地方. 虚拟地址(a8b43e)已映射到(13fcb43e). 关于页面大小我们能说些什么? 因此,我们应该查看偏移量的最大可能值. 在这里,我们可以看到匹配的后缀是b43e.此外,我们应该查看以下内容的二进制表示形式:8和c: 8 = 1000 c = 1100 因此,最后两个位是匹配的.页面的整个大小为 ..
发布时间:2020-05-08 22:29:21 其他开发