2017-09-20 2 views
1

GPU에서 데이터를 처리 할 수있는 가능성을 고려 중입니다. GPU 메모리에 비해 너무 크기 때문에 몇 가지 질문이 있습니다.매핑 된 메모리, 통합 가상 어드레싱 및 통합 메모리를 사용한 GPU 메모리 초과 가입

올바르게 매핑 된 메모리를 사용하면 데이터가 주 메모리에 저장되어 액세스 할 때만 GPU로 전송된다는 점을 이해하면 GPU 메모리보다 더 많은 메모리를 할당하는 것이 좋습니다.

UVA는 매핑 된 메모리와 비슷하지만 데이터를 CPU와 GPU 메모리에 모두 저장할 수 있습니다. 그러나 GPU가 자체 데이터로 가득 차있는 동안 (매핑 된 메모리와 같이) 메인 메모리에 액세스 할 수 있습니까? 이 경우 메모리 오버플로가 발생할 수 있습니까? 필자는 맵핑 된 메모리를 사용하여 데이터가 전역 메모리로 직접 이동하지 않고 로컬 메모리로 직접 이동한다는 것을 읽었습니다.이 경우 오버플로가 없어야합니다. 그렇다면 UVA에서도 마찬가지입니까?

CUDA 6.0에서 UM은 GPU 메모리를 초과 가입 할 수 없으며 GPU보다 많은 메모리를 할당 할 수는 없지만 CUDA 8.0을 사용하면 가능합니다 (https://devblogs.nvidia.com/parallelforall/beyond-gpu-memory-limits-unified-memory-pascal/). 나는 그것을 올바르게 받았 느냐?

답변

2

예, 매핑 된 (즉, "제로 복사") 방법을 사용하면 데이터가 호스트 메모리에 남아 있으며 주문형 GPU로 전송되지만 GPU 코드에 저장되지 않는 한 GPU 메모리에 상주하지 않습니다). 여러 번 액세스하는 경우 호스트에서 여러 번 전송해야 할 수 있습니다.

UVA (here를 참조 주소 가상 통합)는 UM 같은 것 (통합 메모리, here 참조) 또는 관리 메모리 (== UM) 아니다, 그래서 나는 UM하지 UVA이 경우에 회부하여야한다.

사전 파스칼 장치에서 UM을 사용하면 UM "관리"할당이 일부 제한 사항에 따라 CPU와 GPU간에 자동으로 이동되지만 GPU 메모리를 초과 가입 할 수 없습니다. 모든 일반 GPU 할당량과 UM 할당량의 최대 값은 GPU 실제 메모리를 초과 할 수 없습니다.

UM plus CUDA 8.0 이상과 파스칼 또는 최신 GPU를 사용하면 UM ("관리 된") 할당으로 GPU 메모리를 초과 가입 할 수 있습니다. 이러한 할당은 시스템 메모리의 크기 (시스템 메모리에있는 다른 요구 사항을 뺀 값)로 명목상으로 제한됩니다. 이 경우 데이터는 요구 페이징 방법을 사용하여 CUDA 런타임에 의해 호스트와 장치 메모리간에 자동으로 앞뒤로 이동합니다.

UVA는 CUDA의 실제 데이터 관리 기술이 아닙니다. 매핑 된 메모리의 특정 측면과 같은 일부 기능을 활성화하고 일반적으로 UM 기능을 사용하는 기반 기술입니다.

+0

내가 제대로 이해하면 UVA는 매핑 된 메모리와 동일하지만 CPU와 GPU 모두에서 데이터에 대한 단일 포인터를 사용할 수 있습니다. 그러나 GPU 만 주 메모리에 액세스 할 수 있도록 허용하지만 CPU가 GPU 메모리에 액세스하는 것을 허용하지 않습니다 (이것은 UM에서만 가능합니다). 맞습니까? – vgeclair

+1

저는 개인적으로 UVA가 매핑 된 메모리와 별개의 개념이라고 생각합니다. 그러나 UVA가 데이터에 대한 단일 포인터 만 가지고있는 메모리에 매핑되었다고 말하고 싶다면, 나는 그것을 논쟁하지 않을 것입니다. UVA는 매핑 된 또는 제로 - 복사 메모리가 데이터에 대한 단일 포인터로 설정되도록하는 기반 기술입니다. CPU가 GPU 메모리에 직접 액세스 할 수있는 상황은 없습니다. GPU가 UM 할당에 액세스 할 때 GPU 메모리의 데이터를 먼저 CPU 메모리에 복사하면됩니다. 그러면 메모리에 대한 CPU 액세스가 진행될 수 있습니다. –

+0

답변 해 주셔서 감사합니다. 하나 더 질문에 대답 해 주시겠습니까? 매핑 된 메모리가 사용되면 액세스 한 데이터가 먼저 전역 메모리로 전송되지 않고 함께 작동하는 스레드의 로컬 메모리로 이동합니까? – vgeclair