请帮助我,为什么以下不工作。在我的comp中,当我尝试打印var的值时,它只打印0。
#include<stdio.h>
__constant__ float pivot;
__global__ void kernel(float *set){
*set = pivot;
}
void main(){
float c[] = {1,3,4};
cudaError_t err = cudaMemcpyToSymbol(pivot,&c[2], sizeof(float));
/*
float test;
cudaMemcpyFromSymbol(&test,pivot,sizeof(float));
printf("the value of test is %f",test);
*/
if(err!=0){
printf("some error\n");
getchar();
}
float *st;
cudaMalloc((void**)&st, sizeof(float));
kernel<<<1,1>>>(st);
float *var = (float*)malloc(sizeof(float));
cudaMemcpy(var, st, sizeof(float),cudaMemcpyDeviceToHost);
printf("the value of st is %f",var);
getchar();
}
答案 0 :(得分:3)
var
是float *
,因此当您致电printf("... %f, var);
时,您实际上是在发送(float*)malloc(sizeof(float))
分配的内存地址。
P.S。我无法修改帖子,但标签不应该是c
和printf
,因为问题/问题与nvidia
或cuda
几乎没有关系(除了在代码中引用这两个的事实。