Witam.
Mam problem z biblioteką CUDA ( ni to język ni to biblioteka, więc wrzuciłem tutaj )
problem polega na tym że nie moge ustalić numer wądku który wykonuje dany kod.
tz. zawsze otrzymuje jakieś małe liczby które nie przedstawiają numeru wądku
generalnie jest to 0123 :].
sprawdzalem nawet wykonanie kernel<<<1, 40>>>( xxxx ) czyli 40 wądków w jednym bloku, wtedy powinny być numerowane od
- do 40 i wystarczyło by threadIdx.x wyciągnąć, no ale też nie działa.
podaje poniżej kod jak mam aktualnie ( definicja x jest żywcem z programers guide skopiowana ).
mam funkcje globalna
[code]
global void moc(dim3 *pointerCUDA){
// unsigned int idx = ( threadIdx.x + blockIdx.xblockDim.x);
unsigned int x = blockIdx.xblockDim.x + threadIdx.x;
pointerCUDA[x].x = x;
// pointerCUDA[idx].x = blockIdx.x;
// pointerCUDA[idx].x = threadIdx.x;
}
[/code]
w main
[code]
dim3 tablica;
dim3 tablicaCUDA;
int countByte=40;
tablica = ( dim3) malloc( countBytesizeof(dim3));
cudaMalloc(( dim3**) &tablicaCUDA, countByte*sizeof(dim3));
cudaMemset(tablicaCUDA, 0 , countByte*sizeof(dim3));
memset( tablica, 0 , countByte*sizeof(dim3));
- tutaj odpalam funkcje *
moc<<< 4, 10>>>(tablicaCUDA);
[/code]
noo i wyrzucam do konsoli
[code]
cudaMemcpy(tablica, tablicaCUDA, countByte, cudaMemcpyDeviceToHost);
for(int i=0; i < countByte-1; i++)
printf("\n%i%s%i%s%i", tablica[i].x," " ,tablica[i].y, " ", tablica[i].z);
printf("\n%s\n","CYCKI");
cudaFree( tablicaCUDA);
free( tablica);
[/code]
sens informacji zapisanych w tablicy jest zbyteczny po prostu testowalem jak wyciagnac numer wadku.