我有两个问题:
巴普蒂斯特
答案 0 :(得分:1)
(1)
通常,您处理内核中的单个项目。如果您处理多个项目,则需要按正确的顺序执行这些项目以确保合并内存访问权限,否则您将比执行单个项目更慢(解决方案是处理每个工作项的列而不是行)。
处理多个项目的速度较慢的另一个原因是您可能使计算单元空闲。例如,如果您使用700个计算单位处理1000x1000图像上的扫描线,则工作将分为700个工作项,然后只有300个工作项(剩余400个工作项)。
如果您要使用共享本地内存,那么您希望在单个内核中执行大量工作的情况。例如,如果将查找表(LUT)加载到SLM中,则应将其用于整个扫描线或图像。
(2)
我确定这是一个非零的时间,但它可以忽略不计。内核代码非常小。驱动程序处理将其移动到GPU,并处理将参数数据推送到GPU上。两者都非常快,可能在其他内核运行时发生,所以"免费"。