플래그가 CL_MEM_USE_HOST_PTR | CL_MEM_READ_WRITE
플래그로 생성되었습니다. 하나의 커널에서 이것을 사용하고 버퍼가 생성 될 때 호스트 메모리 세트로 데이터를 다시 다운로드했습니다 (queue.enqueueReadBuffer(...)
). 이 데이터를 CPU에서 수정 했으므로 다른 커널에서이 데이터를 사용하고 싶습니다. 논 블로킹 쓰기를 사용하여 데이터를 수동으로 업로드 한 후 (queue.enqueueWriteBuffer
)이 버퍼를 인수로 사용하여 대기열에 추가하면 CL_OUT_OF_RESOURCES
오류가 반환됩니다. 블로킹 쓰기는 괜찮았다.순서없는 큐에 논 블로킹 쓰기
왜 이런 일이 발생 했습니까? 나는 블로킹/비 블로킹 버전이 enqueueWriteBuffer
호출이 리턴 된 후 CPU의 메모리로 작업 할 수있는 경우에만 제어한다고 생각하고, 순서 대기열과 함께 커널에 차이가 없어야합니다. 두 번째 질문은 수동으로 업로드해야하는지 여부입니다. CL_MEM_USE_HOST_PTR
은 일부 커널이 버퍼를 인수로 사용할 때마다 데이터가 호스트에서 장치로 업로드되어야한다는 것을 의미합니까? 데이터를 수동으로 다운로드해야하므로 위에서 언급 한 플래그가 있습니다.
감사