我想测量主内存带宽,在寻找方法时,我发现了,
bcopy
'函数将字节从源复制到目标,然后测量它们作为带宽报告的时间。我尝试做1(1)数据大小为1GB,我得到的带宽为'700MB /秒'(我使用rdtsc
计算副本经过的周期数)。但我怀疑这是不正确的,因为我的RAM配置如下:
根据维基百科,理论带宽计算如下:
时钟速度*总线宽度*每行每个时钟周期的#位数(ddr 3为2) ram)1333 MHz * 32 * 2~ = 8GB / sec。
因此我的估计带宽完全不同。我知道我做错了什么?
======
其他问题是,bcopy涉及读写。那么这是否意味着我应该将计算出的带宽除以2以仅获得读取带宽或仅写入带宽?我想确认带宽是否只是延迟的倒数?请建议任何其他测量带宽的方法。
答案 0 :(得分:1)
我不能评论bcopy的有效性,但最简单的方法是你说的第二种方法(步幅为1)。此外,您在内存带宽等式中将位与字节混淆。 32位= 4字节。现代计算机使用64位宽的内存总线。所以你的有效传输速率(假设DDR3技术)
1333Mhz * 64bit /(8bits / byte)= 10666MB / s(也归类为PC3-10666)
1333Mhz已经考虑了2个传输/时钟。
查看维基页面以获取更多信息: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);