2013-03-09 9 views
5

Co się dzieje, gdy na przykład ustawić mój ilośćOpenCL grupy robocze

  1. grup roboczych do 5120 i localsize 1
  2. grupy robocze do 2560 i localsize 2
  3. grup roboczych do 640 i localsize 4

Jak to wpływa na moją liczbę pozycji roboczych i dostęp do zasobów?

Odpowiedz

9
  1. Będziesz mieć 5120 threads. 5120 groups. 1 thread per group. Każda grupa (1 wątek) zajmie jeden procesor. Nie można zsynchronizować żadnego z nich (w tradycyjnym znaczeniu).
  2. Będziesz mieć 2560 threads. 1280 groups. 2 threads in each group. Każda grupa (2 wątki) zajmie jeden procesor. Możesz zsynchronizować te dwa wątki (w tradycyjnym sensie).
  3. Będziesz mieć 640 threads. 160 groups. 4 threads in each group. Każda grupa (4 wątki) zajmie jeden procesor. Możesz zsynchronizować te cztery wątki (w tradycyjnym sensie).

W OpenCL należy podać globalny rozmiar roboczy w odniesieniu do całkowitej liczby wątków. Bazowy interfejs OpenCL API będzie analizował globalny rozmiar roboczy i dzieli go według lokalnego rozmiaru roboczego, aby ustalić układ gwintu.

Teraz (jest to ogólna sugestia. Nie może być przypadki, gdzie trzeba to zrobić, ale na razie ..)

  1. jest straszny pomysł. Wyraźnie. Marnujesz czas procesorów, nadając mu 1 wątek na raz. Chociaż może to nie być koniec świata dla procesorów, to jest dla współczesnych procesorów graficznych. Czemu? ponieważ każdy procesor na twoim GPU będzie miał wiele rdzeni. Wszystko gotowe do działania. Tylko jedna z nich działa w tym przypadku. Plus Nie masz możliwości synchronizacji wątków, jeśli zajdzie taka potrzeba.

  2. To samo.

  3. To samo.

Jeśli dobrze pamiętam, NVIDIA sugeruje co najmniej 32 wątki w grupie, aby uzyskać najlepszą wydajność.