2013-05-14 4 views
0

디스크 속도, pci 속도 (gpgpu) 또는 기타 병목 현상의 제한으로 인해 데이터가 느리게 액세스되는 알고리즘을 설계 할 때 경험적 규칙을 찾고 있습니다.코어/외부 메모리 알고리즘을 설계하기위한 표준 접근법은 무엇입니까?

또한 응용 프로그램의 메모리가 gpgpu 메모리를 초과하는 gpgpu 프로그램을 어떻게 관리합니까?

+0

이것은 매우 광범위한 질문이며, 너무 많이 쓰여졌습니다. 구체적으로 염두에 두어야 할 것이 있습니까? – talonmies

답변

4

일반적으로 GPU 메모리는 알고리즘의 데이터 크기에 대한 임의의 제한이 있어서는 안됩니다. GPU 메모리는 GPU가 현재 작동중인 데이터의 "캐시"로 간주 될 수 있지만 많은 GPU 알고리즘은 "캐시"에 들어갈 수있는 것보다 많은 데이터에서 작동하도록 설계되었습니다. 이것은 계산이 진행되는 동안 GPU와 데이터를주고받는 것으로 이루어지며, GPU는 이것을 가능하게하기 위해 특정 concurrent execution and copy/compute overlap mechanisms을 가지고 있습니다.

일반적으로 이것은 병렬 처리 가능한 응용 프로그램에서 가속화에 대한 좋은 지표 인 데이터 섹션에서 독립적 인 작업을 완료 할 수 있음을 의미합니다. 개념적으로 이는 대규모의 MPI 어플리케이션 (예 : 고성능 linpack)과 유사합니다.이 어플리케이션은 작업을 여러 조각으로 나눈 다음 계산을 위해 다양한 기계 (MPI 등급)로 전송합니다.

데이터 전송 비용에 비해 수행 할 작업량이 적은 경우 스토리지 시스템을 변경하여 직접 해결하지 않으면 데이터 전송 속도가 여전히 병목 현상이됩니다.

데이터 세트가 너무 커서 코어 외부 또는 GPU 메모리에 모두 들어갈 수없는 알고리즘을 처리하는 기본적인 방법은 분리 가능한 데이터에서 작동 할 수있는 알고리즘의 버전을 결정한 다음 "파이프 라인"알고리즘으로 청크로 데이터를 처리합니다. 이러한 프로그래밍 기법을 다루는 예제 튜토리얼은 here입니다.