Nvidia는 Cuda 4.0을 사용하여 프로그래머가 CPU와 GPU간에 통합 메모리 모델을 사용할 수 있다고 주장합니다. 이것은 최상의 성능을 위해 GPU와 CPU에서 수동으로 메모리를 관리 할 필요를 대체하지는 않지만 테스트, 검증 및 최적화 (수동으로 GPU와 CPU 메모리 관리)가 가능한 구현을 허용합니까? 나는 의견이나 의견을 듣고 싶다.Cuda 4.0 및 통합 메모리 모델에 대한 질문
답변
내가 읽은 것에서 중요한 차이점은 2 개 이상의 GPU가있는 경우 호스트 RAM을 건드리지 않고도 GPU1에서 GPU2로 메모리를 전송할 수 있다는 것입니다. 또한 호스트의 단 하나의 스레드로 2 GPU를 제어 할 수 있습니다.
흠, 큰 소식 인 것 같다! 엔비디아 자체 기술자에 의해 구축 된 thrust 라이브러리는 이미 당신에게 약간의 맛을줍니다. = 부호만으로 RAM에서 GPU의 DRAM으로 데이터를 옮길 수 있습니다 (cudaMalloc 및 cudaMemcpy를 호출 할 필요가 없습니다). 그래서 추력은 CUDA-C를 '그냥 C'와 더 비슷하게 만듭니다.
어쩌면 그들은 이것을 미래에 CUDA-API에 통합 할 것입니다. 백 핸드에서는 프로 시저가 동일 할 것이고 (그리고 영원히 동일하게 유지 될 것입니다), 프로그래머에게는 쉽게 숨겨져 있습니다. (나는 그것을 싫어한다)
편집 : CUDA 4.0이 발표되었으며 은이 통합되었다.
"통합 된"메모리는 주소 공간만을 나타냅니다. 호스트 및 장치 포인터는 동일한 64 비트 주소 공간에서 할당되므로 주어진 포인터 범위는 프로세스 전체에서 고유합니다. 결과적으로 CUDA는 포인터 범위에서 "속하는"포인터를 추론 할 수 있습니다.
주소 공간과 해당 포인터 범위를 읽고 쓸 수있는 기능을 혼동하지 않는 것이 중요합니다. CPU는 장치 메모리 포인터를 역 참조 할 수 없습니다. 통합 주소 가능 플랫폼에서 모든 호스트 할당이 기본적으로 매핑되므로 GPU가 호스트 할당을 역 참조 할 수 있다고 생각합니다.
참고 : Windows Vista/Windows 7의 기본 드라이버 모델은이 기능을 지원하지 않습니다.
추력은 대입 연산자가 밑에있는 cudaMemcpy를 오버라이드합니다. 메인 메모리를 통해 GPU에서 다른 GPU로 복사하지 않으면 다른 GPU에서 다른 GPU로 데이터를 가져와야합니다. CUDA 4.0은이 제한을 없앴습니다. –
멋지다는 것을 몰랐습니다. – tim