rni*_*ckb 11 c++ x86 gcc clang icc
Intel 的编译器有一个编译指示,可用于生成非临时存储。例如,我可以写
void square(const double* x, double* y, int n) {
#pragma vector nontemporal
for (int i=0; i<n; ++i) {
y[i] = x[i] * x[i];
}
}
Run Code Online (Sandbox Code Playgroud)
和ICC会产生这样的指令这样(编译器,资源管理器)
...
vmovntpd %ymm1, (%rsi,%r9,8) #4.5
...
Run Code Online (Sandbox Code Playgroud)
gcc 和 clang 有什么类似的吗?(内在函数除外)
非临时存储使代码更快。使用这个基准
...
vmovntpd %ymm1, (%rsi,%r9,8) #4.5
...
Run Code Online (Sandbox Code Playgroud)
非时间代码在我的机器上运行速度几乎是它的两倍。以下是完整结果:
国际刑事法院:
> icc -O3 -march=native -std=c++11 benchmark.cpp -lbenchmark -lbenchmark_main
> ./a.out
------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------
BM_Square/1000000 430889 ns 430889 ns 1372
Run Code Online (Sandbox Code Playgroud)
铛:
> clang++ -O3 -march=native -std=c++11 benchmark.cpp -lbenchmark -lbenchmark_main
> ./a.out
------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------
BM_Square/1000000 781672 ns 781470 ns 820
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会:
> g++-mp-10 -O3 -march=native -std=c++11 benchmark.cpp -lbenchmark -lbenchmark_main
> ./a.out
------------------------------------------------------------
Benchmark Time CPU Iterations
------------------------------------------------------------
BM_Square/1000000 681684 ns 681533 ns 782
Run Code Online (Sandbox Code Playgroud)
注意:clang 有__builtin_nontemporal_store;但是当我尝试时,它不会生成非时间指令(编译器资源管理器)
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |