2014-02-24 4 views
3

CUDA 6.0 RC를 다운로드하고 응용 프로그램에서 "cudaMallocManaged"를 사용하여 새로운 통합 메모리를 테스트했습니다. 그러나이 커널은 속도가 느려졌습니다."cudaMallocManaged"가 "cudaMalloc"보다 느립니다.

cudaMalloc 다음에 cudaMemcpy을 사용하면 cudaMallocManaged (~ 0.63)에 비해 빠릅니다 (~ 0.63). 예상 한 결과입니까?

website 중 하나는 cudaMallocManged가 "빠른 프로토 타이핑 (coda kernel)"을위한 것이라고 주장했기 때문에 어느 것이 더 나은 성능 옵션인지 궁금합니다.

감사합니다.

+0

호스트 메모리가 * 고정 된 경우 * 예, 관리되는 메모리보다 빠를 것으로 예상됩니다. – Michael

+0

하지만 _pinned_ 메모리를 사용하고 있지 않습니다. – Genutek

+0

호스트 메모리를 어떻게 할당합니까? – Michael

답변

17

cudaMallocManaged()은입니다. 응용 프로그램의 속도가 빨라지는 것에 대해서는 약간 예외적 인 경우 나 몇몇 경우를 제외하고는 아래에 나와 있습니다.

통합 메모리의 오늘의 구현 및 cudaMallocManaged하지 같은 일을 할 수있는 숙련 된 CUDA 프로그래머에 의해 작성된 빠른 지능적으로 기록 된 것보다 코드가 될 것입니다. 기계 (cuda 런타임)는 프로그래머보다 똑똑하지 않습니다. cudaMallocManaged은 마술처럼 PCIE 버스를 만들지 않거나 일반 기계의 아키텍처 제한이 사라집니다.

빠른 프로토 타이핑은 코드 속도가 아니라 코드를 작성하는 데 걸린 시간을 나타냅니다.

cudaMallocManaged는 다음과 같은 상황에서 능숙 CUDA 프로그래머에 관심이있을 수 있습니다

  1. 당신은 신속하게 함께 프로토 타입을 얻기에 관심이 -i.e. 당신은 지난번의 성과에 대해 상관하지 않습니다.
  2. 자주 사용하지 않는 복잡한 데이터 구조 (예 : 이중 연결 목록)를 다루고 있습니다. 그렇지 않으면 일반 CUDA 코드를 사용하는 딥 복사본은 자질구레 한 일이기 때문에 CUDA로 이식하는 것이 어려울 수 있습니다. 응용 프로그램이 작동하려면 필요하지만 성능 경로에는 포함되지 않습니다.
  3. 일반적으로 제로 사본을 사용합니다. cudaMallocManaged을 사용하는 것이 순진하거나 비효율적 인 제로 카피 방식보다 더 빠를 수있는 상황이있을 수 있습니다.

cudaMallocManaged은 당신이 가능성이 간단 학습 곡선을 따라 CUDA 젖은 발을 얻을 수 있다는 점에서 비 능숙 CUDA 프로그래머가 관심을 가질 수 있습니다.

댓글에 Maxwell이 언급되어 있지만 CUDA UM은 일부 설정에서 일부 GPU의 경우 파스칼 세대 GPU에서 중요한 새로운 기능을 제공합니다. 특히 이러한 설정의 통합 메모리는 더 이상 사용 가능한 GPU 장치 메모리로 제한되지 않으며 메모리 처리 세분성은 커널이 실행 중일 때라도 페이지 수준으로 떨어집니다. 자세한 내용은 here을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다.내 경우에는 cudamalloc이 더 적합하다고 생각합니다. 많은 분들께 감사드립니다 .... – Genutek

+0

맥스웰 아키텍처가 통합 메모리에 대한 HW 지원을 제공해야하므로 'cudaMallocManaged()'가 더 나은 성능을 제공 할 수 있습니다. – Adam27X

+0

나의 진술은 대체로 오늘날의 통합 메모리가 할 일을 반영하기위한 것입니다. UM의 미래 발전은 다음과 같을 것입니다 : ** 1 ** GPU와 호스트 모두에서 새로운 HW 아키텍처를 활용하고, ** 2. 숙련 된 CUDA 프로그래머가 처리하고, 수행 할 수있는 작업 (CUDA 런타임)은 무엇입니까? –