0

私は opencl プロジェクトに取り組んでおり、CPU からグローバル メモリにデータを送信しようとすると、アプリケーションがロックされることがあるという問題に遭遇しました。これは散発的に発生します。x回連続して実行でき、次回はロックされます。32 ビット幅ではないデータを送信しようとした場合にのみ発生しているようです。たとえば、float と int は問題なく送信できますが、short、char、または half を送信しようとすると、ランダムなロックアップが発生します。常に実行されるわけではないため、初期化が不十分なデータなどで死ぬことはありません。また、いくつかのログを記録したところ、これらの非標準サイズのデータ​​配列の 1 つを書き込もうとした直後に、常にロックされていることがわかりました。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