我在主机上执行以下代码时遇到问题,不确定我要去哪里。我的理解是我需要分配足够的内存来存储textData的内容,该内容为设备上的textLength大小,我用sizeof(char)* textLength进行分配,这应该给我足够的空间,然后使用cudaMemcpy复制所有从textData到设备上已分配空间的值。我的异常读取“访问冲突读取位置0x000000000501f80400”,这是我的cuTextArray在设备上的内存地址。
texture<char, cudaTextureType1D, cudaReadModeElementType> textDataRef;
int textLength = 10000000
cudaArray *cuTextArray;
checkCudaErrors (cudaMalloc(&cuTextArray, sizeof(char)*textLength));
checkCudaErrors(cudaMemcpy(cuTextArray, textData, sizeof(char)*textLength, cudaMemcpyHostToDevice));
checkCudaErrors(cudaBindTextureToArray(textDataRef, cuTextArray, textDataRef.channelDesc));
我无法使用cudaMallocArray,因为我的数据对于缓冲区来说太大了-最大8192字节
这里的异常似乎是在将纹理绑定到cuda_runtime.h中的代码数组片段时崩溃:
最佳答案
事实证明,我可以通过使用带有引用和不同绑定调用的标准char指针来使整个数组变得毫无意义。非常简单的东西,有点奇怪,它不容易回答。
//Allocate Memory
checkCudaErrors( cudaMalloc(&d_textData, sizeof(char) * textLength) );
//Copy Host To Device
checkCudaErrors( cudaMemcpy(d_textData, textData, sizeof(char)* textLength, cudaMemcpyHostToDevice));
//Bind reference to block of memory
checkCudaErrors ( cudaBindTexture(NULL,&texTextRef,d_textData,&texTextRef.channelDesc, sizeof(char) * textLength ) );
使用的查询值
tex1Dfetch(texTextRef,k+index)