computer-architecture相关内容

缓存是如何工作的?

今天,当我在电脑组织课上,老师讲到我的一些有趣的事情。当谈到谈论为什么高速缓冲存储器的作品,他说: 为(i = 0; I<米;我++) 为(J = 0; J< N; J ++) X [I] [J] = X [I] [J] + K; // X为双(8字节) 这是不好的改变与第二的第一行。请问您对这个观点?而且为什么是这样呢? 解决方案 引用的局部性。由于数据是 ..
发布时间:2016-08-19 16:25:17 C/C++

是否有一个code,它导致50%的分支prediction小姐?

问题: 我试图找出如何写一个code(C preffered,ASM只有在没有其他解决方案),那会使50%的分支prediction小姐病例 所以它是一块code认为“是imune”编译器相关的分支,也是所有硬件分支prediction不应该去更好的超过50%的优化(掷硬币)。即使是一个更大的挑战是能在多CPU架构运行code和得到同样的50%的失败率。 我好不容易写一个code,它去的 4 ..

编写一个程序来获得(L1)高速缓存行大小

作为学校作业,我需要找到一种方式来获得L1数据高速缓存行的大小,无需读取配置文件或使用API​​调用。应该使用内存访问读/写时序分析和放大器;得到这个信息。所以,我怎么可能这样做吗? 在一个不完整的拉升分配的另一部分,找到水平和放大器;缓存大小,我有: 为(i = 0; I<步骤;我++){ ARR [(我* 4)及lengthMod] ++; } 我想也许我只需要改变线条2 ..
发布时间:2016-08-19 15:40:44 C/C++开发

什么内存地址空间,有哪几种?

已经使用什么样的内存地址空间的形式? 今天,大平面的虚拟地址空间是常见的。从历史上看,更复杂的地址空间已被使用,诸如一对基地址和偏移量,一对一段号和偏移量,一个字地址加上一些指数为一个字节或其他子对象,等 随着时间的时候,各种各样的回答和评论断言,C / C ++指针基本上都是整数。这是C / C ++的型号不正确,因为各种各样的地址空间的无疑是一些关于指针操作的C规则的原因。例如,如果不定义 ..
发布时间:2016-08-18 22:17:08 C/C++开发

对准高速缓存行,并知道高速缓存行大小

要prevent假共享,我想一个数组中的每个元素对齐高速缓存行。所以首先我需要知道的高速缓存行的大小,所以我分配每个元素的字节量。其次我想数组的开始到对齐的高速缓存行。 我使用Linux和8核x86平台。首先我怎么找到的高速缓存行的大小。其次,我怎么对准C中的高速缓存行我使用gcc编译器。 因此​​,结构将以下,例如,假设64的高速缓存行的大小。 元素[0]占据0-63字节 元件[1]占据字 ..

çvolatile变量与高速缓存

缓存由缓存硬件控制透明地处理,所以如果我们在C程序中使用volatile变量,它是如何保证我的程序从实际的内存地址指定,但不缓存每次读取数据。 我的理解是, volatile关键字告诉编译器变量引用不应该进行优化,如code编程应该读。 高速缓存是由高速缓存硬件透明控制,因此,当处理器发出一个地址,它不知道该数据是否从高速缓存或存储器来。 所以,如果我有不必去阅读,每次都需要一 ..
发布时间:2016-08-18 13:51:05 C/C++

如何编写C / C ++ code正常工作时的空指针是不是所有的零位

由于 comp.lang.c常见问题解答说,有架构,其中空指针是不是所有的位零。所以,问题是什么是真正检查以下结构: 无效* P = get_some_pointer(); 如果(!P) 返回; 我是不是比较 P 与机器相关的空指针还是我比较 P 与算术0? 我应该写无效* P = get_some_pointer(); 如果(NULL == p)的 返回; 而不是要准备 ..
发布时间:2016-08-17 22:19:55 C/C++开发

它的malloc可以分配的最大内存

我是想弄清楚我是多么的内存可以到的malloc最大程度上我的机器 (1 GB RAM 160 GB HD Windows平台)。 我读到的最大内存的malloc可以分配仅限于物理内存(堆)。 此外,当一个程序超过了内存消耗到一定程度时,电脑停止工作,因为其他应用程序没有得到足够的内存,它们需要。 所以要确认,我用C写了一个小程序: INT的main(){ INT * P; ..

系统,1个字节!= 8位?

所有时间我喜欢读的句子 不靠1个字节是大小为8位 使用 CHAR_BIT 而不是8作为常数比特和字节之间的转换 等等。什么是真正的生活系统今天在那里,这也是如此? (我不知道是否有++对此C和C之间的差异,或者如果它实际上是语言无关的,请重新标记,如果neccessary。) 解决方案 在老机器,codeS小于8位是相当普遍的,但其中大部分都已经死了好几年了。 C和C ..
发布时间:2016-08-17 20:32:54 C/C++开发

为什么符号字节的范围是从-128到127(2的补数),而不是从-127到127?

我读 为什么字节-128到127的范围内在Java中? 它说: 128 10000000倒,它是01111111,并添加一个得到 千万再次 所以它的结论是-128千万 所以+128不能重新在8比特2的补psented $ P $,但是这意味着我们可以在9位重新present,所以128是0.1亿,因此利用其2的补-128是1.1亿, 所以重新-128 10000000或其1. ..

不应该R3持有地址x3307?

我从问题7 我不应该强调的地址必须x3307,x3308不? 我推断这一点的方式是,(第2个指令之前PC)=(1指令后PC)。 1日指令后PC为X3301。第二指令执行。因此,当时,PC,X3301将由6递增以x3307 是否每个人都同意吗?还是我错过了什么和R3应实际存储x3308? 解决方案 PC相对偏移的已经递增的PC的顶端施加,即在PC的值“后”,或者换句话说,所述的地址接 ..

什么是错的这条线LC3 code的?

我在做模拟考试的问题。 问题是 这有什么错在此行LC3 code的? (出演线) ADD R3,R3,0; ** BRNZ ISPOS ** 停 .BLKW 250 ISPOS不R3,R3 .... 我看到星号线是科和条件codeS为负,零,基本上去标签ISPOS如果条件code为负或零或以其他方式阻止该程序。 我要说的是,这条线LC3 code有什么不妥的地方。有没有人看到它的 ..

可以分支prediction崩溃我的程序?

走这本书,叫计算机系统结构的低谷第3章:一个程序员的角度来看,更说明了像执行 为test1%EAX,EAX% cmovne(%EAX),EDX% 是无效的,因为如果prediction失败,那么我们将不得不取消引用NULL。它也指出,我们应该使用分支code。 然而,将未使用条件跳转导致相同的结果?例如: .L1: JMP *%eax中为test1%EAX,EAX% JNE .L1 是否 ..

为什么我们需要为服务器和放大器不同的CPU体系结构;微型/大型主机和功放;混合内核?

我只是想知道还有什么其他CPU架构比INTEL&放其他可用的; AMD。因此,发现CPU架构的名单在维基百科上的。 它归类值得注意的CPU架构分为以下几类。 嵌入式CPU架构 微电脑CPU架构 工作站/服务器的CPU架构 迷你/大型机CPU架构 混合核CPU架构 我分析他们的目的,很少有疑虑。以微电脑CPU(PC)架构为基准,比较它与其他我们有: 嵌入式CPU架构: ..

眼看说明如何获得翻译(计算机体系结构)

一个令人困惑的问题点点。但是我真的找学习一些低层次的编程。事情是,开发板一样的Arduino /等。真的隐藏了很多的怎么回事。 我已经花了一些时间来学习计算机体系结构,逻辑/门/时序逻辑/等。(我去甚至远学半导体以及电子有关的所有的物理,只知道到底是怎么回事上,以及盖茨是如何使用的CMOS晶体管等等)制成。 但是关于它的尽头....我希望能够了解一个指令(像六角/或组件/等。code)通过简单 ..
发布时间:2016-07-18 20:38:15 .NET Framework

什么是剥离的ASCII模板是什么意思?

我正在练习考试题 问题 在此程序的执行中,用户输入两个数字。什么是xGuess的价值,所以我们可以脱光ASCII模板?解释。 .orig这样X3000 TRAP X23 LD R2,ASCII ADD R1,R2,R0 TRAP X23 ADD R0,R0,R2 ADD R0,R0,R1 .fill伪ASCII xGuess 。结束 使用 LC3大会中作为参考,我能够制定这一计划做什么 ..

空操作处理的英特尔处理器

诚然,我都有点愚蠢的问题。基本上,我想知道如果 也有采用Intel处理器能够有效地提供了一些特殊的机制 执行一系列假人,即NOP指令?举例来说,我能想象有 可能是某种pre取标识瑞尔机制,他们丢弃 并试图代替取一些有用的指导。或者,这些瑞尔出动 到执行单元为正常的指令,这意味着我可以大致过程 5 NOP指令每个周期(假设下,有5执行单元) 谢谢, 莱因哈德 解决方案 丢弃它 ..

如何做一个的LEA指令店地址?

这是基于关闭这个问题 LEA指令 下面是code段我有一个关于问题 .orig这样X3700 LEA R0,A ..... .fill伪一X1234 @保罗R,答案应答,表示“code的起源是x3700,你有12个指令,所以A的地址将是x3700 + X0C = x370C。正如你猜到了,LEA R0 ,A加载进R0的地址,这样第一个指令已经执行后R0将包含x370C。“ 我同 ..
发布时间:2016-07-18 20:03:28 .NET Framework