2011-02-28 3 views
2

Nvidia는 Cuda 4.0을 사용하여 프로그래머가 CPU와 GPU간에 통합 메모리 모델을 사용할 수 있다고 주장합니다. 이것은 최상의 성능을 위해 GPU와 CPU에서 수동으로 메모리를 관리 할 필요를 대체하지는 않지만 테스트, 검증 및 최적화 (수동으로 GPU와 CPU 메모리 관리)가 가능한 구현을 허용합니까? 나는 의견이나 의견을 듣고 싶다.Cuda 4.0 및 통합 메모리 모델에 대한 질문

답변

3

내가 읽은 것에서 중요한 차이점은 2 개 이상의 GPU가있는 경우 호스트 RAM을 건드리지 않고도 GPU1에서 GPU2로 메모리를 전송할 수 있다는 것입니다. 또한 호스트의 단 하나의 스레드로 2 GPU를 제어 할 수 있습니다.

3

흠, 큰 소식 인 것 같다! 엔비디아 자체 기술자에 의해 구축 된 thrust 라이브러리는 이미 당신에게 약간의 맛을줍니다. = 부호만으로 RAM에서 GPU의 DRAM으로 데이터를 옮길 수 있습니다 (cudaMalloc 및 cudaMemcpy를 호출 할 필요가 없습니다). 그래서 추력은 CUDA-C를 '그냥 C'와 더 비슷하게 만듭니다.

어쩌면 그들은 이것을 미래에 CUDA-API에 통합 할 것입니다. 백 핸드에서는 프로 시저가 동일 할 것이고 (그리고 영원히 동일하게 유지 될 것입니다), 프로그래머에게는 쉽게 숨겨져 있습니다. (나는 그것을 싫어한다)

편집 : CUDA 4.0이 발표되었으며 이 통합되었다.

+2

추력은 대입 연산자가 밑에있는 cudaMemcpy를 오버라이드합니다. 메인 메모리를 통해 GPU에서 다른 GPU로 복사하지 않으면 다른 GPU에서 다른 GPU로 데이터를 가져와야합니다. CUDA 4.0은이 제한을 없앴습니다. –

+0

멋지다는 것을 몰랐습니다. – tim

0

"통합 된"메모리는 주소 공간만을 나타냅니다. 호스트 및 장치 포인터는 동일한 64 비트 주소 공간에서 할당되므로 주어진 포인터 범위는 프로세스 전체에서 고유합니다. 결과적으로 CUDA는 포인터 범위에서 "속하는"포인터를 추론 할 수 있습니다.

주소 공간과 해당 포인터 범위를 읽고 쓸 수있는 기능을 혼동하지 않는 것이 중요합니다. CPU는 장치 메모리 포인터를 역 참조 할 수 없습니다. 통합 주소 가능 플랫폼에서 모든 호스트 할당이 기본적으로 매핑되므로 GPU가 호스트 할당을 역 참조 할 수 있다고 생각합니다.

참고 : Windows Vista/Windows 7의 기본 드라이버 모델은이 기능을 지원하지 않습니다.

관련 문제