enqueueWriteBuffer在发送非32位对齐数据时锁定

时间:2012-12-24 17:41:04

标签: opencl

我正在开发一个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);

有没有人对为什么会这样做有任何想法? 感谢

0 个答案:

没有答案