内存带宽

内存带宽是处理器可以从内存读取数据或将数据存储到内存的速率。内存带宽通常以字节/秒为单位表示，但对于自然数据大小不是8位的倍数的系统，这可能会有所不同。

为给定内存或系统决定的内存带宽通常是最大理论带宽。实际中的内存带宽将小于（并且不可能超过）所决定的带宽。存在各种基准测试以使用各种访问模式来测量持续内存带宽。这些旨在提供对系统在各类实际应用程序上应支持的内存带宽的深入了解。

测量惯例 
在“字节/秒”定义的传输数据量中有三种不同的约定：

 bcopy约定：计算每单位时间从内存中的一个位置复制到另一个位置的数据量。例如，在1秒内将100万字节从内存中的一个位置到另一个位置将被计为100万字节/秒。bcopy约定是自洽的，但不容易扩展，以适用具有更复杂访问模式的情况，例如三次读取和一次写入。
 STREAM约定：计算应用程序代码显式读取的数据量和应用程序代码显式写入的数据量之和。以之前的100万字节复制为例，STREAM带宽将计为1秒内读取的100万字节加上写入的1百万字节，总计每秒200万字节。STREAM约定与用户代码最直接相关，但可能无法统计硬件实际需要执行的所有数据流量。 
 硬件约定：计算硬件读取或写入的实际数据量，无论数据动作是否由用户代码明确请求。以相同的100万字节复制为例，具有写分配高速缓存策略的计算机系统上的硬件带宽将会多出100万字节的流量，因为硬件在执行存储之前将目标从内存读取到高速缓存中。这使得硬件实际传输总计每秒300万字节。硬件约定与硬件直接相关，但可能不代表实现用户代码所需的最小数据流量。 

 例如，一些计算机系统能够使用特殊指令避免写入分配流量，从而可能导致基于所执行的不同数据流量的误导。

带宽计算和命名 
命名方式因内存技术而异，但对于商用DDR SDRAM ， DDR2 SDRAM和DDR3 SDRAM内存，总带宽是以下值之乘积： 

 基本DRAM时钟频率
 每时钟的数据传输次数：在“双倍数据速率”（DDR、DDR2、DDR3、DDR4）内存的情况下是两次 
 内存总线（接口）带宽：每个DDR、DDR2或DDR3内存接口都是64位。有时也被称为1个“行” 
 接口数量 ：现代PC通常使用两个内存接口（双通道模式）来实现有效的128位总线带宽 

例如，一个计算机有两个通道的内存，每通道都配备运行在400MHz时钟频率的DDR2-800模块，则其理论最大内存带宽为： 

 每秒400,000,000个时钟×每个时钟2个通道×每行64个位×2个接口= 

 每秒102,400,000,000（1024亿）比特（也就是12,800MB/s或12.8GB/s） 

但是该理论最大内存带宽被称为“突发速率”，是不可持续的。 

DDR，DDR2和DDR3模块的命名约定指定了最大速度（例如，DDR2-800）或最大带宽（例如，PC2-6400）。速度等级（800）不是最大时钟速度，而是它的两倍（1600，因为数据速率是加倍的）。带宽等级（6400）是使用64位每秒传输的最大兆字节数。在双通道模式中，这实际上是128位。因此，示例中的内存配置可以简化为：两个DDR2-800模块以双通道模式运行。 

PC系统内存的常见配置是每个内存条都有两侧内存接口，但在较旧、低端或低功耗设备中，单通道内存也很常见。一些PC和大多数现代图形卡还会使用两个以上的内存接口（例如，Intel的LGA 2011平台和英伟达 GeForce GTX 980有四个内存接口）。并行运行多个接口的高性能显卡可以获得非常高的内存总线带宽（例如，NVIDIA GeForce GTX TITAN的384位和AMD Radeon R9 290X的512位，分别使用了六个和八个64位接口）。

ECC位 
在具有纠错内存 （ECC）的系统中，接口的额外带宽（通常为72而不是64位）不会被计入带宽规范中，因为用于纠错的位不能用于存储用户数据。  纠错位会被认为是内存硬件自身的一部分，而不是存储在该硬件中的信息。

参见 

 
 动态随机存取存储器
 设备带宽列表
 
 记忆时间
 随机存取存储器

参考 
BSS Random Access Benchmark Performance Evaluation and Optimization of Random Memory Access on Multicores with High Productivity at ACM/IEEE HiPC 2010

外部链接 

 STREAM Benchmark 
 Memory Buy the Numbers 
電腦記憶體
有未审阅翻译的页面