Corei7-1185G7上三类AVX512加载指令的性能差异问询
关于AVX512加载指令在数据复制场景下的性能疑问
我正在开展涉及AVX512指令的项目,针对数据复制场景下_mm512_load_si512、_mm512_loadu_si512与_mm512_stream_load_si512三类指令的性能差异有疑问:
- 按理论,
_mm512_load_si512和_mm512_stream_load_si512是为对齐内存地址设计的,性能应该更优,但实验中我没观测到这三类指令有显著性能差异,包括非对齐内存下的_mm512_loadu_si512。 - 我的CPU是支持AVX512的Core i7-1185G7 @3.00GHz,想了解该处理器上这些指令的性能特性,以及是否有我忽略的内存对齐细节。
测试代码(可替换_mm512_stream_load_si512为另外两类加载指令):
// 目标指针与源指针均为64字节对齐 void copy_data(__m512i *dst, __m512i *src, size_t size) { __m512i block; for (; size; dst++, src++, size--) { block = _mm512_stream_load_si512(src); _mm512_stream_si512(dst, block); } }
补充说明:将_mm512_stream_si512替换为_mm512_store_si512或_mm512_storeu_si512时性能存在差异,我系统上_mm512_stream_si512的复制速度约快1.5倍。
针对Core i7-1185G7的AVX512加载指令性能分析
1. 三款加载指令在Tiger Lake-U架构的特性
Core i7-1185G7属于Tiger Lake-U架构,该架构对AVX512内存访问做了针对性优化:
_mm512_load_si512:要求64字节对齐,对应VLDMQA指令,对齐场景下加载延迟为4周期,吞吐量为每周期1次。_mm512_loadu_si512:支持非对齐访问,对应VLDMQU指令。Tiger Lake-U的内存控制器与执行单元优化了非对齐访问开销:当访问内存块实际对齐(如你测试场景),它的性能几乎与对齐加载一致;即便真正非对齐,只要跨缓存行数量少,开销也远低于老架构。这是你测试中它与对齐加载无差异的核心原因。_mm512_stream_load_si512:对应VLDMNTA指令,属于非临时加载(Non-Temporal Load),设计目标是绕过L1缓存,直接从L2/L3缓存或内存加载数据,适合一次性访问、无复用的大数据块。但Tiger Lake-U架构中,若数据已在L1缓存,VLDMNTA的非临时特性无法触发,执行路径与普通加载完全一致,性能自然无差异。
2. 测试无性能差异的核心原因
你的测试场景是对齐内存+数据大概率已缓存:
- 源数据若已存入L1/L2缓存,
_mm512_stream_load_si512的非临时特性无法发挥,与普通加载执行效率一致。 _mm512_loadu_si512在对齐内存下,Tiger Lake-U会自动优化为对齐加载路径,无额外开销。
3. 验证指令差异的测试调整方案
要观测三款指令的性能差异,需调整测试场景:
- 验证
_mm512_stream_load_si512优势:使用远大于L3缓存容量的数据集(如你的L3为12MB,可选用32GB以上连续数据块),确保数据无法被缓存,此时VLDMNTA绕过L1的特性会减少缓存污染,提升加载效率。 - 验证
_mm512_loadu_si512的开销:故意使用非对齐源指针(如偏移1-63字节),此时VLDMQU需拆分访问跨缓存行的数据,会产生明显延迟与吞吐量下降,与_mm512_load_si512的差异会显现。
4. 关于存储指令的性能差异
你提到_mm512_stream_si512比普通存储快1.5倍,这符合预期:_mm512_stream_si512对应VSDNTA指令,直接将数据写入内存控制器的写合并缓冲区,绕过CPU缓存,避免了缓存写回开销,在大数据块连续写入场景下,能大幅提升吞吐量——尤其是目标内存不在缓存中时,优势更明显。
内容的提问来源于stack exchange,提问作者MHErshadi
相关产品推荐
相关产品推荐

