4. Hello World! 在这一节,将通过一个Hello World例子来展示CELL BE编程,尤其是PPE编程和SPE编程。同时,还将介绍如何编译和生成CELL BE的可执行代码。 在这个例子中,我们将创建8个SPE线程,每个SPE线程在屏幕上打印一句“Hello, CELL World!”的问候语。 首先,是SPU上的执行代码,这部分很简单,与我们教科书上的Hello World类似。
PPU上的执行代码稍微复杂一些,它将负责创建8个SPE线程,并等待SPE线程的退出。如果您有Linux多线程开发的经验,将会非常容易理解以下代码,下面的代码看起来非常像Posix的线程编程。由于有SPE开发库的支持,创建和管理SPE线程,是一件轻松的事情。
图 5 PPU上的执行代码,负责创建8个SPE线程。 其中spe_creat_thread是SPE线程管理库中提供的函数。在这里,PPU创建了8个SPU线程,且把spu作为入口地址,然后在PPU上执行的主线程等待SPU线程结束后退出。 编译CELL BE程序和普通的应用程序略有区别。一个SPU的binary需要转化为CESOF (Cell Embedded SPE Object Format)的方式,然后再将其与一个PPU binary链接起来。因为,一个SPU binary是不能被单独执行的(在SystemSim环境中除外)。所以,我们需要由PPU来创建一个SPU线程,然后通过这个线程在SPU上执行这段代码。而PPU binary是通过CESOF来获得SPU上这段执行代码的入口地址(有效地址)的。这部分工作通过以下两个步骤完成。首先,我们需要将SPU的源代码编译为一个可执行文件。然后通过GNU toolchain提供的ppu-embedspu工具来将其转为一个CESOF。 在这里,我们通过GNU toolchain for CELL BE提供的交叉编译工具(spu-gcc,ppu-embedspu,ppu-ar和ppu-gcc)来编译Hello World!。 1.首先,编译SPU上的可执行代码: 在SystemSim环境运行helloworld,并察看运行结果。
为了进一步理解CESOF对象,我们可以使用nm察看CESOF的内容。从图 7可以看到,在spu-embed.o中,有一个名为SPU的symbol,它是SPU上可执行代码的入口地址。
图 7 CESOF对象。其中,spu为spe_program_handle_t,即SPU线程的入口地址。
|
正在阅读:CELL Broadband Engine软件开发环境介绍CELL Broadband Engine软件开发环境介绍
2007-06-26 11:18
出处:PConline
责任编辑:gongjianhui
键盘也能翻页,试试“← →”键
本文导航 | ||
|