2012-05-24 3 views
2

OpenCL 프로그램을 작성 중이며 DMA를 사용하여 프레임 그래버에서 GPU로 데이터를 전송하고 싶습니다. GPU에서 OpenCL 버퍼의 실제 주소를 가져 오려면 어떻게해야합니까?DMA 용 GPU 메모리의 실제 주소를 얻는 방법은 무엇입니까? (OpenCL)

+0

모든 경우 가능하지 않습니다. 사용중인 운영 체제 및 하드웨어에 따라 GPU 메모리에 직접 액세스하지 못하게하는 호스트 측 드라이버 및/또는 운영 체제 분할이 있습니다. – talonmies

+0

저는 실제로 자체 설계의 프레임 그래버를 사용하고 있으므로 드라이버가 제 통제하에 있습니다. 사용 된 OS는 Windows 또는 Linux입니다. GPU 메모리 주소에 액세스 할 수있는 방법이 아직 없습니까? –

+1

내가 드라이버를 언급 할 때, 나는 GPU 드라이버를 의미한다. 호스트 GPU 드라이버 (또는 WDDM 창에서 디스플레이 관리자)가 장치 메모리를 능동적으로 관리합니다. 각 GPU 프로세스는 고유 한 가상화 된 주소 공간을 가진 컨텍스트를 얻습니다. 사용자 공간 프로세스는 원시 메모리를 전혀 보지 못합니다. 사실 모든 현대 GPU는 주어진 컨텍스트에서 주소 변환을 처리하는 온보드 TLB를 사용합니다. NVIDIA는 Telsa 카드에 DMA를 사용하는 Inifiband 어댑터를 지원하는 CUDA 용 특별 드라이버 후크를 몇 개 가지고 있지만 공용 AFAIK는 아닙니다. – talonmies

답변

2

OpenCL을 사용하면 버퍼의 물리적 GPU 주소를 가져올 수 없습니다.

그러나 버퍼의 영역을 직접 호스트 메모리에 매핑 할 수 있으므로 memcpy와 같은 표준 C/C++ 코드를 사용하여 메모리를 복사 할 수 있습니다. clEnqueueMapBuffer를 참조하십시오.