각 블록이 데이터의 주어진 부분 집합을 담당하면서 처리 할 데이터가 있습니다.CUDA의 여러 텍스처 참조 - 커널 시간에 사용
내 응용 프로그램의 특성상이 데이터가 텍스처 메모리에 있어야합니다. 그러나 데이터가 너무 커서 단일 텍스처 참조에 적합하지 않습니다.
정확하게 이해했다면 여러 개의 텍스처 참조를 가질 수는 있지만 텍스처 참조의 배열은 가질 수 없습니다. 나는 각 블록에서 다른 데이터 집합을 처리하기 위해 필요로하는
, 나는 ',
while(counter < 10000) {
if(blockIdx.x == 0)
foo = tex2D(tex0, x, y);
else if(blockIdx.x == 1)
foo = tex2D(tex1, x, y);
...
}
같은 (커널) 일을 생각뿐만 아니라 볼이 나쁜되었다 또한 발산 문제가 발생하지 않을지 확실하지 않습니다. 내가 텍스처 참조 글로벌 및 스레드 민간없는 생각으로도 꽤 바로 보이지 않는다
texture<int, 2, cudaReadModeElementType> ref;
(..)
/* kernel code from now on */
if(blockIdx.x == 0)
ref = tex0;
else if(blockIdx.x == 1)
ref = tex1;
...
while(counter < 10000)
foo = tex2D(ref, x, y)
같은 일을
.
다른 대안이 있습니까? 고맙습니다.
데이터가 실제로 다른 텍스처로 시작해야합니까? – talonmies
선형 메모리에 바인딩 된 2D 텍스처의 최대 크기는 이미 mem의 4Gb 인 65000 x 65000입니다. 최대 크기 8k x 8k x 512 = 32Gb의 2D 레이어드 텍스처도 있습니다. 그래픽 카드의 전체 메모리 용량은 얼마입니까? 나는 매우 큰 텍스쳐가 거의 없다고 가정합니다. –
@talonmies 크기 제한 때문에 하나의 텍스처에만 맞지 않습니다. –