0

我正在开发一个 opencl 项目,我遇到了一个问题,如果我尝试将数据从 cpu 发送到全局内存,那么有时它会锁定应用程序。这种情况偶尔发生。我可以连续运行 x 次,下次锁定。只有当我尝试发送非 32 位宽的数据时,才会出现这种情况。例如,我可以很好地发送 float 和 int,但是当我尝试 short、char 或 half 时,我会得到随机锁定。它不会因为初始化错误的数据或其他东西而死,因为它确实运行,只是不是一直运行。我还进行了一些登录,发现它总是在尝试写入这些非标准大小的数据数组之一后锁定。我在 NVIDIA GeForce GT 330M 上运行。下面是我正在运行以发送数据的代码片段。我在主机端使用 c++ 接口。

cl_half *m_aryTest;

shared_ptr< cl::Buffer > m_bufTest;

m_aryTest = new cl_half[m_iNeuronCount];

m_bufTest = shared_ptr<cl::Buffer>( new cl::Buffer(m_lpNervousSystem->ActiveContext(), CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, sizeof(m_aryTest)*m_iNeuronCount, m_aryTest));


kernel.setArg(8, *(m_bufTest.get()));


printf("m_bufTest.\n");

m_lpQueue->enqueueWriteBuffer(*(m_bufTest.get()), CL_TRUE, 0, sizeof(m_aryTest)*m_iNeuronCount,  m_aryTest, NULL, NULL);

有没有人知道为什么会这样?谢谢

4

0 回答 0