首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主存带宽测量

主存带宽测量
EN

Stack Overflow用户
提问于 2011-11-12 21:38:20
回答 1查看 4.8K关注 0票数 3

我想测量主存带宽,在寻找方法的同时,我发现,

许多bandwidth.

  • Others

  • 使用'bcopy‘函数将字节从一个源复制到目标,然后测量它们报告的时间,方法是分配和数组,并遍历数组(有一定的步调)--这基本上给了读取整个数组的时间。

我尝试(1)做1GB的数据大小,我得到的带宽是‘700 1GB/秒’(我使用rdtsc来计算副本经过的周期数)。但我怀疑这是不正确的,因为我的RAM配置如下:

  1. 速度: 1333 MHz
  2. 总线宽度:32位

根据wikipedia,理论带宽计算如下:

时钟速度*总线宽度*每行时钟周期#位(DDR3ram为2) 1333 MHz * 32 *2 ~= 8GB/秒。

所以我的和估计的带宽完全不同。知道我做错什么了吗?

=========

另一个问题是,抄写既包括读又写。那么,这是否意味着我应该把计算出来的带宽除以二,才能得到读带宽还是写带宽呢?我想确认一下,带宽是否只是延迟的反义词?请建议其他测量带宽的方法。

EN

回答 1

Stack Overflow用户

发布于 2012-08-28 20:20:50

我不能对bcopy的有效性发表评论,但最直接的方法是您所述的第二个方法(步调为1)。此外,在内存带宽方程中,您将位与字节混淆。32位=4字节。现代计算机使用64位宽内存总线。那么您的有效传输速率(假设DDR3技术)

1333 PC3*64位/(8位/字节)= 10666MB/s (也称为PC3-10666)

1333兆赫已经有了2传输/时钟的因素。

查看wiki页面以获得更多信息:http://en.wikipedia.org/wiki/DDR3_SDRAM

对于您的结果,请使用数组访问重试。Malloc 1GB并遍历整个程序。您可以将数组的每个元素加在一起并打印出来,这样编译器就不会认为它是死代码。

就像这样:

代码语言:javascript
复制
double time;
int size = 1024*1024*1024;
int sum;
*char *array = (char*)malloc(size);
//start timer here
for(int i=0; i < size; i++)
  sum += array[i];
//end timer
printf("time taken: %f \tsum is %d\n", time, sum);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8107739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档