Oto mój kod:"błąd nieprawidłowej konfiguracji" dla wywołania jądra CUDA?
int threadNum = BLOCKDIM/8;
dim3 dimBlock(threadNum,threadNum);
int blocks1 = nWidth/threadNum + (nWidth%threadNum == 0 ? 0 : 1);
int blocks2 = nHeight/threadNum + (nHeight%threadNum == 0 ? 0 : 1);
dim3 dimGrid;
dimGrid.x = blocks1;
dimGrid.y = blocks2;
// dim3 numThreads2(BLOCKDIM);
// dim3 numBlocks2(numPixels/BLOCKDIM + (numPixels%BLOCKDIM == 0 ? 0 : 1));
perform_scaling<<<dimGrid,dimBlock>>>(imageDevice,imageDevice_new,min,max,nWidth, nHeight);
cudaError_t err = cudaGetLastError();
cudasafe(err,"Kernel2");
Jest to realizacja mojego drugiego jądra i jest w pełni niezależny w perspektywie wykorzystania danych. BLOCKDIM
to 512, nWidth and nHeight
to także 512, a cudasafe
po prostu drukuje odpowiednią wiadomość z kodem błędu. Ta sekcja kodu podaje błąd konfiguracji tuż po wywołaniu jądra.
Co może dać ten błąd, jakiś pomysł?
I wiem, że moja karta ma konfigurację 1024 wątków dla każdego bloku. Czy to samo dotyczy konfiguracji 32 * 32 2D i wątku havin 1D 1024? – erogol
1024 wątków jest limitem dla poszczególnych bloków. Możesz mieć dowolny zestaw wymiarów 1D, 2D lub 3D, które nie przekraczają tego. Tak więc 1024x1, 512x2, 256x4, 128x8 itd. Są dopuszczalnymi granicami 2D. Podobnie dla 3D, np. 16 x 8 x 8, 32 x 8 x 4, 64 x 4 x 4 itd. To dopuszczalne limity 3D. Próbka "deviceQuery' cuda podaje informacje o limitach całkowitych i wymiarowych. Ale niezależnie od limitów na wymiar, rzeczywisty całkowity produkt nie może przekroczyć całkowitego limitu 1024 lub cokolwiek odpowiedniego dla twojego urządzenia. –