У меня возникли проблемы с использованием cudaMemcpyToSymbol. У меня есть код, который работает отлично. Версия урезывание моего кода заключается в следующем:CUDA: cudaMemcpyToSymbol не копирует данные
mykernel.h file:
__global__
void foo(float* out);
mykernel.cu file:
#include "kernels.h"
__global__
void foo(float* out)
{
uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;
out[idx] = 10;
}
main.cu file:
#include "kernels.h"
main()
{
// initialization and declaration stuff here
foo<<<1,1,1>>>(my_global_memory);
// read back global memory and investigate values
}
Приведенный выше код работает просто отлично. Теперь я хочу заменить это значение «10» значением, полученным из постоянной памяти. Так что я сделал, чтобы:
- Добавить
__constant__ float my_const_var;
в mykernel.h файл. - заменить последнюю строку моего ядра с
out[idx] = my_const_var;
в mykenel.cu - добавить
float value = 10.0f; cudaMemcpyToSymbol(my_const_var,&value);
до моего вызова в main.cu
После того, как сделали все, что он выглядит как cudaMemcpyToSymbol не копирует фактическое значение потому что я получаю результат «0» вместо «10». Кроме того, я всегда проверяю ошибки CUDA и их нет. Может ли кто-нибудь сказать мне, что я делаю неправильно? И почему cudaMemcpyToSymbol не копирует значение в символ? Я использую GeForce9600M (вычислительная способность 1.1) с последними драйверами в Debian Linux и CUDA SDK 5.0. Я также попытался запустить cuda-memcheck, и у меня нет ошибок.
Должен сказать, что я не знал об этом. Отлично, теперь это работает. – AstrOne