我在主机上执行以下代码时遇到问题,不确定我要去哪里。我的理解是我需要分配足够的内存来存储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)

09-25 21:26