2015-04-23 49 views
-1

我在主機上執行以下代碼時遇到問題,不確定我要出錯的位置。我的理解是我需要分配足夠的內存來存儲設備上的textLength大小的textData內容,我使用sizeof(char)* textLength malloc來給我足夠的空間,然後使用cudaMemcpy將所有的從textData到設備上分配的空間的值。我的異常讀取「訪問衝突讀取位置0x000000000501f80400」,這是我的cuTextArray在設備上的內存地址。cudaMalloc運行時錯誤

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結合紋理的代碼片斷陣列崩潰:

enter image description here

+3

其中3個操作('cudaMalloc','cudaMemcpy','cudaBindTextureToArray')實際上失敗,異常

//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)); 

查找值?請提供[MCVE](http://stackoverflow.com/help/mcve)。 –

+0

行爲真的沒有什麼幫助,我在cudaMalloc調用中設置了一個斷點,運行程序時斷點轉移到了cudaMemcpy調用。按f10一次將我帶到cuda_runtime.h到cudaMemcpyToSymbolAsync,再次按f10將導致異常 – Oliver

+2

請提供一個資源鏈接,其中說明使用'cudaArray'的限制爲8kB。如果它也涉及'cudaMemcpyToArray',那麼你應該清楚地說明它。另外,如果極限確實是_is_ 8kB並且您想要分配更多,那麼您可能會濫用'cudaArray' ... –

回答

0

那麼事實證明,我可以通過使用標準的字符指針與基準和不同的結合調用得到它的工作離整個陣列廢話了。非常簡單的東西,有點奇怪,它不容易回答。使用

tex1Dfetch(texTextRef,k+index)