CUDA 고정 메모리가 그렇게 빠른 이유는 무엇입니까?


84

CUDA 데이터 전송을 위해 고정 된 메모리를 사용할 때 데이터 전송 속도가 상당히 빨라집니다. Linux에서이를 달성하기위한 기본 시스템 호출은 mlock입니다. mlock의 man 페이지에서 페이지를 잠그면 교체되는 것을 방지한다고 명시되어 있습니다.

mlock ()은 addr에서 시작하여 len 바이트 동안 계속되는 주소 범위의 페이지를 잠급니다. 호출이 성공적으로 반환되면 지정된 주소 범위의 일부를 포함하는 모든 페이지가 RAM에 상주합니다.

내 테스트에서 시스템에 몇 기가의 여유 메모리가 있었으므로 메모리 페이지를 교체 할 수있는 위험이 없었지만 여전히 속도 향상을 관찰했습니다. 누구든지 여기서 실제로 무슨 일이 일어나고 있는지 설명 할 수 있습니까?, 어떤 통찰력이나 정보라도 대단히 감사합니다.


mlock 자체의 시간을 측정 했습니까?
osgx 2011

아니요, mlock 호출을 실행하는 데 걸리는 실제 시간은 무시할 수있는 것으로 간주됩니다 (당신이 요청하는 경우). 실제 오버 헤드는 실제 데이터 전송이며, 내 알고리즘에서는 전체주기 시간의 상당 부분을 차지합니다.
Gearoid Murphy 2011

CPU는 무엇입니까? 아마도 NUMA 사용 노드는 단순 mlock().
osgx 2011

AMD Phenom (tm) II X4 970 프로세서
Gearoid Murphy 2011

답변:


85

CUDA 드라이버 메모리 범위가 잠겨 있는지 여부를 확인한 다음 다른 코드 경로를 사용합니다. 잠긴 메모리는 물리적 메모리 (RAM)에 저장되므로 장치는 CPU (DMA, 일명 비동기 복사, 장치는 물리적 페이지 목록 만 필요)에서 도움없이이를 가져올 수 있습니다. 잠기지 않은 메모리는 액세스시 페이지 오류를 생성 할 수 있으며 메모리 (예 : 스왑에있을 수 있음)에만 저장되므로 드라이버는 잠기지 않은 메모리의 모든 페이지에 액세스하여 고정 된 버퍼에 복사하여 전달해야합니다. DMA (동기화, 페이지 별 복사)로.

여기에 설명 된대로 http://forums.nvidia.com/index.php?showtopic=164661

비동기 mem 복사 호출에 사용되는 호스트 메모리는 cudaMallocHost 또는 cudaHostAlloc을 통해 페이지를 잠 가야합니다.

또한 developer.download.nvidia.com에서 cudaMemcpyAsync 및 cudaHostAlloc 매뉴얼을 확인하는 것이 좋습니다. HostAlloc은 cuda 드라이버가 고정 된 메모리를 감지 할 수 있다고 말합니다.

드라이버는 this (cudaHostAlloc) 함수로 할당 된 가상 메모리 범위를 추적하고 cudaMemcpy ()와 같은 함수에 대한 호출을 자동으로 가속화합니다.


1
비동기 복사 명령을 내린 후 다른 스레드가 페이지를 뭉치 게함으로써 얼마나 많은 피해를 입힐 수 있는지 궁금합니다.
Zan Lynx

1
Zan Lynx, 흥미로운 질문입니다. 이 메모리를 잠금 해제하려는 이유는 무엇입니까? 32 비트 PC에서도 최대 2-4GB의 메모리가 잠길 수 있으며 PCI-express 카드가 64 비트 (실제 40 비트 또는 48 비트) 주소 지정에 액세스 할 수있는 경우 그 이상이 될 수 있습니다. 더 많은 메모리를 구입 한 다음 만료 된 (SO에서 18k rep!) ​​프로그래머에게 비용을 지불하는 것이 훨씬 저렴합니다. Linux에서와 마찬가지로 munlock이 차단되거나 오류를 반환하고 시스템에 손상이 가해지지 않을 것이라고 생각합니다.
osgx 2013 년

cudaHostRegister메모리 매핑 파일에 대한 포인터에 적용 할 수 있습니까 ?
Tomilov Anatoliy

16

CUDA는 DMA를 사용하여 고정 된 메모리를 GPU로 전송합니다. 페이징 가능한 호스트 메모리는 디스크에 상주 할 수 있으므로 DMA와 함께 사용할 수 없습니다. 메모리가 고정되지 않은 경우 (예 : 페이지 잠금) 먼저 페이지 잠금 "스테이징"버퍼에 복사 된 다음 DMA를 통해 GPU에 복사됩니다. 따라서 고정 메모리를 사용하면 페이징 가능한 호스트 메모리에서 페이지 잠금 호스트 메모리로 복사하는 시간을 절약 할 수 있습니다.


5

메모리 페이지가 아직 액세스되지 않은 경우, 그들은 아마도했다 시작하기에 스왑되지 않습니다 . 특히 새로 할당 된 페이지는 범용 "제로 페이지"의 가상 복사본이되며 기록 될 때까지 물리적 인스턴스화가 없습니다. 디스크에있는 파일의 새로운 맵은 읽거나 쓸 때까지 순수하게 디스크에 남아 있습니다.


나는 그것이 실제 프로그램이고 프로그램 mlock()에서 빠르기 때문에 (나는 내 ​​대답의 초기 변형에 대해 쓴다) 사례가 아니라고 생각합니다 (Q에 대한 의견 # 2 확인).
osgx 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.