《深入理解计算机系统》的原文摘录

  • For example, if the request in Figure 9.34(e) were for six words rather than two words, then the request could not be satisfied without requesting additional virtual memory from the kernel, even though there are six free words remaining in the heap. The problem arises because these six words are spread over two free blocks. (查看原文)
    wangwangwar 2011-12-18 16:23:14
    —— 引自第853页
  • 例如,如果图 9-34e 中的请求要求 6 个字,而不是 2 个字,那么如果不向内核请求额外的虚拟存储器就无法满足这个要求,即使在堆中仍有 6 个空闲的字。问题的产生是由于这 6 个字是分在两个空闲块中的。 (查看原文)
    wangwangwar 2011-12-18 16:23:14
    —— 引自第853页
  • B. Why does this call to function xor_swap set the array element to 0 ? (查看原文)
    wangwangwar 1回复 2011-12-19 19:31:02
    —— 引自第86页
  • 这将告诉编译器,程序应把这个指针看成指向一个字节序列,而不是指向一个原始数据类型float的对象。然后,这个指针将会指向对象使用的最低字节地址。 一般来说,表达式sizeof(T)返回存储一个类型为T的对象所需要的字节数。 (查看原文)
    一直往南方开 2012-01-10 17:09:23
    —— 引自第31页
  • 如何编写出编译器能够有效优化以转换成高效可执行代码的源代码: 1、消除循环的低效率 2、减少过程调用 3、消除不必要的存储器引用 4、还没读到,待续、、、 (查看原文)
    idea 2012-02-10 11:38:05
    —— 引自第332页
  • 在计算机科学中,用巧妙的方法在提高性能的同时,又保持一个更简单、更抽象模型的功能,这种思想是众所周知的。在Web浏览器或平衡二叉树和哈希表这样的信息检索数据结构中使用缓存,就是这样的例子。 (查看原文)
    Windsper 2012-02-24 21:10:41
    —— 引自第230页
  • 这里就是计算机系统中一个基本而持久的思想:如果你理解了系统是如何将数据在存储器层次结构中上上下下移动的,那么你就可以编写你的应用程序,使得它们的数据项存储在层次结构中较高的地方,在那里CPU能更快得访问到它们。 (查看原文)
    Windsper 2012-02-24 21:53:13
    —— 引自第382页
  • 就像我们将在第3章中看到的那样,Intel兼容的处理器上的leal指令能够执行a<<k+b形式的计算,这里k等于0、1或2,而b等于0,或者等于某个程序值。编译器常常用这条指令来执行常数因子乘法。例如,我们可以用a<<1+a来计算3*a。 用这条指令可以计算a的哪些倍数? (查看原文)
    yym 1回复 2012-04-23 23:47:39
    —— 引自第63页
  • As we will see in Chapter 3, the lea instruction can perform computations of the form (a<<k)+b, where k is either 0, 1, 2, or 3, and b is either 0 or some program value. The compiler often uses this instruction to perform multiplications by constant factors. For example, we can compute 3*a as (a<<1) + a. Considering cases where b is either 0 or equal to a, and all possible values of k, what multiples of a can be computed with a single lea instruction? (查看原文)
    yym 1回复 2012-04-23 23:47:39
    —— 引自第63页
  • 如果你的计算机运行的是 Microsoft Windows 系统,你有两种选择:一种是获取一个 Linux 的拷贝(参见 www.ubuntu.com),然后安装 Linux 作为“双重启动”的一个选项,这样你的机器就能运行其中任意一个操作系统了;另一种是通过安装 Cygwin 工具(www.cygwin.com),你就能在 Windows 下得到一个类似 Unix 的外壳(shell)以及一个非常类似于 Linux 所提供的环境。不过,Cygwin 并不能提供所有的 Linux 功能。 (查看原文)
    银河 2012-05-03 19:01:28
    —— 引自第6页
  • 因此我们合并这两个信号,将它们作为信号 valA 携带穿过流水线,从而减少流水线寄存器的状态数量。这样做就消除了 SEQ (见图4-23) 和 SEQ+ (见图4-40) 中标号为“Data”的块,这个块完成的是类似的功能。在硬件设计中,像这样仔细确认信号是如何使用的,然后通过合并信号来减少寄存器状态和线路的数量,是很常见的。 (查看原文)
    银河 2012-05-12 11:26:57
    —— 引自第278页
  • 例如,当表明一个系统有“4GHz”处理器,这表示处理器时钟运行频率为4x10^9千兆赫兹。 (查看原文)
    银河 2012-05-12 20:09:34
    —— 引自第328页
  • A. 在没经过优化的代码中,寄存器 %xmm0 简单地被用作临时值,每次循环迭代中都会设置和使用。在经过更多优化的代码中,它被使用的方式更像 combine4 中的变量 x,累积向量元素的乘积。不过,与 combine4 的区别在于每次迭代第二条 movss 指令都会更新位置 dest。 (查看原文)
    银河 2012-05-12 21:04:34
    —— 引自第378页
  • 总结一下 combine4 的性能分析,我们对程序操作的抽象数据流表示,说明 combine4 的关键路径长 L·n,是由对程序值 acc 的连续更新造成的,这条路径将CPE限制为最多L。除了整数加法之外,对于所有的其他情况,测量出的CPE确实等于L,对于整数加法,测量出的CPE为2.00而不是根据关键路径的长度所期望的1.00。 (查看原文)
    银河 2012-05-12 22:41:12
    —— 引自第347页
  • 图5-22 k 次循环展开和 k 路并行时的 CPE 性能。采用这种变换,所有的 CPE 都有提高,最高到达限定值 1.00 (查看原文)
    银河 2012-05-15 20:50:35
    —— 引自第352页
  • 图5-27 使用 k 次循环展开和重新结合的 CPE 性能。采用这种变换,所有的 CPE 都有改进,最高到限制值 1.00 (查看原文)
    银河 2012-05-15 20:54:56
    —— 引自第355页
  • 对于整数乘法和浮点运算,我们看到 CPE 值接近于 L/k,这里 L 是操作的延迟,最高到达界限 1.00。我们还看到整数加法当 k = 3 时,CPE 为 1.00,达到吞吐量界限和延迟界限。 (查看原文)
    银河 2012-05-15 20:57:18
    —— 引自第356页
  • 在 4.5.10 节中我们看到,条件传送指令可以被实现为普通指令流水线化处理的一部分。没有必要猜测条件是否满足,因此猜测错误也没有处罚。 (查看原文)
    银河 2012-05-15 21:00:49
    —— 引自第361页
  • This is an example of register spilling: there are not enough registers to hold all of the needed temporary data, and hence the compiler must keep some local variables in memory. (查看原文)
    晨星 2012-07-06 21:02:06
    —— 引自第240页
  • In general, reading from memory can be done more readily than writing to memory, and so spilling read-only variables is preferable. (查看原文)
    晨星 2012-07-06 21:04:05
    —— 引自第240页
<前页 1 2 3 4 5 6 7 8 9 ... 17 18 后页>