cudaMemcpyToSymbol nu copia date

voturi
3

Vreau să folosesc __constant__memorie care va fi accesat de toate thread - urile pe toate nucleele mele.

Declarația este ceva de genul asta

extern __constant__ float smooth [8 * 1024];

Sunt copierea de date la această variabilă utilizând

cudaMemcpyToSymbol(smooth, smooth_local, smooth_size, 0, cudaMemcpyHostToDevice);

smooth_size = octeți 7K

A fost oferindu-mi ieșire incorectă

dar când am rula în -deviceemumodul și a încercat să imprime conținutul acestor două variabile în interiorul kernel - ul, am fost obtinerea toate zerourile pentru netedă și smooth_local a fost corectă.

Am încercat imprimarea de ieșire imediat după cudaMemcpyToSymbolîncă a fost oferindu - mi 0 lui.

Poți cineva arunca lumina pe problema mea?

Întrebat 11/08/2009 la 18:59
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
6

Pentru a declara CUDA de memorie constantă, ar arata astfel:

__constant__ float smooth[8 * 1024];

Rețineți că CUDA de memorie constantă este locală unitate de traducere (adică este declarată implicit statică). Aceasta este una dintre limitările enervante ale CUDA, astfel încât, dacă aveți nevoie pentru a distribui aceste valori între fișiere separete Cpp / .cu, va trebui să redeclare memoria în fiecare Cpp / .cu fișier este necesar. Veți avea, de asemenea, pentru a apela din nou cudaMemCopyToSymbol. Și, în sfârșit, vă sunt limitate la un total de 64K de memorie constantă de-a lungul întregului program CUDA.

Publicat 22/08/2009 la 00:29
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more