2010-11-04 2 views
0

Скелет кодCUDA "недопустимый символ устройства"

a_kernel.cu

__constant__ unsigned char carray[256]; 

a.cu

#include <a_kernel.cu> 
... 
unsigned char h_carray[256]; 
... 
cudaMemcpyToSymbol("carray", h_carray, 256); 

Конфигурация системы
Windows7 64bit
CUDA toolkit 3.1, SDK 3.1
GeForce GTX 460
файл правил в SDK 3.1

У меня есть неверная строка ошибки символа устройства в cudaMemcpyToSymbol.
Любая помощь будет оценена по достоинству. :)

ответ

0

Это поможет, если вы могли бы разместить код, чтобы воспроизвести проблему, возможно, вы могли бы сделать это на CUDA forums. Сказав, что переменные __constant__ имеют статическую (т.е. единицы перевода). Простейшая структура, которой следует следовать, будет следующей. Обратите внимание, что также стоит проверить CUDA 3.2.

host_code.cpp:

#include "cuda_funcs.h" 

... 
{ 
    unsigned char h_carray[256]; 
    cudaMemcpyToSymbol("carray", h_carray, 256); 
    processOnGpu(...); 
} 
... 

cuda_funcs.h:

void processOnGpu(...); 

cuda_funcs.cu:

__constant__ unsigned char carray[256]; 

__global__ void kernel(...) 
{ 
    ... 
} 

void processOnGpu(...) 
{ 
    ... 
    kernel<<<...>>>(...); 
    ... 
} 
0

Checkout документ в cuda manual

Вам необходимо включить вид или направление копии памяти. Возможно, дефолтом является «cudaDevicetoHost».

cudaMemcpyToSymbol ("CARRAY", h_carray, 256, 0, cudaHostToDevice);

+0

Я поставил cudaMemcpyHostToDevice, но по-прежнему возникает ошибка. cudaMemcpyToSymbol ("carray", h_carray, 256, 0, cudaMemcpyHostToDevice); Кажется, что программа не видит переменный кадр. – superscalar

Смежные вопросы