2014-02-10 2 views
1

gpu와 장치 간의 메모리 전송을 피할 수 있는지 궁금합니다. 나는 최근에이 목적을 위해 매핑 된 메모리를 읽었습니다. 제가 틀렸다면 저를 교정하십시오.매핑 된 메모리 및 gpu :: CudaMem 사용량

  1. 얼마나 많은 매핑 메모리를 할당 할 수 있습니까?
  2. 매핑 된 메모리를 사용할 때 GPU의 전역 메모리가 사용되지 않은 채로 남아 있습니까?
    gpu::CudaMem
  3. 대신 OpenCV의에 gpu::GpuMat에 데이터를 업로드 우리가 사용할 수의 ALLOC_ZEROCOPYthis처럼 시간을 업로드 저장?
  4. 예인 경우 예를 들어 주시겠습니까?

고맙습니다!

답변

4

얼마나 많은 매핑 된 메모리를 할당 할 수 있습니까?

사용 가능한 OS 및 실제 메모리 용량에 따라 다릅니다. CUDA 드라이버는 OS 비 페이징 풀에서 매핑 된 메모리를 할당합니다. 예를 들어, 64 비트 Windows 7의 경우 실제 메모리의 최대 75 % 또는 128GB 중 작은 쪽이 될 수 있습니다. 자세한 내용은 http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx을 참조하십시오.

매핑 된 메모리를 사용하는 경우 GPU의 전역 메모리는 사용되지 않은 채로 유지됩니까?

GPU 메모리는 GPU 메모리가 사용되지 않은 상태로 남아 있습니다. 매핑 및 고정 된 메모리에 대한 NVIDIA의 백서를 참조하십시오 https://devtalk.nvidia.com/cmd/default/download-comment-attachment/50683/

대신 업로드 데이터를 GPU에 :: OpenCV의에서 GpuMat 우리는이처럼 시간을 업로드 저장 GPU :: CudaMem에 ALLOC_ZEROCOPY을 사용할 수 있습니까?

"제로 복사본"버퍼가 매핑되고 고정됩니다. 매핑 된 메모리와 고정 된 메모리를 할당 할 때 메모리 구성의 물리적 인 현실은 변하지 않습니다. 개별 GPU의 경우, PCI 또는 PCIe 버스를 통해 호스트에서 장치로 데이터를 복사해야합니다. 그것은 단지 명시 적으로가 아니라 암묵적으로 발생합니다. 코드를 적게 작성할 수는 있지만 성능을 향상시키지 못할 수도 있습니다 (별도의 GPU에서).

예인 경우 알려주시겠습니까?

당신을 도울 수 없어요.

+0

ALLOC_ZEROCOPY에 대한 대답에서이 메모리 할당을 사용하면 업로드 시간이 양식으로 저장되지 않는다는 것을 의미합니까? 즉, gpuMatIm.upload (cpuMatIm)를 통해 이미지를 업로드하는 데 필요한 시간은 매핑 된 메모리 또는 고정 된 메모리로 피하거나 줄일 수 없습니까? _discete_ GPU를 말하면 무엇을 의미합니까? 고맙습니다! – Thoth

+0

분리 된 GPU는 자체 메모리를 가지고 있으며 PCI 버스를 통해 GPU로 데이터를주고받습니다. 데스크톱 시스템에서는 일반적으로 사용되며 메모리 대역폭이 CPU와 공유되지 않기 때문에 그래픽 속도가 빠릅니다. 통합 된 GPU는 메모리를 CPU와 공유합니다. 일반적으로 GPU에 사용할 시스템 메모리의 양을 BIOS로 설정합니다. 이것을 종종 공유 메모리라고합니다. CUDA 공유 메모리와 혼동하지 마십시오. –

+0

매핑 된 메모리가 개별 GPU가 아닌 개별 GPU에서 더 유용하다는 것을 의미합니다. – Thoth