CUDA大线程块数量导致printf输出乱码问题求助
CUDA大线程块数下printf输出乱码问题
我通过CUDA核函数生成随机图像数据,核函数代码如下:
__global__ void k_initRand(curandState *state, uint64_t seed){ int tid = threadIdx.x + blockIdx.x * blockDim.x; curand_init(seed, tid, 0, &state[tid]); } __global__ void k_createColors(curandState *my_curandstate, int min, int max, unsigned char * myGpuData, int startidx){ int ti = threadIdx.x+blockDim.x*blockIdx.x; float myrandf = curand_uniform(my_curandstate+ti + startidx); myrandf *= (max - min+0.999999); myrandf += min; int myrand = (int)truncf(myrandf); assert(myrand <= max); assert(myrand >= min); myGpuData[ti] = myrand; printf("INIT TI:%d\n", ti); }
核函数启动代码如下:
int colormin = 0; int colormax = 255; curandState *d_state; cudaMalloc(&d_state, sizeof(curandState)); unsigned char * d_R; cudaMalloc(&d_R, SIZE * sizeof(unsigned char) ); k_initRand <<< 191, 1024 >>>( d_state, time(NULL) ); k_createColors<<< 64, 1024 >>>( d_state, colormin, colormax, d_R, 0 );
现象
- 使用上述线程块数量时,printf输出乱码:
xz⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹搭?潷讀z⑧:gτ*?A蓹
- 将两个核函数的线程块数设为1时,输出符合预期:
... INIT TI:896 INIT TI:897 INIT TI:898 INIT TI:899 INIT TI:900 INIT TI:901 INIT TI:902 INIT TI:903 INIT TI:904 INIT TI:905 INIT TI:906 INIT TI:907 INIT TI:908 INIT TI:909 INIT TI:910 INIT TI:911 INIT TI:912 INIT TI:913 INIT TI:914 INIT TI:915 INIT TI:916 INIT TI:917 INIT TI:918 INIT TI:919 ...
排查情况
- 检查CUDA错误,未发现异常:
cudaError_t err = cudaGetLastError(); // Get error code printf("CUDA Error: %s\n", cudaGetErrorString(err)); if ( err != cudaSuccess ){ printf("CUDA Error: %s\n", cudaGetErrorString(err)); exit(-1); }
- 大线程块数下,随机图像数据生成功能正常,仅printf输出乱码
- 设备:Nvidia GeForce GTX 1650 with Max-Q design
- 编译及运行命令:
nvcc -arch=sm_75 -o ppmer -ccbin "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\cl.exe" ppmwriter.cu > .\outputs\AA_CURRENT_ERROR.txt ppmer > .\outputs\AA_CURRENT_OUTPUT.txt
内容的提问来源于stack exchange,提问作者bigcodeszzer
相关产品推荐
相关产品推荐

