您的位置:首页 > 其它

典型 PC 系统各种操作指令的大概时间

2012-08-30 10:18 253 查看
典型 PC 系统各种操作指令的大概时间

  execute typical instruction

  执行基本指令

1/1,000,000,000 sec = 1 nanosec
  fetch from L1 cache memory

  从一级缓存中读取数据

0. 5 nanosec
  branch misprediction

  分支误预测

5 nanosec
  fetch from L2 cache memory

  从二级缓存获取数据

7 nanosec
  Mutex lock/unlock

  互斥加锁/解锁

25 nanosec
  fetch from main memory

  从主内存获取数据

100 nanosec
  send 2K bytes over 1Gbps network

  通过 1G bps 的网络发送 2K 字节

20,000 nanosec
  read 1MB sequentially from memory

  从内存中顺序读取 1MB 数据

250,000 nanosec
  fetch from new disk location (seek)

  从新的磁盘位置获取数据(随机读取)

8,000,000 nanosec
  read 1MB sequentially from disk

  从磁盘中顺序读取 1MB 数据

20,000,000 nanosec
  send packet US to Europe and back

  从美国发送一个报文包到欧洲再返回

150 milliseconds = 150,000,000 nanosec
一般来说。CPU需要0个周期来访问其寄存器,1-30个周期来访问高速缓存,50-200个周期来访问主存。

对于Intel Core i7来说。这个值可以很具体。Intel Core i7的主频约在2-3GHz。可以计算出。

L1—指令缓存L1-数据缓存L2-缓存L3-缓存内存
访问周期441130-4050-200
缓存大小32KB32KB256KB8MB若干GB
访问时间2ns2ns5ns14-18ns24-93ns
也就是说,访问内存的时间是ns级别的。

再来看看磁盘。

磁盘的访问时间=寻道时间+旋转延迟+数据传输时间。对于普通的7200转STAT磁盘。这个值是:9ms+4ms+0.02ms=13.02ms。

也就是说,如果从磁盘随机访问一个字节,需要13.02ms,比从内存获取的时间24-93ns,至少要多14万倍。相差5个数据级,何其巨大的差距。

顺序读写磁盘会快一些。 假设一个盘片有1000个扇区,每个扇区512字节,7200转。顺序读可以忽略掉寻道的时间。所以吞吐量是 扇区数×扇区大小×转速=1000*512/(60/7200)=58MB/s。这个数据似乎不咋样。如果使用多盘系统。STAT II的接口,吞吐量可以达到300MB/s。追求极限性能可以mount裸盘直接操作多盘。



总结。

这些数据都不一定是所用机器的真实数据,但根据比例关系,可以了解到各个流程中的大概耗时。对于写的程序,也有一些参考依据。

不过若是实际项目,还是需要了解所用机器的真实性能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: