gpt4 book ai didi

opencl - 当要处理的元素数量随机增长时,保持固定的 global_work_size 和 local_work_size 是一个坏主意吗?

转载 作者:行者123 更新时间:2023-12-02 09:59:30 29 4
gpt4 key购买 nike

通常建议将global_work_size保持与您必须处理的“元素”的逻辑数量相同。但我的应用程序没有这样的东西。如果我有 N 个元素需要处理,那么,在一次内核传递之后,我将有 M 个元素 - 一个完全不同的数字,不依赖于 N

为了处理这种情况,我可以编写一个循环,例如:

while (elementsToBeProcessed)
read "elementsToBeProcessed" variable from device
enqueue ND range kernel with global_work_size = elemnetsToBeProcessed

但这需要每次读取一次。另一种方法是将所有内容保留在 GPU 内,通过调用 enqueueNDRangeKernel 仅调用一次,并使用与 GPU 布局匹配的固定 global_work_size 和 local_work_size,然后使用主线程来同步内计算。

我的问题很简单:我的直觉是否正确,即第二个选项更好,还是有任何理由选择第一个选项?

最佳答案

这是一个棘手的问题,该走哪条路。取决于您将拥有的全局大小值以及它们随时间变化的程度。

每次读取一次:(对于高度变化的值更好)

  • 适合全局大小,所有工作项都会做有用的工作
  • 如果工作尺寸较小,则不适合硬件的本地尺寸
  • 队列中的阻塞行为、设备利用率不佳
  • 易于理解和调试

固定内核启动大小:(更适合稳定但不断变化的值)

  • 不适合全局大小,可能会浪费一些时间运行空工作项
  • 适合设备的本地尺寸
  • 非阻塞行为,100% 设备使用率
  • 调试复杂

正如一些答案已经说过的那样,OpenCL 2.0 是使用管道的解决方案。但也可以使用另一个 OpenCL 2.0 功能,即内核内部调用。这样您的内核就可以在无需 CPU 干预的情况下启动下一批内核。

关于opencl - 当要处理的元素数量随机增长时,保持固定的 global_work_size 和 local_work_size 是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028165/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com