2011-12-27 39 views
1

請幫我理解下面的原因。在我的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(); 


} 
+2

那麼var是一個指針,而不是一個浮點數,你可能想要打印* var ... – Dan 2011-12-27 14:28:31

+0

@Dan:謝謝。這解決了它。郵政是一個答案,我會接受它 – Programmer 2011-12-27 15:04:30

回答

3

varfloat *,所以當你打電話printf("... %f, var);,你實際上是通過發送分配(float*)malloc(sizeof(float))的內存地址。

P.s.我無法編輯帖子,但不應該標記爲cprintf,因爲問題/問題與nvidiacuda(除了代碼中引用了這兩個事實之外)幾乎沒有關係。

相關問題