1
我試圖在CUDA中使用紋理數組,但是出現「無效紋理參考」錯誤。任何人都有任何想法如何實現紋理數組?如何在CUDA中使用紋理數組
#include<iostream>
#include<cstdio>
#include<cstdlib>
#define MAX_TEXTURE 134217728
#define MAX_LENGTH 268435456
using namespace std;
texture<char, 1, cudaReadModeElementType> texref[2];
int main(){
// host variable
char *text;
// device variable
char *dev_a;
text = (char*)malloc(MAX_LENGTH*sizeof(char));
// any initial value
for(int i=0; i<MAX_LENGTH; i++)
text[i] = 'a';
cudaMalloc((void**)&dev_a, MAX_LENGTH*sizeof(char));
cudaMemcpy(dev_a, text, MAX_LENGTH*sizeof(char), cudaMemcpyHostToDevice);
cudaError_t err = cudaBindTexture(0, texref[0], dev_a, MAX_TEXTURE*sizeof(char));
cout << cudaGetErrorString(err) << endl;
size_t offset = MAX_TEXTURE;
err = cudaBindTexture(&offset, texref[1], dev_a, MAX_TEXTURE*sizeof(char));
cout << cudaGetErrorString(err) << endl;
cudaFree(dev_a);
free(text);
return 0;
}
我用了這個問題之前,多變量的引用,但它使得它如此的醜陋和不靈活(一個新的變量,需要每次紋理參考2^27元素)。我使用費米架構,我認爲它可以有一個更優雅的解決方案。謝謝。 –
是的,它很醜。但是,您可以將該代碼放在一個頭文件中,如果您提供訪問它們的好方法,則不需要再次查看它。例如,你可以提供像'bindNextRef()'這樣的函數來跟蹤哪些引用已經被使用,以及其他類似的東西...... – havogt