我想测量主存带宽,在寻找方法的同时,我发现,
许多bandwidth.
bcopy‘函数将字节从一个源复制到目标,然后测量它们报告的时间,方法是分配和数组,并遍历数组(有一定的步调)--这基本上给了读取整个数组的时间。我尝试(1)做1GB的数据大小,我得到的带宽是‘700 1GB/秒’(我使用rdtsc来计算副本经过的周期数)。但我怀疑这是不正确的,因为我的RAM配置如下:
根据wikipedia,理论带宽计算如下:
时钟速度*总线宽度*每行时钟周期#位(DDR3ram为2) 1333 MHz * 32 *2 ~= 8GB/秒。
所以我的和估计的带宽完全不同。知道我做错什么了吗?
=========
另一个问题是,抄写既包括读又写。那么,这是否意味着我应该把计算出来的带宽除以二,才能得到读带宽还是写带宽呢?我想确认一下,带宽是否只是延迟的反义词?请建议其他测量带宽的方法。
发布于 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并遍历整个程序。您可以将数组的每个元素加在一起并打印出来,这样编译器就不会认为它是死代码。
就像这样:
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);https://stackoverflow.com/questions/8107739
复制相似问题