|
2
|
| HaggarTheHorrible · 技术社区 · 15 年前 |
|
|
1
3
处理器使用内部缓存(实际上是多个缓存),它可以“全速”访问。缓存很小(通常为8到32千字节),由外部RAM中的块(“缓存线”)填充(缓存线将是几十个连续的字节)。当代码需要一些当前不在缓存中的数据时,处理器将不得不从主RAM中提取行;这称为 缓存未命中 . 从主RAM获取缓存线的速度由两个参数描述,称为 延迟 和 带宽 . 延迟是处理器发出请求和接收第一个缓存线字节之间的时间量。典型的延迟约为30ns。在800兆赫时,30ns意味着24个时钟周期。带宽描述了在总线上每纳秒可以发送多少字节。”200兆赫DDR2”表示总线时钟将以200兆赫运行。DDR2 RAM每个周期可以发送两个数据元素(因此每秒可发送4亿个元素)。带宽则取决于CPU和RAM之间有多少条线:使用64位总线和200兆赫DDR2 RAM,您可以希望在理想条件下达到3.2千兆字节/秒。因此,尽管第一个字节需要相当长的时间才能获得(CPU所能做的事情的延迟很高),但是缓存线的其余部分读取得相当快。 另一个方向:CPU将一些数据写入其缓存,一些电路会在空闲时将修改内容传播到主RAM。 上面的描述过于简单;缓存和缓存管理是一个复杂的领域。底线是:如果您的代码在内存中使用大数据表,并且以一种看似随机的方式访问它们,那么应用程序将变慢,因为大多数时候处理器将只等待来自主内存的数据。另一方面,如果您的代码可以在不到几十个千字节的小内存中运行,那么很有可能它大部分时间都会在最内部的缓存中运行,而外部RAM的速度将不重要。以一种对缓存运行良好的方式进行内存访问的能力被称为 参考位置 . 查看 Wikipedia page on caches 关于缓存的介绍和指针。 (在80年代,大的预计算表是一种常见的优化技巧,因为那时处理器的速度不超过RAM,而单周期内存访问是规则。这就是为什么8兆赫摩托罗拉68000的CPU没有缓存。但这些日子早已过去。) |
|
2
0
是的,内存可能是一个瓶颈,但您不太可能运行这样的应用程序 没有什么 但是读写记忆。 在CPU内部,内存瓶颈不会产生影响。 |
|
|
Coder117 · 管道中的MIPS lw延迟 8 年前 |
|
|
Omar Aflak · 在处理器中找不到Javapoet 9 年前 |
|
|
gshepherd7 · Camel动态构建处理器bean调用 9 年前 |
|
|
Trace · NodeJS:理解非阻塞/事件队列/单线程 11 年前 |
|
|
0x90 · 在aCPU上运行OpenCL代码有什么好处?[已关闭] 12 年前 |
|
|
vkulkarni · Q(饱和标志)在ARM中的重要性 12 年前 |