PPE执行的几项任务:
1.检查是否有free spe
2.创建spe结构,分配tag_id
3.创建spe线程并运行
4.等待一个spe运行结果的返回
5.激活一个已经创建的spe结构,让它开始运行
SPE执行的几项任务:
1.接收PPE传来的数据
2.执行代码任务
3.根据需要休眠或被激活
4.传回结果信息
两个表:依赖表和缓存表
依赖表包括tag_id,needres,status,分别表示SPE的标签,需要的前提条件和运行状态,其中PPE检查依赖时,status会对应几种状态:0不满足,1无可用SPE,2运行中,在每一个SPE运行开始前,创建依赖表项,运行完毕,删除表项。
缓存表包括tag_id,need_by,used_time,分别表示SPE标签,被需求的SPEid,被使用的次数。其中被使用的次数,用来累加,然后计算空间不够时,需要替换的项目。当need_by全部运行完毕时,该表项删除。
PPU和SPU运行的流程:
ppu_main:input_data –> work partition –> work dependecy list generate –> setup to spe
-> check dependency —yes—>start an thread –> wait thread finish –> get the return data –> exit –> collect all data
spu_main:inti –> get data –> calculate –> return result –> finish
注意:PPE检查依赖表时,实际结果,或者pseudo-result都可以算满足;SPE线程获得返回值后,要更新依赖表,插入res,删除运行完的tag_id,缓存res_result;这里的传值都是传pointer,利用信箱或者信号表示。实际的数据传输,通过DMA等很多方式传输,这里不讨论。