У меня проблема с char type в функции ядра. Я хочу разделить большой тип char на маленький тип char.CUDA split char array
__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- using-the-cuda-runtime-api) и используя 'cuda-memcheck', чтобы избежать ненужных ошибок, как упоминалось также на странице [CUDA tag info] (http://stackoverflow.com/tags/CUDA/данные). – JackOLantern
@MorbidFuzzball эта строка не будет читаться за пределами BiExponent, предполагая, что BiExponent имеет размер 80x100000, как указано в комментариях. Мы можем согласиться с тем, что k ограничено значением менее 100000 для цикла, верно? Тогда 80 * 99999 + 79 меньше 80x100000. Это не зависит от количества запущенных потоков, за исключением того, что количество запущенных потоков должно быть меньше 100 000. –