相关疑难解决方法(0)

SSE未对齐的负载内在是否比x64_64 Intel CPU上固有的对齐负载慢?

我正在考虑更改一些目前需要16字节对齐数组的代码高性能代码,并用于_mm_load_ps放宽对齐约束和使用_mm_loadu_ps.关于SSE指令的内存对齐的性能影响有很多神话,所以我做了一个小的测试用例,它应该是一个内存带宽限制的循环.使用对齐或未对齐的加载内在函数,它通过大型数组运行100次迭代,使用SSE内在函数对元素求和.源代码在这里.https://gist.github.com/rmcgibbo/7689820

带有Sandy Bridge Core i5的64位Macbook Pro的结果如下.数字越小表示性能越快.当我阅读结果时,我发现在未对齐的内存上使用_mm_loadu_ps基本上没有性能损失.

我觉得这很令人惊讶.这是一个公平的测试/合理的结论吗?在哪些硬件平台上有区别?

$ gcc -O3 -msse aligned_vs_unaligned_load.c  && ./a.out  200000000
Array Size: 762.939 MB
Trial 1
_mm_load_ps with aligned memory:    0.175311
_mm_loadu_ps with aligned memory:   0.169709
_mm_loadu_ps with unaligned memory: 0.169904
Trial 2
_mm_load_ps with aligned memory:    0.169025
_mm_loadu_ps with aligned memory:   0.191656
_mm_loadu_ps with unaligned memory: 0.177688
Trial 3
_mm_load_ps with aligned memory:    0.182507
_mm_loadu_ps with aligned memory:   0.175914
_mm_loadu_ps with unaligned memory: 0.173419
Trial 4
_mm_load_ps with aligned …
Run Code Online (Sandbox Code Playgroud)

c python performance sse

18
推荐指数
4
解决办法
6491
查看次数

标签 统计

c ×1

performance ×1

python ×1

sse ×1