Optimization 内核工作问题和执行成本

Optimization 内核工作问题和执行成本,optimization,opencl,Optimization,Opencl,我有两个问题: 让内核工作过度还是工作不足更好?假设我想计算一个只有4个GPU内核的差分图像。我是否认为我的图像中的任何像素是由1个线程独立计算的呢?还是应该用1个线程来计算我的图像的整行呢?我不知道哪种解决方案最适合使用。我已经矢量化了第一个选项(这是强制的),但我只获得了一些ms,这不是很有意义 我的第二个问题是关于内核的执行成本。我知道如何度量任何OpenCL命令队列任务(复制、写入、读取、内核…),但我认为主机将内核加载到GPU内核需要一段时间。有什么办法来评估它吗 巴普蒂斯特 通常,您

我有两个问题:

  • 让内核工作过度还是工作不足更好?假设我想计算一个只有4个GPU内核的差分图像。我是否认为我的图像中的任何像素是由1个线程独立计算的呢?还是应该用1个线程来计算我的图像的整行呢?我不知道哪种解决方案最适合使用。我已经矢量化了第一个选项(这是强制的),但我只获得了一些ms,这不是很有意义
  • 我的第二个问题是关于内核的执行成本。我知道如何度量任何OpenCL命令队列任务(复制、写入、读取、内核…),但我认为主机将内核加载到GPU内核需要一段时间。有什么办法来评估它吗
  • 巴普蒂斯特

    通常,您将在内核中处理单个项。如果处理多个项目,则需要按正确的顺序执行,以确保合并内存访问,否则执行速度将比执行单个项目慢(解决方案是为每个工作项目处理一列,而不是一行)

    处理多个项目的速度较慢的另一个原因是,您可能会让计算单元处于空闲状态。例如,如果使用700个计算单元处理1000x1000图像上的扫描线,工作将分为700个工作项,然后仅分为300个工作项(剩下400个空闲)

    如果要在单个内核中执行大量工作,则需要使用共享本地内存。例如,如果将查找表(LUT)加载到SLM中,则应将其用于整个扫描线或图像

    (二)

    我相信这是一个非零的时间量,但它可以忽略不计。内核代码非常小。驱动程序处理将其移动到GPU的操作,还处理将参数数据推送到GPU上的操作。两者都非常快,并且可能在其他内核运行时发生,所以是“免费的”