一、内存理论带宽的计算

内存带宽计算公式:带宽=内存核心频率×内存总线位数×倍增系数。

先容我从DDR的技术说起,DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的倍增系数就是2。

DDR2仍然采用时钟脉冲上升、下降支各传一次数据的技术(不是传2次),但是一次预读4bit数据,是DDR一次预读2bit的2倍,因此,它的倍增系数是2X2=4。

DDR3作为DDR2的升级版,最重要的改变是一次预读8bit,是DDR2的2倍,DDR的4倍,所以,它的倍增系数是2X2X2=8。

需要补充的一点是,内存有三种不同的频率指标,它们分别是核心频率、时钟频率和有效数据传输频率。

  • 核心频率即为内存Cell阵列(Memory Cell Array)的工作频率,它是内存的真实运行频率;
  • 时钟频率即I/O Buffer(输入/输出缓存)的传输频率;
  • 有效数据传输频率则是指数据传送的频率。

DDR3内存一次从存储单元预取8Bit的数据,在I/OBuffer(输入/输出缓存)上升和下降中同时传输,因此有效的数据传输频率达到了存储单元核心频率的8倍。同时DDR3内存的时钟频率提高到了存储单元核心的4倍。也就是说DDR3-800内存的核心频率只有100MHz,其I/O频率为400MHz,有效数据传输频率则为800MHz。

从SDRAM-DDR时代,数据总线位宽时钟没有改变,都为64bit,但是采用双通道技术,可以获得64X2=128bit的位宽。

下面计算一条标称DDR3 1066的内存条在默认频率下的带宽:

1066是指有效数据传输频率,除以8才是核心频率。一条内存只用采用单通道模式,位宽为64bit。

所以内存带宽=(1066/8)×64×8=68224Mbit。

由此可知,如果内存工作在标称频率的时候,可以直接用标称频率×位宽,简化公式。 再根据8bit(位)=1Byte(字节),得68224/8=8528MByte=8.328125GB。

再以两条标称1066超频到1200的DDR3内存,组成双通道后的带宽:超频到1200后,内存核心频率应为1200/8=150MHz,而双通道的位宽=128bit:带宽=150×128×8=153600Mbit=18.75GB

参考:http://blog.chinaunix.net/uid-14214482-id-3220464.html

二、各种内存测试方式的对比

下文分别介绍了使用dd命令、mbw命令、sysbench、AVX指令进行测试。

《设备性能测试 : 内存带宽的测试》

《关于如何读写达到内存最大带宽的网站》

三、Bandwidth内存测试工具

详细可查看官网:https://zsmith.co/bandwidth.php

关于Bandwidth工具使用博客:《Bandwidth内存带宽测试工具》

四、STREAM内存测试工具

《内存带宽测试-STREAM的使用》

五、AVX/AVX2指令编程

《Intel 内部指令 --- AVX和AVX2学习笔记》

《Intel Intrinsics — AVX & AVX2 Learning Notes》

《AVX指令编写的快速拷贝FastMemcpy_Avx》

《AVX指令编写的另一个快速拷贝fastMemcpy,并给出了相应的测试结果》

其代码如下,相对来说,是比较靠谱的。

#include <immintrin.h>
#include <cstdint>
/* ... */
void fastMemcpy(void *pvDest, void *pvSrc, size_t nBytes) {assert(nBytes % 32 == 0);assert((intptr_t(pvDest) & 31) == 0);assert((intptr_t(pvSrc) & 31) == 0);const __m256i *pSrc = reinterpret_cast<const __m256i*>(pvSrc);__m256i *pDest = reinterpret_cast<__m256i*>(pvDest);int64_t nVects = nBytes / sizeof(*pSrc);for (; nVects > 0; nVects--, pSrc++, pDest++) {const __m256i loaded = _mm256_stream_load_si256(pSrc);_mm256_stream_si256(pDest, loaded);}_mm_sfence();
}

六、关于使用AVX指令实现memcpy的总结

AVX指令集功能很强,但是应该只是对于计算类,使用后会得到性能的显著提升。

而对于内存读写类的指令,如:

_mm256_stream_load_si256
_mm256_stream_si256

等类似函数,其实对内存读写速度与读写的数据大小有关系,

有时候比memcpy快,有时候更慢,哪怕AVX256bit同时操作的数据是32字节。

关于读写速率的优化,感觉涉及的地方蛮多的,这个可能需要花点时间对指令集、Cache、地址对齐等知识进行一些了解和学习。


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

内存带宽测试与AVX指令集读写内存相关推荐

  1. bandwidth 0.32k 发布,内存带宽测试工具

    bandwidth 0.32k 修复了一些小的 AVX 问题. Bandwidth 是一个内存带宽测试的基准工具,但它也可以测量网络带宽.它可以测量每个内存系统的最大内存带宽,包括主内存,L1和L2缓 ...

  2. stream.c 内存带宽测试

    内存带宽测试工具:stream 介绍 Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,作为衡量服务器内存性能指标的通用工具. 2. 原理 申请了三个巨大的双精度浮点数组a[N], b[ ...

  3. Linux下stream内存带宽测试参数和示例详解附源码(总结)

    目录 一.简介 二.使用简介 2.1 测试内容简介 2.2 编译参数简介 2.3 具体参数示例 三.源码下载及使用 四.其他相关知识链接 FIO测试硬盘性能参数和实例总结 一.简介 本文通过实例详细讲 ...

  4. 【开发工具】【stream】内存带宽测试工具(Stream)的使用

    获取更多相关的嵌入式开发工具,可收藏系列博文,持续更新中: [开发工具]嵌入式常用开发工具汇总帖 Stream简介 STREAM是一套综合性能测试程序集,通过fortran和C两种高级且高效的语言编写 ...

  5. K1 Power Linux上Stream测试内存带宽

    K1 Power Linux上Stream测试内存带宽 本篇文章介绍在K1 Power Linux上理论内存带宽结算,实测内存带宽方法,衡量服务器的内存带宽水平.需要说明的是,对于Scale UP的P ...

  6. 小甲鱼c++源码_飞凌课堂丨OK1046A-C内存交互测试,小白也能看懂

    笔者最近需要进行OK1046A-C内存部分的测试,linux相关的资料和方法纷杂繁多,但如鼠饮河,自得其量,还是找了如下软件进行测试,也分享给大家. 01-工具简介 Bandwitdh工具简介 Ban ...

  7. 服务器内存延迟,内存带宽、延迟性能测试

    内存带宽.延迟性能测试 华为FusionServer 2488H V5服务器主板集成了48个内存插槽,但送测机器配备有限.由于送测机型整合了四通道内存控制器,这样使得平台的内存带宽得到了明显的提升. ...

  8. 内存稳定性测试_内存条选择两条8G还是单条16G?通过对比浅谈该如何选择

    内存条作为电脑的核心部件之一,其性能对于整机的性能还是有一定影响.现在内存条主要分为马甲条和普条,马甲条简言之就是带有金属马甲的内存条,一般都会带有超频的功能.随着灯条的出现,也就是在马甲条上加装了R ...

  9. sisoftware java测试_SiSoftware Sandra测试及全文总结_内存硬盘评测-中关村在线

    ●SiSoftware Sandra测试 这是一套功能强大的系统分析评测工具,拥有超过30种以上的测试项目,主要包括有 CPU.Drives.CD-ROM/DVD.Memory.SCSI.APM/AC ...

  10. 内存兼容性测试软件,Ryzen内存测试:有BUG兼容性较差_DIY攒机选购指南-中关村在线...

    锐龙AMD Ryzen内存测试:有BUG兼容性较差 据悉Ryzen 7的一个"小Bug":当插满4条DDR4内存的时候,频率最高只能上到DDR4-2400,插2条的时候就能上到DD ...

最新文章

  1. 特质波动率python
  2. Python入门100题 | 第012题
  3. 第十天学习Java的笔记(数组)
  4. Spring Boot配置文件加载顺序
  5. org.apache.hadoop.hbase.PleaseHoldException: Master is initializing(解決方案汇总+自己摸索)
  6. 关于softmax loss这个概念
  7. lfw2019_来自 LFW SS20 你应该知道的5个时尚趋势
  8. BreadCrumb控件
  9. 基于JAVA+Swing+MYSQL的在线考试系统
  10. 用python生成多个txt文件
  11. java闭包lambda,(lambda)函数闭包捕获了什么?
  12. 【渝粤教育】国家开放大学2019年春季 2633轨道交通信号与通信系统 参考试题
  13. Spring初学快速入门
  14. Composer报错: require(): Failed opening required ‘.../markbaker/matrix/.../functions/adjoint.php‘
  15. win10运行安装软件程序提示“为了对电脑进行保护,已经阻止此应用” 有效解决方法记录
  16. Windows10 64位安装MySQL(免安装版本)
  17. 哥尼斯堡七桥问题用计算机,哥尼斯堡七桥问题解法真的解不出来?请尽快解答.急...
  18. 孩子小学总喜欢用计算机做数学,数学到底该怎样学?真实用!
  19. SlashData开发者工具榜首等你而定!!!
  20. OpenCV-Python实战(番外篇)——OpenCV中利用鼠标事件动态绘制图形

热门文章

  1. Unity 接入有道智云AI - 图片翻译
  2. python画马鞍面_在matlab中怎么画马鞍面?
  3. 美团外卖自动化业务运维系统建设
  4. Nods.js安装配置(windows)
  5. AI制作ICON流程
  6. 关于win7系统重装完鼠标不能用的解决办法
  7. lbochs模拟器最新版_bochs模拟器最新版下载
  8. 【项目管理/PMP/PMBOK第六版/新考纲】计算题! 假设情景分析/类比估算/处理变更/结束采购/高层级风险/组织过程资产
  9. c语言setlocale函数,setlocale函数
  10. 微信小游戏上线发布全流程详解