Update project from older CUDA version -
in older cuda project had globals:
__device__ uint8_t dev_intersect __constant__ uint8_t dev_flags ... , used them way:
cudagetsymboladdress((void**)&ptr_dev_intersect,"dev_intersect") cudamemcpytosymbol("dev_flags",&flags,sizeof(flags)) now, since cuda 5.0 (and newer) symbols must passed directly (without string), define globals way:
__device__ uint8_t *dev_intersect __constant__ uint8_t *dev_flags ...and call functions way:
cudagetsymboladdress((void**)&ptr_dev_intersect,dev_intersect) cudamemcpytosymbol(dev_flags,&flags,sizeof(flags)) am doing right far? i'm asking you, because when update code, start getting other errors, makes me kinda suspicious. help.
switching pod variable pointer not want.
if didn't make changes elsewhere in code account difference, expect things break.
to update cuda function calls, leave variables as-is:
__device__ uint8_t dev_intersect; __constant__ uint8_t dev_flags; and drop quotes cuda api functions use variables:
cudagetsymboladdress((void**)&ptr_dev_intersect,dev_intersect); cudamemcpytosymbol(dev_flags,&flags,sizeof(flags)); here complete worked example:
$ cat t524.cu #include <stdio.h> typedef unsigned char uint8_t; __device__ uint8_t dev_intersect; __constant__ uint8_t dev_flags; __global__ void mykernel(uint8_t *d1_ptr){ printf("data 1 = %c\n", *d1_ptr); printf("dev_flags = %c\n", dev_flags); } int main(){ uint8_t *ptr_dev_intersect; uint8_t flags = 'x'; uint8_t dev_intersect_data = 'y'; cudagetsymboladdress((void**)&ptr_dev_intersect,dev_intersect); cudamemcpytosymbol(dev_flags,&flags,sizeof(flags)); cudamemcpytosymbol(dev_intersect,&dev_intersect_data,sizeof(dev_intersect_data)); mykernel<<<1,1>>>(ptr_dev_intersect); cudadevicesynchronize(); return 0; } $ nvcc -arch=sm_20 -o t524 t524.cu $ cuda-memcheck ./t524 ========= cuda-memcheck data 1 = y dev_flags = x ========= error summary: 0 errors $
Comments
Post a Comment