【问题标题】:Loop optimization by the IBM xlC compiler with AltivecIBM xlC 编译器与 Altivec 的循环优化
【发布时间】: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


    【解决方案1】:

    我在 Power 7 上做了一些工作,并且在 XLC 编译器上看到了非常奇怪的东西。但没有这么奇怪! (至少不是 60 倍……)

    关于 PowerPC 系列(至少对于 Power6 和 Power7)需要注意的一点是,与 x86/x64 相比,指令延迟非常长,乱序执行非常弱。

    因此,内部循环(如您的代码中所写)将获得极低的 IPC。

    现在,我可以想象您获得 60 倍加速的唯一方法是内部循环在 -O3 下完全展开。这是可能的,因为内部循环的行程计数可以静态确定为 63。

    展开那个内循环基本上可以填满整个管道。

    当然,我只是猜测。最好的办法是查看程序集。

    另外,你是如何安排这个时间的?我在 PowerPC 上看到的许多奇怪行为都来自计时器本身……

    编辑:

    由于您的示例代码相当简单,应该很容易发现(在程序集中)该内部循环是否部分或完全展开。

    【讨论】:

    • 我在 AIX 中只使用“time”命令来计时。我没有在代码本身中插入任何计时器。另外,我有点困惑为什么有IPC?工作不是都在单线程单核上完成的吗?
    • 对不起,我的意思是 IPC 在“每个周期的指令”中。我没有意识到它也代表每个周期的中断...... :)“时间”命令应该没问题。在某些情况下,我看到了 clock() 的奇怪之处。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2017-11-05
    • 2017-01-27
    • 2013-08-15
    相关资源
    最近更新 更多