veh*_*zzz 28 c c++ compiler-construction gcc vectorization
向量化代码是一个好主意吗?在什么时候这样做有什么好的做法?下面会发生什么?
Zed*_*Zed 44
向量化意味着编译器检测到您的独立指令可以作为一条SIMD指令执行.通常的例子是,如果你做了类似的事情
for(i=0; i<N; i++){
a[i] = a[i] + b[i];
}
Run Code Online (Sandbox Code Playgroud)
它将被矢量化为(使用矢量符号)
for (i=0; i<(N-N%VF); i+=VF){
a[i:i+VF] = a[i:i+VF] + b[i:i+VF];
}
Run Code Online (Sandbox Code Playgroud)
基本上,编译器选择一个可以同时在阵列的VF元素上完成的操作,并执行N/VF次,而不是单次操作N次.
它提高了性能,但对架构提出了更高的要求.
Gau*_*thy 13
如上所述,矢量化用于利用SIMD指令,SIMD指令可以执行打包到大寄存器中的不同数据的相同操作.
使编译器能够自动向量化循环的通用准则是确保在循环的不同迭代中没有流和反依赖性的b/w数据元素.
http://en.wikipedia.org/wiki/Data_dependency
一些编译器,如英特尔C++/Fortran编译器,能够自动生成代码.如果无法对循环进行矢量化,英特尔编译器就能够报告为什么它不能这样做.有报告可用于修改代码,使其变得可矢量化(假设它是可能的)
"为现代架构优化编译器:基于依赖的方法"一书深入介绍了依赖关系
| 归档时间: |
|
| 查看次数: |
19096 次 |
| 最近记录: |