加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么对齐边界大于4?

发布时间:2020-12-16 09:54:00 所属栏目:百科 来源:网络整理
导读:我不明白的是,为什么我们必须在大于4字节的边界上对齐内存中的数据,因为所有其他边界都是4的倍数.假设CPU在一个周期内可以读取4个字节,那么它基本上没有区别.性能,如果该数据大8字节,并在4字节/ 8字节/ 16字节等对齐等. 解决方法 第一:x86 CPU不读取4个字节
我不明白的是,为什么我们必须在大于4字节的边界上对齐内存中的数据,因为所有其他边界都是4的倍数.假设CPU在一个周期内可以读取4个字节,那么它基本上没有区别.性能,如果该数据大8字节,并在4字节/ 8字节/ 16字节等对齐等.

解决方法

第一:x86 CPU不读取4个字节的内容,它们可以在一个周期内读取8个字节,甚至可以读取 SIMD个扩展名.

但回答你的问题“为什么对齐边界多于4?”,假设一个通用架构(你没有指定一个和you wrote that x86 was just an example),我将提出一个特定的案例:GPU.

如果地址在多个访问大小(PTX ISA ld/st)上对齐,则只能访问(存储/加载)NVIDIA GPU内存.当地址与访问大小的倍数对齐时,会出现不同类型的加载和最高性能的加载,因此如果您尝试从内存加载双精度(8字节),您将拥有(伪代码):

ld.double [48dec] // Works,8 bytes aligned
ld.double [17dec] // Fails,not 8 bytes aligned

在上述情况下,当试图访问(r / w)未正确对齐的内存时,该过程实际上会导致错误.如果你想要速度,你必须提供一些安全保障.

这可能会回答你关于为什么首先存在大于4的对齐边界的问题.在这种架构上,访问大小1始终是安全的(每个地址都对齐1).对于每个n> 1,情况并非如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读