正在阅读:CELL Broadband Engine软件开发环境介绍CELL Broadband Engine软件开发环境介绍

2007-06-26 11:18 出处:PConline 作者:PConline服务器频道 责任编辑:gongjianhui

  5. 优化应用程序

  现有的PowerPC应用程序通过重新编译,基本上可以顺利的移植到CELL BE上。但是这种方式,只利用了PPU,而没有利用到SPU的计算能力。通过编译选项,CELL BE的编译器(XLC 或者 gcc)能够为应用程序进行一定程度的自动优化。不过,既然CELL BE的C/C++编译器和开发库对C和C++作了大量扩展,我们尽可以充分利用CELL BE的多处理器架构及SIMD能力,来优化应用程序。

  有了SPE开发库及扩展的intrinsics的支持,程序员可以在代码中显式的使用SIMD指令和数据结构,来指导编译器进行代码优化。SIMD优化是一个重要的工作,CELL BE的编程手册指出,原有代码经过SIMD化以后,能够大幅的提高应用程序的性能。通过对任务进行划分,将计算任务分配到多个SPU上,同样也能够有效的提高应用程序的性能。此外,通过并行编程,减少指令流水线的等待和停顿,可以提高应用程序的并行化程度。

  下面通过CELL BE编程手册中的一个例子,来展示如何通过对代码进行SIMD优化,从而提高应用程序的性能。图 8中,array_sum是一个对数组进行求和的函数。

  

      int array_sum(unsigned char nums[16])
      {
        int sum = 0;
        int i;
        for (i=0; i<16; ++i)
        {
          sum += nums[i];
        }
        return sum;
       }

  图 8 普通的求和函数,通过循环遍历数组,对数组的每个元素求和。

  下面的例子,利用CELL BE编译器对SIMD指令的支持,来消除不必要的串行循环,从而提高代码的运行效率,改进的代码如图 9。

  

   union
{
  int s[4];
  vector signed int v;
} sum;
int vectorized_sum(unsigned char nums[16])
{
    vector unsigned char v_nums;
    vector unsigned int zero = (vector unsigned int){0};
   v_nums = vec_perm(vec_ld(0, nums), vec_ld(16, nums), vec_lvsl(0, nums));
    sum.v = vec_sums((vector signed int)vec_sum4s(v_nums, zero), (vector signed int) zero);   
    return (sum.s[3]);
}

  
  图 9 利用SIMD来提高性能。

  在这个例子中,vec_perm函数从偏移地址0到16,以左对齐的方式,读入nums中的16个字节,并构成vector。vec_sums则是对两个vector求和。

  在这里,vec_sum4s将变量vnums按1/4饱和运算的方式与一个值为全0的vector进行向量求和,即相当于对nums的元素进行逐个相加。

  6.小结

  基于CBEA架构的CELL BE处理器是一个适用于高性能和多媒体计算的RISC处理器。CELL BE SDK提供了高效的软件开发库,高性能的编译器以及交叉编译的toolchain。同时,IBM Full-System Simulator提供了完整的CELL BE应用的仿真环境和性能分析工具。

  CELL BE的软件开发与普通PC的应用软件开发有所不同。CELL BE是第一个同时应用异构多核心和同时多线程SMT 技术的主流处理器, 它是一个为分布和并行处理设计的体系结构。开发者如果能够充分利用CELL BE处理器架构的优势,将能有效提高应用程序的性能。

键盘也能翻页,试试“← →”键
本文导航
第1页:CELL BE处理器介绍
第2页:CELL BE 软件开发环境
第3页:CELL BE编程模型
第4页:Hello World!
第5页:优化应用程序

为您推荐

加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多

服务器论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品