【问题标题】:Simple constant memory example not working简单的常量内存示例不起作用
【发布时间】:2011-12-27 23:06:09
【问题描述】:

请帮助我为什么下面不起作用。在我的比较中,当我尝试打印 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();


}

【问题讨论】:

  • 嗯 var 是一个指针,而不是一个浮点数,你可能想打印 *var...
  • @Dan:谢谢。那解决了它。帖子作为答案,我会接受它

标签: cuda nvidia


【解决方案1】:

var是一个float *,所以当你调用printf("... %f, var);时,你实际上是在发送(float*)malloc(sizeof(float))分配的内存地址。

附:我不能编辑帖子,但标签不应该是cprintf,因为问题/问题与nvidiacuda 几乎没有关系(除了两者是代码中引用)。

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2015-11-23
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多