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

  1. 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.x
blockDim.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( countByte
sizeof(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.