2013-03-09 12 views
5

Cosa succede quando per esempio impostato il mio quantità diOpenCL gruppi di lavoro

  1. gruppi di lavoro di 5120 e localsize 1
  2. gruppi di lavoro a 2560 e localsize 2
  3. gruppi di lavoro di 640 e localsize 4

In che modo questo influenza la mia quantità di articoli di lavoro e accesso alle risorse?

risposta

9
  1. Si avrà 5120 threads. 5120 groups. 1 thread per group. Ogni gruppo (1 thread) prenderà un processore. Non è possibile sincronizzare nessuno di essi (nel senso tradizionale).
  2. Avrete 2560 threads. 1280 groups. 2 threads in each group. Ogni gruppo (2 thread) prenderà un processore. È possibile sincronizzare questi due thread (nel senso tradizionale).
  3. Avrete 640 threads. 160 groups. 4 threads in each group. Ogni gruppo (4 thread) prenderà un processore. È possibile sincronizzare questi quattro thread (nel senso tradizionale).

In OpenCL è necessario esprimere la dimensione di lavoro globale in termini di numero totale di thread. L'API OpenCL sottostante analizzerà la dimensione di lavoro globale e dividerà per la dimensione di lavoro locale per determinare la disposizione dei thread.

Ora (questo è un suggerimento generale. Ci potrebbero essere casi in cui è necessario farlo, ma per ora ..)

  1. è una pessima idea. Chiaramente. Stai sprecando il tempo del tuo processore assegnandogli 1 thread alla volta. Mentre questo potrebbe non essere la fine del mondo per le CPU è per le moderne GPU. Perché? perché ogni processore sulla tua GPU avrà un numero di core. Tutto pronto per l'azione. Solo uno di loro funziona in questo caso. Inoltre, non è possibile sincronizzare i thread in caso di necessità.

  2. Stessa cosa.

  3. Stessa cosa.

Se ricordo correttamente NVIDIA suggerisce almeno 32 thread in un gruppo per ottenere le migliori prestazioni.