Простой пример постоянной памяти не работает - PullRequest
1 голос
/ 27 декабря 2011

Пожалуйста, помогите мне, почему ниже не работает.В моем компе он просто печатает 0, когда я пытаюсь напечатать значение var.

#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 Ответ

3 голосов
/ 27 декабря 2011

var - это float *, поэтому, когда вы звоните printf("... %f, var);, вы фактически отправляете адрес памяти, выделенной (float*)malloc(sizeof(float)).

Ps. Я не могу редактировать сообщение,но теги не должны быть c и printf, поскольку проблема / вопрос имеет очень мало общего с nvidia или cuda (не считая того факта, что в коде есть ссылки на них).

...