2012-08-22 24 views
9

Jestem zdezorientowany maksymalną liczbą wątków, które można uruchomić w procesorze graficznym Fermi.Maksymalna liczba wątków, które można zainicjować w jednym jądrze CUDA.

Moje zapytanie urządzenia GTX 570 mówi następująco.

Maximum number of threads per block:   1024 
    Maximum sizes of each dimension of a block: 1024 x 1024 x 64 
    Maximum sizes of each dimension of a grid:  65535 x 65535 x 65535 

Z mojego zrozumienia, rozumiem powyższe stwierdzenie jak:

Dla jądra CUDA możemy uruchomić co najwyżej 65536 bloków. Każdy uruchomiony blok może zawierać do 1024 wątków. W związku z tym mogę w zasadzie uruchomić do 65536 * 1024 (= 67108864) wątków.

Czy to prawda? Co się stanie, jeśli mój wątek używa rejestrów partii? Czy nadal będziemy w stanie osiągnąć te teoretyczne maksimum liczby wątków?

Po napisaniu i uruchomieniu jądra CUDA, skąd wiadomo, że liczba wątków i bloków, które wprowadziłem, została wykonana pod numerem , w rzeczywistości została utworzona. Chodzi mi o to, że nie chcę, żeby GPU obliczyło jakieś śmieci lub zachowywało się dziwnie, gdybym przez przypadek wytworzył więcej wątków, niż jest to możliwe dla tego konkretnego jądra.

+0

Może to pomóc: http://stackoverflowflow.com/questions/2392250/understanding-cuda-grid-dimensions-block-dimensions-and-threads-organization-s – user1154664

Odpowiedz

17

W przypadku jądra CUDA możemy uruchomić maksymalnie 65536 bloków. Każdy uruchomiony blok może zawierać do 1024 wątków. W związku z tym mogę w zasadzie uruchomić do 65536 * 1024 (= 67108864) wątków.

Nie jest to prawdą. Możesz uruchomić siatkę o rozmiarach do 65535 x 65535 x 65535, a każdy blok ma maksymalnie 1024 wątków na blok, chociaż ograniczenie zasobów wątku może ograniczyć całkowitą liczbę wątków na blok do wartości mniejszej niż to maksimum.

Co zrobić, jeśli mój wątek używa rejestrów partii? Czy nadal będziemy w stanie osiągnąć teoretyczne maksimum liczby wątków?

Nie, w tym przypadku nie można osiągnąć maksymalnej liczby wątków na blok. Każda wersja zestawu narzędzi NVIDIA CUDA zawiera arkusz kalkulatora obłożenia, za pomocą którego można zobaczyć wpływ nacisku rejestru na rozmiar bloku ograniczającego.

Również po zapisaniu i uruchomieniu jądra CUDA, skąd mam wiedzieć, że liczba wątków i bloki, które mam uruchomione zostały rzeczywiście instancja. Chodzi mi o to, że nie chcę, aby GPU obliczyło jakieś śmieci, albo dziwnie, jeśli ja przypadkiem wytworzyłem więcej wątków niż możliwych dla tego konkretnego jądra.

Jeśli wybierzesz konfigurację nielegalnego wykonania (tak błędny rozmiar bloku lub rozmiar siatki), kernel nie będzie uruchomienie i środowisko wykonawcze wyda komunikat cudaErrorInvalidConfiguration błędzie. Możesz użyć standardu cudaPeekAtLastError() i cudaGetLastError(), aby sprawdzić status jakiegokolwiek uruchomienia jądra.