【发布时间】:2011-09-16 11:38:47
【问题描述】:
我只是在我们拥有的 power6 集群上使用 Altivec 扩展。我注意到,当我在没有任何优化的情况下编译下面的代码时,我的加速比预期为 4。然而,当我用 -O3 标志再次编译它时,我设法获得了 60 的加速!
只是想知道是否有人对此有更多经验,并且能够提供一些关于编译器如何重新排列我的代码以执行这种加速的见解。是这里唯一可能通过汇编和指令流水线进行的优化,还是我缺少其他可以包含在我未来工作中的东西。
int main(void) {
const int m = 1000;
__vector signed int va;
__vector signed int vb;
__vector signed int vc;
__vector signed int vd;
int a[m];
int b[m];
int c[m];
for( int i=0 ; i < m ; i++ ) {
a[i] = i;
b[i] = i;
c[i] = 0;
}
for( int cnt = 0 ; cnt < 10000000 ; cnt++ ) {
vd = (__vector signed int){cnt,cnt,cnt,cnt};
for( int i = 0 ; i < m/4 ; i+=4 ) {
va = vec_ld(0, &a[i]);
vb = vec_ld(0, &b[i]);
vc = vec_add(vd, vec_add(va,vb));
vec_st(vc, 0, &c[i]);
}
}
std::cout << c[0] << ", " << c[1] << ", " << c[2] << ", " << c[3] << "\n";
return 0;
}
【问题讨论】:
标签: c++ optimization compiler-construction vectorization xlc