PowerVR Rogue图形处理器内核编写快速指南

编程指南

建议:如果可以的话使用大小为32的工作组。

如果内核的逻辑结构允许,建议你使用大小为32的工作组。这样的话,每个warp可以包含完整的工作组,而且无时间损耗(都发生在相同的同步周期中)。对于更大的工作组,每个工作组需要多个warp才能完成执行,障碍同步则需要多个处理器执行warp间的切换。对于更小的工作组,如4,8,和16,如果编译时工作组是指定大小,多个工作组就会打包成一个warp。对于非制定大小的工作组,多个工作组变成一个warp,意味着warp中只有少量的空闲线程,效率就会降低。因此,建议大小为32的工作组。

建议:在编译时指定工作组的大小。

对于给定的内核,你可以通过指定其属性来安排工作组大小,如下图。

__attribute__((reqd_work_group_size(X, Y, Z)))

工作组的大小由X,Y,Z决定。如果指定工作组的大小,就可用一些额外的编译来优化提高性能,比如减小障碍同步所需的指令。

建议:对于图像处理任务,声明你的内核参数为图像和取样器数据类型(而不是字符数组)从而受益于TPU加速度。

就像之前讨论过的,TPU提供高效的图像数据采样、图像插值、边界分辨率处理。指定的边界分辨率可以避免使用特殊条件代码来处理边界条件,减小了分歧。使用图像参数也使内核更有效地并入一个更大的异构程序。更多精彩内容,请点击这里

--电子创新网--
粤ICP备12070055号