0
我在內核函數中有char類型的問題。我想分裂大char類型爲小char類型。CUDA分割字符數組
__global__ void kernelExponentLoad(char* BiExponent,int lines){
// BiExponent is formed from 80x100000 numbers
const int numThreads = blockDim.x * gridDim.x;
const int threadID = blockIdx.x * blockDim.x + threadIdx.x;
for (int k = threadID; k < 100000; k += numThreads){
char* cstr = new char[80];
for(int i=0; i<80; i++){
cstr[i] = BiExponent[(k*80)+i];
...
delete[] cstr;
}
}
}
這個我的解決方案不起作用 - 啓動後內核崩潰(停止工作)。 「char * BiExponent」中的數據正常(函數printf工作正常)。
您未提供足夠的代碼信息。你應該發佈一個完全可編譯和可執行的代碼,以便願意幫助你的人可以運行並檢查它。在此之前,您可以通過添加[錯誤檢查]來開始測試代碼(http://stackoverflow.com/questions/14038589/what-is-the-canonical-way-to-check-for-errors-使用-cuda-runtime-api)並使用'cuda-memcheck'來避開出界錯誤,就像在[CUDA標籤信息頁面]中提到的那樣(http://stackoverflow.com/tags/CUDA /信息)。 – JackOLantern
@MorbidFuzzball假設BiExponent的大小爲80x100000,則該行不會超出BiExponent的結尾,如註釋中所示。我們可以同意k被for循環約束爲小於100000,對吧?然後80 * 99999 + 79小於80x100000。這與所啓動的線程數無關,但啓動的線程數應小於100,000。 –