我正在使用 OpenCL 在 Intel CPU 的所有内核上运行模拟。主进程代码由一个循环组成,在该循环中重复调用 opencl 内核。循环内不会分配内存,也不会使用任何事件。但是,程序的内存使用量在模拟过程中会稳步增加,除非我添加对 clFinish()
和 clFlush()
的定期调用。
谁能解释一下这是怎么回事?
最佳答案
因为这是问题的答案,所以我将其放在这里:
如果您以非阻塞方式将 OpenCL 调用放入循环中。然后这些调用队列必须存储在某个地方。这会占用内存,直到您clflush()
到GPU,或者等待它clFinish()
。然而它不应该无限期地增长,因为驱动程序应该在某个时候处理它。
关于memory - 为什么将 OpenCL 内核排队执行会导致程序的内存使用增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099985/