제목에서 알 수 있듯이 실제로 두 개의 OpenCL 버퍼를 효과적으로 교환하는 방법을 찾고 있습니다. 커널은 두 개의 gloabl 버퍼를 사용하는데 하나는 입력으로, 다른 하나는 출력으로 사용됩니다. 그러나 커널 인자를 설정할 때마다 같은 NDRange를 사용하여 for 루프에서 커널을 호출하고 커널을 대기열에 넣으며 이전 출력 버퍼가 다음 반복의 입력 버퍼 시드가 될 것이기 때문에 버퍼를 교체합니다.OpenCL 메모리 버퍼를 효과적으로 바꾸는 방법은 무엇입니까?
여기서 두 가지 버퍼를 바꾸려면 적절한 방법은 무엇입니까? 이미 버퍼를 호스트에 복사하여 이미 malloc 된 배열 중 하나에 복사하고 clEnqueueWriteBuffer()
및 clEnqueueReadBuffer()
을 사용하여 다음 입력 버퍼에 복사하는 것이 비효율적 인 방법이라고 생각합니다. 그렇지 않으면 임시 교환변수를 사용하고 있습니다.
글쎄, 나는 그것에 대해 생각했다. 하지만 모든 반복을 입력 및 출력 커널 args 대체해야 할 것이라고 보인다? – voxeloctree
예 - 가능합니다. 스왑하고 각 반복마다 설정하십시오. 이것은 핑퐁 (ping-ponging)입니다. (http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html#feedback2) – Ani
글쎄, 나는 그것에 대해 확실히 생각했다. 하지만 미안, 내 질문에 명확하게하지 않았다면. "두 번째 시간"은 두 번 의미합니다. 수백만이 아닙니다. 그렇지 않으면 방대한 병렬 처리의 요점은 무엇입니까? 둘 다 감사합니다. – voxeloctree