Programowanie w CUDA - Maximum number of instructions per kernel

0

Cześć, mam do Was takie pytanie: doczytałem na stronie: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute-capabilities że istnieje jakieś ograniczenie w programowaniu na karcie graficznej, które mówi, że: Maximum number of instructions per kernel wynosi 512 milionów.
Mam pytanie co to oznacza w praktyce?
Załóżmy, że w pamięci globalnej mam > 512 milionów danych. Każdy blok wątków pobiera maksymalnie dużo danych do swojej pamięci wspólnej -> operuje na tych danych a następnie znowu pobiera kolejne dane itd. aż do przetworzenia wszystkich danych. Wszystko wykonywane jest w pętli w jeden funkcji na GPU (kernelu).
Przykładowo operacje na tych zmiennych polegają (banalny przykład - chodzi o zobrazowanie problemu) na z sumowaniu wyników mnożenia pewnej stałej (innej dla każdego wątku/bloku) z każdą zmienną przechowywaną w pamięci => sum += stala*zmienna;

Mam więc pytanie czy wówczas przekroczę wspomniane ograniczenie? W końcu wszystkich danych jest > 512 milionów a z każdą zmienną wykonuję dodawanie i mnożenie.
Czy może chodzi o coś innego?

Z góry dzięki za wyjaśnienie.

0

Chodzi raczej o dlugosc kodu kernela.

0

Idąc dalej w związku z zacytowaną informacją - chodzi o ilość użytych instrukcji (no ale to właśnie to jest przecież napisane :)).

2

Niby nazwa sugeruje to co napisał vpiotr, czyli że chodzi o długość kodu kernela, ale z drugiej strony, wcześniej limit był pow(2, 21) instrukcji, więc i tak bardzo dużo. Szukałem info na necie i jeden z gości miał problem, który sugerował że ten limit dotyczy ilości wykonań instrukcji dla pojedynczego wątku. Tak czy siak, opis jest mało precyzyjny. Najlepiej sprawdzić samemu - odpal na GPU pętlę która obraca się np 800 milionów razy i czekaj, aż program się wysypie :)

0

Dzięki wszystkim za odpowiedzi.
Niestety obecnie nie mam karty NVIDI (przymierzam się ją kupić), ale zadałem podobne pytanie na forum NVIDI (https://devtalk.nvidia.com/default/topic/774582/cuda-programming-and-performance/maximum-number-of-instructions-per-kernel/) i otrzymałem odpowiedź, że tu chodzi jednak o linie kodu ;-).

0

Myślę, że źle interpretujesz udostępnione dane. Takie górne ograniczenia owszem istnieją, ale pewnie są różne dla każdego typu HW NVidii. I tak 512m instrukcji to jakaś w miarę wspólna granica... niemniej pewnie tylko jeśli rozpatrujesz konkretne instrukcje. Instrukcje CUDA są kompilowane do jakiegoś języka pośredniego, ostatecznie z kolei na kod rozumiany przez GPU. Pewnie takie instrukcje jak 'inc r1' będą miały 1 bajt. Z kolei już coś bardziej złożonego, zajmie bajtów więcej i trzeba to uwzględniać.

Podobnie, jak piszesz, pewnie to ile innych danych dostarczysz, ogranicza tę przestrzeń na instrukcje. Jeśli stworzysz sobie buffer na kilkadziesiąt megabajtów, to na instrukcje nie będzie już miejsca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1