我使用 PyOpenCL 编写了一些多线程代码,在以下条件下可以正常工作:
- GPU 32 位浮点值(Intel Iris GPU 只能处理单精度值)
- CPU 32 位浮点值。
所有数据缓冲区都被定义,程序执行和输出数据排队,所有这些都在一个在循环中调用的函数内。使用 64 位双精度值时,循环运行两次,然后抛出错误“分段错误:11”。
因此,我不认为这是由于准备 OpenCL 内核所涉及的字符串操作。似乎更可能与分配的内存有关。
有趣的是,CPU max_work_group 是 1024,GPU max_work_group 是 512。
使用单精度值成功但使用双精度值失败的可能原因有哪些?