2012-07-13 18 views
8

Dla danego jądra, dlaczego grupy_pracy mają zawsze ten sam rozmiar? Czytałem gdzieś (w przypadku, gdy nie określamy lokalnego rozmiaru pracy), które openCL tworzy 3 grupy robocze (po 217 pozycji roboczych) dla jądra z 651 elementami roboczymi (podzielnymi przez 3), podczas gdy tworzy 653 grupy robocze po 1 element roboczy każdy, ponieważ 653 jest liczbą pierwszą.Rozmiary grup roboczych

Załóżmy, że określamy local_work_size (tj. Liczba pozycji roboczych w grupie roboczej), powiedzmy, 5. I daliśmy wszystkie elementy pracy (global_work_size) jako 9. Jak będą tworzone grupy robocze? jest to, dlaczego rozmiar global_work_size musi być wielokrotnością local_work_size? Jeśli dane wymagają tylko 9 pozycji roboczych, w jaki sposób mogę zwiększyć go do 10 (wielokrotność local_work_size, 5)?

Dlaczego host nie może przydzielić pamięci dla tablicy wyników, jeśli nie wie, ile grup roboczych będzie wykonywało jądro?

Proszę o pomoc. Przeczytałem to wszystko: http://www.openclblog.com/2011/09/work-group-sizes.html

Odpowiedz

6

OpenCL Rozmiar grup roboczych nie musi być zawsze tego samego rozmiaru. Globalny rozmiar grupy roboczej jest często powiązany z rozmiarem problemu. Rozmiar lokalnej grupy roboczej jest wybierany na podstawie maksymalizacji przepustowości jednostki obliczeniowej i liczby wątków wymagających współużytkowania pamięci lokalnej.

Rozważmy kilka przykładów;

A) skalowanie obrazu z N o M, X, Y.

B) Suma liczby n.

Przez)

Oczywistym Rozmiar Global Group Praca to X, Y, 1. Dlaczego? Daje to 1 wątek na jeden piksel. Rozmiar lokalnej grupy roboczej należy wybrać na podstawie liczby pikseli wejściowych, które należy przetworzyć, aby wygenerować piksel wyjściowy.

Np.

A.1) Skaluj obraz z 4K przez 3,2 KB do 64 przez 64. Rozmiar GWG [64,64,1] Rozmiar LWG 256 A.2) Skaluj obraz z 4k przez 3.2k do 800 na 600 .GWG Rozmiar [800,60,1] Rozmiar LWG 256

B)

oczywistym Rozmiar Global Group Work to N/2,1,1, dlaczego? Tak więc każdy wątek zaczyna się od zsumowania dwóch wartości. Lokalna grupa robocza powinna być ustawiona na urządzenie max.

Istnieje kilka zastrzeżeń;

1) Globalny rozmiar grupy roboczej jest ograniczony przez Rozmiar globalnej wielkości pamięci i Maksymalny rozmiar globalnej alokacji pamięci.

2) Każde urządzenie ma maksymalny rozmiar lokalnej grupy roboczej często 256

+0

Dziękuję Tim !! Dzięki za odpowiedź. :) Więc, rozmiar GWG Nie musi być wielokrotnością LWG? – Remy

+0

Aby wyjaśnić, że tak, rozmiar LWG musi być wartością mukltiple lub wartością pustą. Od strony Man http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ –

+0

Dziękuję bardzo. :) – Remy