같은 문제를 다루는 스택 오버플로에 대해 몇 가지 질문을 보았지만 확실한 답변은 없습니다. 나는 내 자신의 질문들로 다시 물을 것이라고 생각했다. 모두는 당면한 주제와 관련이 있습니다.언제 OpenCL 데이터 전송이 발생합니까?
따라서 호스트에서 openCL 장치로의 데이터 전송이 언제 발생하는지 알고 있습니까?
clCreateBuffer()
clSetKernelArg()
clEnqueueNDRangeKernel()
: 당신은 나에게 아래의 기능 (?이 함수가 호출 될 때 즉, 어떤 데이터가있는 경우, 전송 또는 생성한다)의 정확한 메모리 전송 작업을 말할 수
첫 번째 두 개는 이벤트를 생성하지 않으므로 시간을 측정 할 수 없지만 일부 데이터는 여기에서 발생합니다.
먼저 커널 arg로 설정하지 않고 데이터를 장치로 전송할 수 있습니까?
CL_MEM_USE_HOST_PTR
으로 생성 된 mem 개체가 장치에 의해 직접 조작되는 것으로 나타납니다 (자체 테스트 결과). 왜 그렇게 바람직하지 않을까요? 그런 식으로, 우리는 더 많은 데이터 전송 명령을 피할 수 있습니다. (그리고 확실히 드라이버가 이것을 가장 효율적으로 구현합니다.)
커널이 반환 한 후에 전송 된 데이터 (예 : 커널 arg의 파)가 장치에 머물러 추가 조작이 가능합니까? 없다면 그냥 할 수있는 방법이 있습니까?