我正在开发一个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);
有没有人对为什么会这样做有任何想法? 感谢