2012-01-07 2 views
16

Simon Green이 작성한 NVIDIA 백서 Particle Simulation with CUDA을 읽었습니다.CUDA의 텍스처 메모리 : 성능을 보여주는 개념과 간단한 예제

SDK 입자 예제 및 사용 된 알고리즘에 대해 설명합니다.

코드의 성능을 논의하면서 저자는 입자의 위치와 속도의 전역 메모리 배열이 텍스처에 "결합"되어 있다고 말합니다.

이제 텍스처 메모리의 개념에 대해 매우 혼란 스럽습니다. NVIDIA CUDA 프로그래밍 가이드는 어떤 예제도없이 정말 피곤하고 어려운 설명을 거칩니다.

  1. 누군가가/줄 (인형에 대 한 텍스처 메모리) 정말 간단한 날을 참조 할 수 있습니다 질감이 성능을 향상 사용하는 방법의 예 :

    는 그러므로 나는이 개 질문이 있습니다.

  2. 페이지의 40 페이지의 CUDA 프로그래밍 가이드 4.0에는 "텍스처는 선형 메모리 또는 CUDA 어레이의 모든 영역이 될 수 있습니다"라고되어 있습니다. 이제 (말한대로) 텍스처 메모리가 전역 메모리보다 더 나은 성능을 제공한다면 왜 전체 전역 메모리를 텍스처 메모리에 "바인딩"하지 않을까요?

답변

22
  1. 쿠다 SDK 사소한는 2D 텍스처를 이용하여 좌표 변환을 수행 보여주는 간단한 예 simpleTexture를 포함한다.
  2. 먼저 염두에 두어야 할 것은 텍스처 메모리 글로벌 메모리입니다. 유일한 차이점은 텍스처는 전용 읽기 전용 캐시를 통해 액세스되며 캐시에는 읽기 프로세스의 일부로 선형 부동 소수점 보간을 수행 할 수있는 하드웨어 필터링이 포함된다는 것입니다. 그러나 캐시는 메모리의 지역성이 아닌 공간 지역성 (텍스처의 좌표 시스템에서)에 최적화된다는 점에서 일반 캐시와 다릅니다. 일부 응용 프로그램의 경우 이것은 이상적이며 캐싱과 필터링 하드웨어에서 얻을 수있는 무료 FLOP 때문에 성능상의 이점을 제공하지만 다른 경우에는 액세스가 캐시를 포함하기 때문에 은 느림 일 수 있습니다 미스 페널티뿐만 아니라 보간이 필요하지 않습니다.

계산은 일반적으로 로컬 상호 작용이 고려되는 셀 또는 제어 볼륨에서 수행되고 이웃 입자는 서로 속도와 가속에 액세스해야하기 때문에 파티클 시뮬레이션과 같은 것이 텍스처의 이점을 얻을 수 있습니다. 공간 선형 캐시는 단순 선형 메모리 캐시보다 더 잘 작동합니다. 그러나 다른 응용 프로그램의 경우 메모리 액세스 패턴에 고유 한 공간적 위치가 없으며 텍스처는 기존의 캐시 된 메모리에 비해 거의 또는 전혀 이점을 제공하지 않습니다.

+0

텍스처 메모리가 전역 메모리에 액세스하는 다른 방법 일 뿐인가요? 작품의 맥락에서 각 입자에 대해 빠른 이웃 검색을 수행하기 위해 GPU에서 octree를 만드는 데 관심이 있습니다. 시뮬레이션에서 각 스레드가 하나의 입자에 대한 계산을 수행한다고 가정합니다. octree 데이터 구조는 벡터입니다. 나무를 가로 지르는 동안, 모든 스레드는 트리를 "걸어 내려 가서"각각의 이웃을 찾습니다. 그렇다면 옥트리 벡터가 텍스처 메모리에 바인딩되면 트리 트래버스가 더 빨라질까요? – smilingbuddha

+0

NVIDIA GPU의 텍스처 하드웨어는 완전한 유형으로 만 작동합니다. 일반적인 옥트리 트리 구조는 텍스처에 바인딩 될 수 없습니다. – talonmies

+2

단 정밀도 부동 소수점 값도 포함되지 않습니까? CUDA의 40 페이지 4.0 프로그래밍 가이드 그것은 말합니다 "텍스처 참조는 * texture texref * 유형의 변수로 파일 범위에서 선언됩니다. * DataType *은 텍스처를 가져 오는 동안 데이터 형식을 정의하고 * Type *은 기본 정수 및 단 정밀도 부동 소수점 형식으로 제한 ..... " – smilingbuddha