2010-11-04 9 views
0

Le squelette du code estCUDA "symbole de périphérique non valide"

de a_kernel.cu

__constant__ unsigned char carray[256]; 

de a.cu

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

La configuration du système est
Windows7 64bit
CUDA toolkit 3.1, SDK 3.1
GeForce GTX 460
fichier de règles dans SDK 3.1

J'ai une chaîne d'erreur de symbole de périphérique non valide sur cudaMemcpyToSymbol.
Toute aide serait appréciée. :)

Répondre

0

Il serait utile que vous pouvez poster un code pour reproduire le problème, vous pourriez peut-être faire le CUDA forums. Cela dit, les variables __constant__ ont une portée statique (c'est-à-dire une unité de traduction). La structure la plus simple à suivre serait la suivante. Notez qu'il peut également être intéressant de vérifier 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

Commander le document dans la cuda manual

Vous devez inclure le genre ou la direction de la copie de la mémoire. Peut-être que le défaut est "cudaDevicetoHost".

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

+0

je mets les cudaMemcpyHostToDevice mais l'erreur se produit. cudaMemcpyToSymbol ("carray", h_carray, 256, 0, cudaMemcpyHostToDevice); Il semble que le programme ne voit pas la variable carray. – superscalar