1
CUDA / Re: 求教,设备端数据作为参数传入到核函数中,数值发生了改变,基本接近0,导致计算结果发生错误
« 最后发表 作者 hello_geng 于 今天 10:33:18 am »好的,谢谢,我在斟酌斟酌,
感谢回复,经过检查,发现之前统一申请内存,待所有计算完成后统一释放,改为计算完毕后,立即释放变量,这样莫名其妙就OK了,因为是新手,还是不明就里
源代码:
#include<stdio.h>
__global__ void k1(){
int x=threadIdx.x%2;
unsigned a =__ballot_sync(0x0000ffff,x);
printf("id:%d a:%x\n",threadIdx.x,a);
}
int main(){
k1<<<1,32>>>();
printf("%s\n",cudaGetErrorString(cudaDeviceSynchronize()));
return 0;
}
运行结果:
cuda-memcheck ./wallVoteFunction
========= CUDA-MEMCHECK
id:0 a:aaaa
id:1 a:aaaa
id:2 a:aaaa
id:3 a:aaaa
id:4 a:aaaa
id:5 a:aaaa
id:6 a:aaaa
id:7 a:aaaa
id:8 a:aaaa
id:9 a:aaaa
id:10 a:aaaa
id:11 a:aaaa
id:12 a:aaaa
id:13 a:aaaa
id:14 a:aaaa
id:15 a:aaaa
id:16 a:aaaa
id:17 a:aaaa
id:18 a:aaaa
id:19 a:aaaa
id:20 a:aaaa
id:21 a:aaaa
id:22 a:aaaa
id:23 a:aaaa
id:24 a:aaaa
id:25 a:aaaa
id:26 a:aaaa
id:27 a:aaaa
id:28 a:aaaa
id:29 a:aaaa
id:30 a:aaaa
id:31 a:aaaa
no error
========= ERROR SUMMARY: 0 errors
未参与投票的线程使用__ballot_sync()返回值会有什么问题吗?
如题,求教如下:
float* d_x;
float* d_y;
float* d_px;
float* d_py;
float* d_input;
float* d_output;
Kernel << <BlocksPerGrid, ThreadsPerBlock>> > (d_x, d_y,d_px, d_py,d_input, d_output);
该核函数中的前四个数据传递到核函数中,其数值都发生了改变,而第五个参数d_input很正确的传递了进去,请问这是什么原因,有朋友遇到过吗?
我的程序在main这有一个大循环,循环5次后提示内存不足,用nvidia-smi查看时发现每次循环的过程中显存都在累加,我想在每次循环后清空显存,有什么办法嘛?