扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
后续文章将更加深入地介绍 SPU 编程的知识,这里只简单介绍一下。作为第 3 个参数传递到 spe_create_thread 的指针会以 program_data_ea 的形式进入这个程序。EA 表示有效地址,这是从主 PPE 程序中看到的主存地址。由于 SPE 不能直接访问主存,所以无法直接将其作为一个指针废弃。相反,您必须发起一个传输请求将数据复制到本地存储中。一旦数据保存到本地存储中,就可以通过 本地存储地址(local store address,有时简写为 LSA) 来访问这些数据。
mfc_get 发起到本地存储的传输。注意在 PPE 和 SPE 中,这个结构被对齐为 16 字节,并填充成 16 个字节。在下一篇文章中我们将更详细地介绍这方面的内容,但是对于大部分 DMA 传输来说,都必须 按照 16 字节边界对齐,并且大小应该是 16 字节的整数倍。tag_id 让您可以检索 DMA 操作的状态。在传输之后,接下来的两个函数可以导致程序等待,直到传输完成为止。
主要的处理过程非常简单 ―― 只需用速度乘以时间即可。在数据处理完之后,mfc_put 会发起一个传输,传回主存,接下来的两个函数会让您等待 DMA 操作完成。当所有这些操作完成之后,程序退出。
现在您需要编译并运行这个程序。这实际上非常简单:
#Compile the SPE program spu-gcc spe_distance.c -o spe_distance #Embed the SPE program into an ELF object file, and expose it #through the global variable: calculate_distance_handle embedspu calculate_distance_handle spe_distance spe_distance_csf.o #Compile the PPE program together with the SPE program gcc ppe_distance.c spe_distance_csf.o -lspe -o distance #Run the program ./distance |
结束语
尽管您不能直接在 PS3 上编程,但是 PS3 支持第三方的操作系统,这就让您可以将 Linux 安装到 PS3 上。将 Linux 安装到 PS3 上需要您付出一点努力,但这很值得,因为最终您将获得一个低成本并能良好运行的 Cell BE 处理器。本系列的后续文章将深入介绍 Cell BE 编程以及如何充分利用可从 SPE 获得的每一点速度。
参考资料
关于作者
Jonathan Bartlett 是 Programming from the Ground Up 一书的作者,这本书介绍的是 Linux 汇编语言编程。Jonathan Bartlett 是 New Media Worx 的技术总监,负责为客户开发 Web、视频、kiosk 和桌面应用程序。可以通过 johnnyb@eskimo.com 与 Jonathan 联系。 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者