浅谈数据对齐对CPU效率的影响
来源:互联网 发布:firewall cmd 80端口 编辑:程序博客网 时间:2024/06/05 16:39
程序员眼中的内存样子:
---------------------------------
| | | | | | | | | | | | | | | | |
---------------------------------
0 1 2 3 4 5 6 7 8 9 A B C D E F
CPU眼中的内存样子:(以粒度=4为例)
---------------------------------------------
| | | | |
---------------------------------------------
0 1 2 3
有了上面的概念,我们来看看粒度对CPU访问内存的影响。
假设这里我们需要的数据分别存储于地址0和地址1起始的连续4个字节的存储器中,我们目的是分别读取这些数据到一个4字节的寄存器中,
同样如果'内存访问粒度'为1,CPU从地址1开始读取,也需要4次访问才能将4个字节读到寄存器中;而且对于这种理想中的''内存访问粒度'为1的CPU,所有地址都是'aligned address'。
如 果'内存访问粒度'为2,CPU从地址1开始读取,相当于内存中数据分布在1,2,3,4三个地址上,由于1不是'aligned address',所以这时CPU要做些其他工作,由于这四个字节分步在三个chunk上,所以CPU需要进行三次访存操作,第一次读取chunk1(即地址0,1上两个字节,而且仅仅地址1上的数据有用),第二次读取chunk2(即地址2,3上两个字节,这两个地址上的数据都有用),最后一次读取 chunk3(即地址5,6上两个字节,而且仅仅地址5上的数据有用),最后CPU会将读取的有用的数据做merge操作,然后放到寄存器中。
同理可以推断如果'内存访问粒度'为4,那么从地址1开始读取,需要2次访问,访问后得到的结果merge后放到寄存器中。
我们可以指定按照何种粒度访问特定内存块儿:其中void *T为指向特定内存块的地址指针
char *p = (char*)T;每次操作一个字节
short *p = (short*)T;每次操作两个字节
int *p = (int*)T;每次操作4个字节
以此类推。
http://bigwhite.blogbus.com/logs/3990258.html
- 浅谈数据对齐对CPU效率的影响(转)
- 浅谈数据对齐对CPU效率的影响
- 浅谈数据对齐对CPU效率的影响
- 结构对齐对结构成员的访问效率影响的测试。
- 约束对效率的影响
- cpu对编程的影响
- 浅谈IPSec VPN对Cisco路由器CPU利用率(负载)的影响
- 关于堆栈对齐对性能的影响
- 数据库Index对效率的影响
- 索引字段顺序对效率的影响
- 程序循环顺序对效率的影响
- GIL对线程效率的影响
- 编译器之WIN64预定义宏和数据对齐设置对结构体大小的影响
- cpu的工作模式对功耗影响
- cpu cache对程序性能的影响
- RAC的cache fusion对数据块访问效率的影响
- 数据规模对数组的读取效率的影响——顺序读取和随机读取
- 影响数据检索效率的几个因素
- C++通过线程方式读取给出的二进制文件数据
- Ubuntu16.0.4下搭建Spark2.1.0-bin-Hadoop2.7
- 前端技术学习之选择器(十二)
- 微信H5页面的建议尺寸
- 旋转的八卦图,纯CSS实现
- 浅谈数据对齐对CPU效率的影响
- Anaconda 安装编译pycaffe
- double类型值相等判断
- HTML+css每日一结1.14
- XUtils的view模块
- adb shell monkey
- 策略设计模式
- [UOJ241]【UR #16】破坏发射台 矩阵快速幂
- 搜狐狐友与腾讯微信两款社交软件的比较