gpt4 book ai didi

bandwidth - 主存带宽测量

转载 作者:行者123 更新时间:2023-12-04 16:45:55 24 4
gpt4 key购买 nike

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


许多使用“ bcopy”功能将字节从源复制到目标,然后测量它们报告为带宽的时间。
其他方法是分配和排列数组并逐步遍历数组(有些步伐)-这基本上给了读取整个数组的时间。


我尝试对数据大小为1GB进行(1),并且获得的带宽为“ 700MB /秒”(我使用rdtsc来计算复制所经过的周期数)。但是我怀疑这是不正确的,因为我的RAM配置如下:


速度:1333 MHz
总线宽度:32bit


根据维基百科,理论带宽的计算如下:


时钟速度*总线宽度*每行每个时钟周期的位数(对于DDR 3为2
内存)1333 MHz * 32 * 2〜= 8GB /秒


因此,我的与估计带宽完全不同。知道我在做什么错吗?

=========

另一个问题是,bcopy涉及读取和写入。那么,这是否意味着我应该将计算出的带宽除以二,以获得仅读取或写入带宽?我想确认带宽是否只是延迟的倒数?请提出其他测量带宽的方法。

最佳答案

我无法评论bcopy的有效性,但是最直接的方法是您声明的第二种方法(跨度为1)。此外,您在内存带宽公式中会将位与字节混淆。 32位= 4字节。现代计算机使用64位宽的内存总线。因此,您的有效传输速率(假设使用DDR3技术)

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

1333Mhz已经考虑了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);

关于bandwidth - 主存带宽测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com