我有一个应该在GPU上运行的Opencl内核代码。它有一个循环,可以连续执行操作并修改数组。有没有办法在长时间修改期间访问数组以查看它的渐进结果?
执行可能需要数小时。我想每30秒从数组中生成一个图形结果。我目前必须等待,当最终结果完成时,我产生了图形结果。
答案 0 :(得分:4)
你应该不制作一个运行数小时的内核。首先,如果GPU与显示器连接的GPU相同,则显示器和GUI不会更新。在Windows(以及可能的其他操作系统)下,驱动程序将在内核运行几秒后重置GPU。唯一可能的情况是使用仅计算设备(如特殊模式下的NVIDIA Tesla)。但是,如果没有OpenCL 2.0和细粒度SVM,CPU就无法获得部分结果。
相反,您应该将您的工作分解为许多小内核执行。这也将解决您的数据访问问题;你可以定位输出缓冲区的环形缓冲区,这样CPU就可以在下一个内核生成下一组结果时查看结果。