首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MIPS架构深入理解8-向MIPS移植软件之大小端模式

当CPU没有使能字节地址寻址,而使用一个字节大小的码表示该字节在WORD地址中的位置时(这在MIPS架构CPU中很常见),那么硬件必须能够正确解析CPU想要读写的是哪个字节,也就是必须知道CPU正在使用的大小端模式...5 在MIPS架构上编写支持任意字节序的软件 你可能会想,我是否可以写一个正确运行在MIPS CPU上的程序,不论它被配置为大端模式,还是小端模式。或者编写一个可以运行在任意配置的板子上的驱动程序。...这个负责操纵数据加载的硬件逻辑能够适应所有的加载大小、地址和对齐方式的组合(包括load/store和左右移位指令等)。 正是这个特性使得MIPS CPU能够配置大小端工作模式。...当你重新配置MIPS CPU的字节序时,正是改变了这个操纵数据加载的硬件逻辑单元的行为。...这不是完美无缺的,如果ROM包含非32位对齐的任何数据都将会被打乱。

2K10

来自用户体验大师的100个UX设计建议——上篇

把网站设计想象成铺设一条黄色的砖路,理解用户角色的目标和需要,然后不断让用户从一个区块跳转到下一个。 2. 用户更有可能注意到网站/页面顶部附近的内容/选项,建议按其重要性排序。 3....如果你的网站层次结构超过3-4级,是时候考虑重新设计了。 30. 考虑使用粘性菜单导航(跟随浏览器滚动的导航),特别是在较长的网页中或需要快速访问时。 31....一个好的网站导航并不会妨碍网页,使用后会消失在背景中。 32. 导航与网站应该保持一致,不能改变整个网站的风格。 33. 导航标签需要具体化,使用承载信息最多的单词,不要超过2-3个单词。 34....将表单标签和字段对齐到一条垂直线上,以便快速扫描。 43. 字段标签应该在文本字段之外,而不是在文本字段内,这样用户才不会丢失目标。 44. 使用分隔符区分不同部分,使长的网页表单对用户更加友好。...链接应该看起来就是链接的样子。 50. 链接文本应该表明链接的指向,而不是让用户通过点击一个链接来找出它的指向。 以上就是《用户体验大师的100个UX设计技巧——上篇》,感兴趣的朋友请继续关注。

1.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MIPS架构深入理解6-异常和中断

    再比如,非对齐的加载在一个系统中可能当作错误,但是,在另一个系统中由软件进行处理。...在进一步分析异常和中断之前,先来理解一个概念,什么是精确异常? 1 精确异常 在MIPS架构的文档中,我们经常看到一个术语”精确异常”,英文称之为precise exception。...为了避免这个问题,异常检测到后不是立即执行,这个事件只是被记录并沿着流水线向下传递。在大多数的CPU设计中,都会标记一个特殊的流水线阶段作为检测异常的地方。...如果该异常不是中断,受害指令就是刚刚结束ALU阶段的指令。 但是,需要注意的是,MIPS架构不承诺精确的中断延时,中断信号到达CPU之前可能需要花一个或者几个时钟周期重新同步。...状态寄存器SR中还有8个中断屏蔽位SR(IM),分别对应Cause寄存器中的8个中断位。中断屏蔽位设置为1,使能相应的中断位;如果设置为0,则禁止相应的中断。 软件中断位的作用是什么?

    3K20

    使用按位运算符创建内存对齐的数据结构

    内存对齐是计算机编程中的一个重要概念,它确保了高效的内存访问,并有可能在各种性能关键型系统和应用中产生可观的性能提升。 内存对齐的一个示例用例是在 Linux 中使用直接 I/O。...对齐内存块 假设我们有一个 16 KiB 的内存块,需要将其对齐在 512 字节的地址边界上(即,一个可以被数字 512 整除的内存地址)。...如果地址正确对齐,我们应该得到一个零,但我们没有。...让我们来探讨另一个用例,我们有一个任意大小的内存缓冲区,我们想设计一个基于竞技场的分配器,该分配器在该缓冲区上运行,并确保任何新添加的数据都是 4 字节对齐的(即,每个新添加的数据段从可被 4 整除的偏移量开始...内存缓冲区只能容纳 N 个元素,从一个 N 字节对齐的偏移量开始,直到到达下一个 N 字节对齐的偏移量。

    2.5K51

    【学术】从一个简单的模型开始,可以让机器学习更高效

    Box的话说: 所有的模型都有错误,但有些错误是有用的。 换句话说:如果你想过程更加有趣,那就从一个复杂的模型开始。如果你想解决问题和生产产品,从一个愚蠢模型开始。 基线是什么?...如果你试图预测房价从不同的特点(从一组特征预测价值),线性回归是有意义的,但如果你正试图建立一个语音识别算法。为了选择最好的基线,你要考虑通过使用一个基线可以获得那些有用的。 为什么从基线开始?...如果你发现它提供的性能是不够的,那么检查一下这个简单模型所遇到的困难,可以帮助你选择下一个方法。 例如,在我们的NLP入门中,通过检查基线的错误,我们可以看到它不能将有意义的单词与填充词分开。...如果不好,它所犯的错误对数据中的偏差和特殊问题是启发性的。机器学习的大部分问题都是通过更好的理解和准备数据来解决的,而不是简单地选择一个更复杂的模型。看看基线的行为会告诉你什么: 哪个类更难分离。...如果这部分很难,那通常意味着你应该尝试一个不同的模型! 结论 一旦你意识到更强大的方法的存在,很容易忽略简单的方法,但是在大多数领域中,在机器学习中,从基础开始总是很有价值的。

    86570

    【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理

    (MIPS讲述) ---- 2、在MIPS体系结构中,对寄存器和存储器的操作如下: 寄存器的大小为32位,由于32位为一组的情况很常见,所以称之为 “字(word)”,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差...其具体的实现方法是:讲一个基址存于寄存器中,然后通过数据传送指令进行取值,所以当使用数据传送指令取存储器中的数据(字)的时候,其地址偏移量是基址+4*逻辑偏移量。...按字节编址的情况下,所有字的起始地址必须是4的倍数,这就是 对齐限制 。...---- 5、在MIPS汇编语言中,有如下几个通行定理: 对立即数(也就是常数1,2··· 这些存放在存储器中的数据)的操作一般都是相对于对寄存器操作的指令加上一个i(immediately),对于无符号数则加上一个...bne 如果不相等就跳转 slt 小于则置位,如果第二个操作数小于第三个,那么就对第一个操作数置位1 slti 对立即数的小于则置位 正文之后 今天有神秘嘉宾开赴武汉,所以现在18:45写完笔记的我要先回去

    2.1K70

    关于AGI与ChatGPT,Stuart Russell与朱松纯这么看

    1)通用智能体能够处理无限任务,包括那些在复杂动态的物理和社会环境中没有预先定义的任务;2)通用智能体应该是自主的,也就是说,它应该能够像人类一样自己产生并完成任务;3)通用智能体应该具有一个价值系统,...Stuart Russell:在 1948 年的一篇论文中,图灵提出了从一个巨大的查找表中生成智能为的问题。...这就好像一个下棋程序,通过识别以前大师级比赛中的相似棋步序列(如 d4、c6、Nc3 等),然后输出该序列中的下一步棋。...可能事实上并不是如此。 Mark Nitzberg:松纯,请介绍一下你们做的价值对齐研究。 朱松纯:谈论价值对齐,首先要探讨一下 “价值”,我认为当下的人工智能研究应该由数据驱动转变为价值驱动。...为达到人类认知水平的通用智能,我们在 BIGAI 的研究中纳入了价值对齐这一要素,并构建了包含四个对齐的人机交互系统。第一个对齐是一个共享的表征,包括对世界的共同理解。

    54530

    MIPS架构深入理解9-向MIPS移植软件之Cache管理

    即使CPU只是读取一个字节,仍然会加载这样的内存块到Cache行中。 理想情况下,内存的状态与CPU请求的所有操作都是最新的,每个有效的Cache行都保存一份正确的内存备份。...为了避免这种情况,你的程序必须在CPU尝试读取落在DMA缓冲区对应地址范围的数据前,主动失效对应Cache行中的内容。应该将DMA缓冲区的边界和Cache行的边界对齐,这样更容易管理。...所以,在CPU执行新写的代码指令之前,软件首先应该失效I-Cache中的相关行。 当然了,你也可以使用非Cache区域保存新的代码指令,然后执行它们。但是,这毕竟放弃了Cache的加速效果不是。...而且,不管是使用Cache程序地址,还是使用非Cache程序地址访问物理内存,一定要保证它的一致性。 4 Cache重影和页着色 我们在《MIPS高速缓存机制》一文中已经描述了Cache重影的根源。...具体的做法就是,假定page页的大小是4K,然后给每一个page页分配一个颜色(此处的颜色就是一种区分叫法而已,没有任何实际动作),使用虚拟地址的某几个比特位来标记颜色。

    1.3K10

    MIPS架构深入理解1-MIPS和RISC架构体系介绍

    虽说,优雅不足以让其在残酷的市场中固若金汤,但是,MIPS架构还是以最简单的设计成为每一代CPU架构中,执行效率最快的那一个。 作为一个从学术项目孵化而来的成果,简单的架构是MIPS架构商业化的需要。...同样的,如果我们保证指令执行的每一步都占用相同时间的话,那么这个流水线将是一个完美的高效流水线。但现实往往是残酷的,CPU的工作频率远远大于读写内存的工作频率(都不是一个量级)。...字节可以是任何地址,但是半字就必须是偶数地址对齐,WORD必须是4字节对齐的方式。CISC指令集架构的微处理器可以从任意地址处读取一个4字节的数据,代价就是需要多花费一些时钟周期。...MIPS指令中最小的操作码域是6位,为跳转的目的地址保留了26位。因为内存中的指令代码都是4字节对齐的,也就是说,最低2位不需要保存,那么允许访问的程序范围就是2^28,等于256MB。...如果是在没有可以安排的指令,可以添加一个nop指令。这也是我们经常在MIPS架构的汇编代码中看到的处理方式。

    8.2K21

    手摸手Go 你的内存对齐了吗?

    现代CPU对基本类型的合法地址做了一些限制,而且并不是一个字节一个字节得读取和写入内存的,而是以字(word)为单位 ,字长通常为16、32、64位。...除了上面提到的CPU访问数据性能问题外,当然网上很多都说还有一个原因“特定的硬件平台只允许在特定地址获取特定类型的数据,否则会导致异常情况” 不过这种情况我是没遇到过。...内存对齐的技巧 Go内存地址对齐 正如Go编程语言规范中描述,计算机体系结构可能需要内存地址对齐;也就是说,如果变量的地址是一个因子的倍数,则变量的类型就是对齐的。...其实想想也好理解,当空结构体放到内嵌结构体的最后一位,我们如果不给它分配内存,那么这个空结构体就指向了一个非法的地址,就像是C/C++中的野指针,Go应该是为了避免这种情况而特殊处理的。...被开辟可以解读为一个声明的变量、内置函数make或new返回的引用的值, 如果一个切片是从一个开辟的数组派生出来的并且此切片和此数组共享第一个元素,则我们也可以将此切片看作是一个开辟的值。

    55621

    浅析多模态机器学习

    对于单词、句子或段落这样的模态而言,有两种类型:书面(文本)和声音(转录)。举个例子,假设从一段文本中提取了一个单词,想要了解这是正面还是负面的情绪。该怎么做呢?...为了简单起见,可以使用one-hot向量,这是一个非常长的向量,其长度是字典的长度。这个字典是我们的模型从训练集中创建的,计算出它所发现的所有去重后的单词。对于每一个单词,在向量中有一个索引条目。...可以将输入向量变成一个词袋向量,但它仍然是一种one-shot编码,现在对目标文档中的每个单词进行编码,如果一个维度上有这个单词就是1,否则就是0。...每个前面的隐藏层的输出作为后面层的输入。 最后,我还有两个概念需要澄清: 推理:用于测试。推理可以被看作是通过输入获得评分/输出的过程。它既是获得这个分数的行为,也涉及到它的使用。...基于示例的模型将存储一个翻译词典,如上所示,然后将其从一种语言模态映射到另一种。在推理过程中,模型将从字典中提取最接近的匹配项,或通过推断字典提供的信息创建翻译。

    44021

    如何在十分钟内创建一个Chrome 插件

    打开 Chrome 浏览器,然后在地址栏中导航到 chrome://extensions/。 在页面右上角打开“开发者模式”开关。 点击现在可见的“加载未打包的扩展”按钮。...现在,为了测试功能,请导航到 ChatGPT,刷新页面,然后尝试输入您的限制词,看看扩展是否按预期行为。 如果一切都按计划进行,您应该会看到如下图所示的情况。...如果您对扩展代码进行了任何更改——例如更新单词列表——请确保点击扩展页面上扩展卡片右下角的环形箭头。这将重新加载扩展。然后,需要重新加载扩展正在针对的页面。...这可以通过一个弹出 UI(浏览器操作)来完成,该 UI 在点击扩展图标时打开,用户可以在其中管理他们的列表。您还需要将单词持久化到存储中。...我们从一个明确的目标开始:为 ChatGPT 创建一个保护层,确保敏感信息保密。在本教程中,我们看到了如何通过少量的文件和一些代码来实现一个功能强大且有用的浏览器扩展。

    82051

    【C++】C++入门 — 类和对象初步介绍

    只有我填了表并上交保存才是创建了一个新对象。完成了实例化。...这是如何计算出来的呢? 其实与结构体类似,具有相同的对齐规则, 第一个成员在与结构体偏移量为0的地址处。 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。...如果一个4字节的数据没有按照4字节对齐,处理器可能需要执行两次内存访问操作来获取完整的数据,这无疑会降低程序运行速度。...,函数体中没有关于不同对象的区分,那当d1调用默认构造函数时,该函数是如何知道应该设置today对象,而不是设置yesterday对象呢?...在常规情况下,当一个有效的对象调用其成员函数时,this指针不应该为空。

    12210

    MIPS架构深入理解2-MIPS架构体系

    所以,这个词体现的是设计和结构,也就是说,是一个抽象机器或通用模型概念上的描述,而不是一个真实机器的实现。这就好比一辆手动挡车,无论是前轮驱动还是后轮驱动,它的油门总是在右,离合器在左。...MIPS架构确实也提供了一个ulw宏指令,由两个指令组成,比一个个字节的加载,移位,再相加,更高效。还有一个宏指令ulh,使用2个load,一个移位和一个位或操作组合而成,提供非对齐的半字加载操作。...遵循MIPS/SGI规则的任何C编译器都会将double型浮点数按照8字节对齐。32位处理器没有这个对齐要求,但还是这样做是向后兼容:如果加载一个非8字节对齐的地址处的内容,64位CPU会陷入自陷。...如果我想加载一个立即数到寄存器中,需要先把立即数的地址拷贝到寄存器中,然后再使用load指令从相应的地址处加载立即数,需要两条指令。...本身,汇编程序就够晦涩了,现在我只想加载个立即数,还要让我记住两条指令,这太不人道了。所以,伟大的GNU工程中的汇编器提供了合成指令。

    5.8K20

    MIPS架构深入理解5-内存管理

    转换表中的每一项包含一个V**(虚拟地址页编号)和一个PFN(物理页帧编号)。当程序给出一个虚拟地址后,和TLB中的每一个V**进行比较,如果匹配,就给出对应的PFN。具体的比较复杂,由硬件电路实现。...所以,软件只是把TLB作为最近常用地址转换的一个缓存。当需要的地址转换不在TLB中时,产生异常,异常处理程序计算并加载正确的地址转换关系。...使用Index寄存器中的值作为索引, 正常情况下,这两个指令应该不常用。如果你确实修改了某个TLB项,记得恢复ASID域的值,因为该域的值也会被覆盖掉。...4.1 重填过程 如果程序试图访问任何需要转译的地址(通常是用户态使用的地址空间kuseg和内核态使用的kseg2段),如果TLB表中没有对应的转换映射,CPU就会发出一个TLB重填异常。...当相关的状态位(用户模式的SR(UX)标志位)被置位时,TLB未命中异常使用一个不同的向量,那应该是一个加载巨大地址空间转换表的例程。

    1.9K20

    再谈Android动态链接库

    前不久,我们准备将自己开发的视频播放sdk提供给公司其他部门,在打包的时候,同事问了我一个问题,为什么我们打sdk的时候需要分别提供armeabi和arm64-v8a(ps,还有其他7种CPU架构)。...其实这是一个常识问题,针对不同的架构我们肯定要提供不同的动态链接库,所以,在实际开发过程中,我们并不是将这7种so库都集成到我们的项目中去,我们会根据实际情况做一个取舍。...,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。...ABI和CPU的关系 在使用so库应该注意:很多设备都支持多于一种的ABI,当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。...但是我们在使用不同环境进行编译的时候应该做到以下几点: 当只有一个.so文件时,静态编译C++运行时是没问题的 当存在多个.so文件时,应该让所有的.so文件都动态链接相同的C++运行时。

    2.5K70

    10个大型语言模型(LLM)常见面试问题和答案解析

    上下文通常由句子本身和它所属的更广泛的文档提供,而不是单独的向量存储。 3、以下哪一项不是专门用于将大型语言模型(llm)与人类价值观和偏好对齐的技术?...虽然优化期望行为是RLHF的预期结果,但它并不代表reward hacking。选项A描述了一个成功的训练过程。...A.限制词汇量 B.减少训练数据量 C.提高计算效率 答案:A llm处理大量的文本,如果考虑每一个单词,就会导致一个非常大的词表。...Top-k C.Temperature 答案:C 在文本生成过程中,大型语言模型(llm)依赖于softmax层来为潜在的下一个单词分配概率。...更高的温度“软化”了概率分布,使其他不太可能出现的单词更具竞争力。 最大新令牌数仅定义LLM在单个序列中可以生成的最大单词数。top -k采样限制softmax层只考虑下一个预测最可能的前k个单词。

    50910

    MIPS架构深入理解4-Cache机制

    1 引言 现代CPU中,为了提高CPU的执行效率,高速缓存必不可少。关于Cache工作原理可以参考我之前的文章 与ARM等架构相同,MIPS架构CPU也是采用多级cache。...6 管理Cache 在之前的文章中,我们已经知道MIPS架构的CPU有两个固定大小的512MB的内存空间可以映射到物理内存上。其中,一个称为kseg0,另一个称为kseg1。...这种情况下,CPU无法知晓它应该从Cache上获取最新数据。 所以,在DMA设备启动从内存读取数据之前,如果所访问的数据在Cache中,必须写回到内存中,不论是不是被修改过。...抖动 在四路组相关联的Cache中(更多路的情况在MIPS架构CPU中很少见),有四个位置可以保存特定内存位置上的数据。(对于直接映射Cache,仅有一个)。...这样,如果程序访问地址0处的数据,就会加载该数据到某个Cache索引为0的位置。如果此时再从另一个地址4K处访问同一个物理内存上的数据,再次从内存中取出数据加载到Cache索引为4K的位置。

    2.7K31

    数据对大型语言模型(LLM)整个生命周期的影响!

    在此过程中,语言模型会接触到未标记文本数据的语料库,并使用标准语言建模目标进行训练。简而言之,这意味着需要我们通过从数据集中采样一些文本,来训练模型预测下一个单词。...这种预训练过程是自我监督学习的一种形式,因为只需查看数据集中的下一个单词就可以确定正确的“下一个”单词。...LLMs对齐  预训练完成后,就有了一个“基础模型”,或者说是一个尚不具备任何专业能力的通用LLM。为了赋予模型对话、遵循指令等的能力,还必须对这个模型进行调整,或者训练它来模仿人类用户所需的行为。...那么,对齐的目的是什么?对齐是一个非常活跃的研究领域。目前,研究界正在讨论如何更好地理解对齐的作用。...在GPT-4的分析中,我们看到像RLHF这样的对齐技术的作用是让LLM更加可操纵和有趣,而不是教授模型新的信息。事实上,模型所拥有的大部分知识似乎都来自于预训练。

    1.6K40

    如何在Linux上获得错误段的核心转储

    这可能是由于: 试图解引用空指针(你不被允许访问内存地址 0);◈ 试图解引用其他一些不在你内存(LCTT 译注:指不在合法的内存地址区间内)中的指针;◈ 一个已被破坏并且指向错误的地方的 C++ 虚表指针...,如 MIPS、ARM 中更容易因非对齐访问产生段错误)。...一旦我这样做了,当我执行 bt 时,gdb 给了我一个带有行号的漂亮的堆栈跟踪! 如果你想它能工作,二进制文件应该以带有调试符号信息的方式被编译。...本文中我不准备讨论那个,因为本文已经相当长了,并且在我的例子中打开 ASAN 后段错误消失了,可能是因为 ASAN 使用了一个不同的内存分配器(系统内存分配器,而不是 tcmalloc)。...在未来如果我能让 ASAN 工作,我可能会多写点有关它的东西。(LCTT 译注:这里指使用 ASAN 也能复现段错误) 从一个核心转储得到一个堆栈跟踪真的很亲切!

    4.1K20
    领券