네, 텍스처 메모리로이를 수행 할 수 있으며 속도가 빠릅니다. 나는 수동으로 코드를 작성하는 것보다 더 빠르기 때문에 개인적으로 ArrayFire을 사용하여 이러한 종류의 작업을 수행합니다. 그냥 플러그인 내 경험에서 내가 시도하는 것보다 빠릅니다 ArrayFire (원하는 경우
// outside kernel
texture<float,1> A;
cudaChannelFormatDesc desc = cudaCreateChannelDesc<float>();
cudaArray *arr = NULL;
cudaError_t e = cudaMallocArray(&arr, &desc, 1, length);
A.filterMode = cudaFilterModePoint;
A.addressMode[0] = cudaAddressModeClamp;
cudaBindTextureToArray(A, arr, desc);
...
// inside kernel
valA = tex1D(A,1,idx)
valB = tex1D(B,1,idx)
float f = 0.5;
output = (f)*valA + (1-f)*valB;
:
당신이 CUDA에 자신을 손으로 코딩 할 경우이 같은 당신이 원하는 무엇인가 코드를 손으로) 사용하는 방법은 간단 말할 것도없고, 당신은 할 수 있습니다 :
// in arrayfire
array A = randu(10,1);
array B = randu(10,1);
float f = 0.5;
array C = (f)*A + (1-f)*B;
을 위는 2 개 개의 다른 배열이나 행렬의 해당 인덱스 보간 할 가정합니다. 사용 가능한 other interpolation functions도 있습니다.
tex1D는 두 개의 인수 만 필요합니다. – Silve2611