문제

무엇 최고의 패턴을 얻을 수 GPU 효율적으로 계산하는'반대로 기능적인 루틴을 하는 일반적으로 의존하에 위치한 메모리에 쓰는 대신 읽는?예를 들어.계산 같은 히스토그램,정렬을 나누어,수 백분율에 의해,데이터 병합의 서로 다른 크기로 나열 등입니다.etc.

도움이 되었습니까?

해결책

확립 된 용어는 모이프를 읽습니다 scatter

모이는 을 모으십시오 이것은 프로그램이 귀하의 프로그램이 고정 된 위치 (조각 쉐이더의 목표 조각 위치와 같이)를 쓸 것이지만 임의의 데이터 소스 (텍스처, 유니폼 등)에 빠르게 액세스 할 수 있습니다

scatter는 을 씁니다

이는 프로그램이 조직 해제 할 수없는 입력 데이터의 스트림을 수신하지만 임의의 메모리 위치에 빠른 쓰기를 수행 할 수 있습니다.

명확하게 OpenGL의 셰이더 아키텍처는 수집 시스템입니다. 최신 OpenGL-4도 조각 쉐이더에 일부 분산물을 쓸 수 있지만 느리게됩니다.

그래서 가장 효율적인 방법은 무엇입니까? 요즘은 OpenGL을 사용하여 "산란"을 에뮬레이션합니다. 지금까지는 픽셀 크기 점에서 작동하는 정점 쉐이더를 사용하고 있습니다. 그에 따라 위치를 설정하여 대상 메모리에서 처리 할 데이터 포인트가있는 것처럼 많은 점을 보냅니다. 지오메트리 및 테셀레이션 쉐이더를 사용하여 정점 단위에서 처리 된 포인트를 생성 할 수 있습니다. 주소 지정을 위해 버텍스 / 지점 인덱스를 사용하여 데이터 입력을 위해 텍스처 버퍼와 UBOS를 사용할 수 있습니다.

다른 팁

GPU 의 여러 메모리 유형입니다.하나의 유형은 DDRx RAM 액세스할 수 있는 호스트는 CPU 의미합니다.에 CUDA OpenCL 및 이라는'글로벌'메모리입니다.Gpu 데이터에서는 글로벌 메모리로 전송해야 한다 간의 GPU 및 호스트.그것은 일반적으로 배치된 은행에서 허용한 파이프라인된 메모리 액세스입니다.그래서 임의 읽기/쓰기를'글로벌'메모리는 비교적으로 느립니다.에 액세스 할 수있는 가장 좋은 방법'글로벌'메모리는 순차적으로 동작한다.
그것의 크기는 범위에서 1G-6B 당 장치입니다.

다음 유형의 메모리를 사이에 의미합니다.그것은 공유 메모리 사용할 수 있는 스레드/경사 내에 컴퓨팅 장치/다중 프로세서입니다.이보다 더 빨리 전역 메모리하지만에서 직접 액세스할 수 있습니다.CUDA 이 공유 메모리가 있습니다.OpenCL 이 지역 메모리.이것은 메모리를 사용한 랜덤 액세스를 배열입니다.을 위해 CUDA 있 48K 및 OpenCL 있는 32K.

세 번째 종류의 메모리 GPU 등록이라는 개인에 OpenCL 또는 지역에서 CUDA.개인 메모리는 가장 빠르지만 거기에 덜 사용할 수 있다 지역/공유 메모리가 있습니다.

는 최상의 전략을 최적화를 위한 랜덤 액세스 메모리에 복사하는 것이 데이터 사이 글로벌 및 지역/공유 메모리가 있습니다.그래서 GPU 응용 프로그램 복사본부 글로벌 메모리를 로컬 공유/지를 사용하여 지역/공고를 복사 결과를 글로벌입니다.

패턴의 사본 현지,프로세스를 사용하여 지역 및 다시 복사하는 글로벌 중요한 패턴을 이해하고 배우는 프로그램에서 잘 Gpu 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top