AMD Zen4上AVX-512的_mm512_load_epi64与_mm512_loadu_epi64性能对比
问题背景
非对齐加载指令_mm512_loadu_epi64的使用更为普遍,通常开发者在内存地址已对齐时会选择对齐SIMD加载指令_mm512_load_epi64。我好奇在地址已对齐的场景下,这两个函数调用是否存在性能差异,直觉上猜测对齐加载会更快。
该问题具有较强的硬件相关性,而Zen4是AMD首款支持AVX-512的微架构,因此我选择在Zen4平台开展测试。
基准测试代码与汇编实现
设置两种测试场景:
- 待访问内存
data的大小小于L1缓存,无缓存缺失,属于非内存受限场景; - 待访问内存远大于缓存容量。
两个函数调用对应的汇编指令仅存在vmovdqa64(对应对齐加载)与vmovdqu64(对应非对齐加载)的差异。
测试结果与思考
在AMD Zen4平台上重复测试十次,结果完全一致:两个函数调用的性能没有任何差异,这和之前的直觉判断相悖。这不禁让人思考:对齐加载指令适用场景有限,而且在地址未对齐时还会触发段错误,那它还有使用的必要吗?
内容的提问来源于stack exchange,提问作者JGL
相关产品推荐
相关产品推荐

