2012-03-22 2 views
1

메신저 열기구 쓰기 및 나는 이상한 문제가 있습니다. 커널 실행 이전에 clEnqueueReadBuffer가 gpu mem에서 프로그램 mem 20000 배열로 float를 읽는 데 아무런 문제가 없었습니다.하지만 커널이 실행 한 후 전달 된 배열에서 일부 작업을 수행 한 후에는 너무 오래 (~ 150 ms)의 읽기 버퍼가 필요했습니다. 왜? 두 경우 모두 데이터로 채워졌습니다. 커널이 잘못된 것은 무엇일까요? (배열을 통과 한 것은 __global 임).Open CL clEnqueueReadBuffer 실행 시간

+0

커널을 실행하기 전에 GPU 메모리가 데이터로 어떻게 채워 졌습니까? – ardiyu07

답변

1

clEnqueueNDRangeKernel 실제로 커널을 시작하지 않으면 커널을 "대기"합니다. OpenCL 구현은 적합하다고 판단 될 때마다 커널을 시작할 수 있습니다 (이 경우, 결과를 알기 위해 커널을 실행해야하므로 결과를 읽으라는 요청을 할 때).

그러나 구현시 강제로 clFinish을 통해 커널을 시작할 수 있습니다.

사실, 150ms 지연은 실제로 커널이 실행되는 데 걸리는 시간입니다.

clFinish을 실행 및 두 번째 읽기 사이에 호출하면 작동합니다.