检索以特定结果结束的 opencl 内核程序的数量
Retrieving number of opencl kernel programs that end with a certain result
我的目标是获得多个内核,其计算满足条件。条件可以是 value == 0
.
我试图找到一些 built-in 信号量函数来完成这个,但我找不到任何用于 OpenCL 的函数。我不想将结果 blit 到 CPU 内存中,因为这会有点低效。
我尝试过或认为可行的另一件事是使用错误来使某些内核崩溃,然后使用一些调试代码来检索崩溃内核的数量。然后我可以写类似 1/value
的东西,满足我条件的每个内核都会崩溃。不幸的是,我找不到这样的 OpenCL(调试)函数来检索此信息。
我想,这种方法可能比使用信号量的方法慢一点,因为它可能会触发一些 fallback/cleanup 代码。
进一步的限制是,主机上的代码只能为此使用 OpenCL headers。
知道如何在不涉及 CPU 的情况下检索满足条件的多个内核吗?
正如 pmdj 所建议的:
OpenCL 提供原子操作,包括全局(和本地)缓冲区的原子增量:atomic_inc。 unsigned int atomic_inc(volatile __global unsigned int *p)
更好的是,此功能不需要任何 OpenCL 扩展。
我的目标是获得多个内核,其计算满足条件。条件可以是 value == 0
.
我试图找到一些 built-in 信号量函数来完成这个,但我找不到任何用于 OpenCL 的函数。我不想将结果 blit 到 CPU 内存中,因为这会有点低效。
我尝试过或认为可行的另一件事是使用错误来使某些内核崩溃,然后使用一些调试代码来检索崩溃内核的数量。然后我可以写类似 1/value
的东西,满足我条件的每个内核都会崩溃。不幸的是,我找不到这样的 OpenCL(调试)函数来检索此信息。
我想,这种方法可能比使用信号量的方法慢一点,因为它可能会触发一些 fallback/cleanup 代码。
进一步的限制是,主机上的代码只能为此使用 OpenCL headers。
知道如何在不涉及 CPU 的情况下检索满足条件的多个内核吗?
正如 pmdj 所建议的:
OpenCL 提供原子操作,包括全局(和本地)缓冲区的原子增量:atomic_inc。 unsigned int atomic_inc(volatile __global unsigned int *p)
更好的是,此功能不需要任何 OpenCL 扩展。