简单的常量内存示例不起作用

时间:2011-12-27 14:25:14

标签: cuda nvidia

请帮助我,为什么以下不工作。在我的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();


}

1 个答案:

答案 0 :(得分:3)

varfloat *,因此当您致电printf("... %f, var);时,您实际上是在发送(float*)malloc(sizeof(float))分配的内存地址。

P.S。我无法修改帖子,但标签不应该是cprintf,因为问题/问题与nvidiacuda几乎没有关系(除了在代码中引用这两个的事实。