常见内存性能测试工具学习记录
·
1、stream
测试四项
- COPY:纯内存复制(
a[i] = b[i]),涉及两次访存(读+写)。 - SCALE:内存复制+标量乘法(
a[i] = q * b[i]),涉及两次访存和一次浮点乘法。 - ADD:内存加法(
a[i] = b[i] + c[i]),涉及三次访存和一次浮点加法。 - TRIAD:混合运算(
a[i] = b[i] + q * c[i]),涉及三次访存和两次浮点运算(加法+乘法)。
a、b、c均为在main函数外定义的double数组,因此
1、测试粒度通常为8B
2、使用的是BSS段内存
stream的多线程使用openmp实现,在运行前通过OMP_NUM_THREADS环境变量设置线程数
因此其多线程使用同一个数组,只不过分别负责数组的不同部分,这种方法的一个缺点是可能会引入跨numa的问题,无法测出内存带宽的上限,因此stream内通过如下的First-Touch逻辑避免跨numa访问:
#pragma omp parallel for
for (j=0; j<STREAM_ARRAY_SIZE; j++) {
a[j] = 1.0;
b[j] = 2.0;
c[j] = 0.0;
}
2、lmbench
-P 参数指定多进程
各进程内分别通过malloc等方法申请堆内存,因此
1、不具有跨numa访问的问题
2、-P越大,占用的总内存量越大
bw_mem中有(不限于)
- bcopy:
memcpy。 - fcp:纯内存复制(
a[i] = b[i]),类型为int数组,因此测试粒度为4B。
3、mbw
单进程单线程的内存带宽测试
包含三项,均为纯内存复制,只不过方式不同
使用calloc申请堆内存
- MEMCPY:
memcpy函数 - DUMB:遍历long数组进行
a[i] = b[i]。 - MCBLOCK:对内存分块的调用
memcpy。
数组类型为long
4、对比总结
1、mbw的memcpy 类似于 lmbench的bcopy
2、mbw的dumb 类似于 stream的copy 类似于 lmbench的fcp(粒度不同)
更多推荐


所有评论(0)