2013-03-09 4 views
5

Что происходит, когда я, например, установить мое количествоOpenCL рабочие группы

  1. рабочих групп в 5120 и localsize 1
  2. рабочих групп 2560 и localsize 2
  3. рабочих групп до 640 и localsize 4

Как это влияет на мое количество рабочих предметов и доступ к ресурсам?

ответ

9
  1. У вас будет 5120 threads. 5120 groups. 1 thread per group. Каждая группа (1 поток) будет принимать один процессор. Вы не можете синхронизировать их (в традиционном смысле).
  2. У вас будет 2560 threads. 1280 groups. 2 threads in each group. Каждая группа (2 потока) будет принимать один процессор. Вы можете синхронизировать эти два потока (в традиционном смысле).
  3. У вас будет 640 threads. 160 groups. 4 threads in each group. Каждая группа (4 потока) будет принимать один процессор. Вы можете синхронизировать эти четыре потока (в традиционном смысле).

В OpenCL вам необходимо выразить глобальный рабочий размер в терминах общего количества потоков. В базовом API OpenCL будет отображаться глобальный рабочий размер и разделить его на местный рабочий размер, чтобы выяснить, как устроен поток.

Сейчас (это общее предложение. Там может быть случаи, когда вам нужно сделать это, но сейчас ..)

  1. страшная мысль. Ясно. Вы теряете время процессоров, давая ему 1 поток за раз. Хотя это, возможно, не конец света для процессоров, это для современных графических процессоров. Зачем? потому что каждый процессор на вашем GPU будет иметь несколько ядер. Все готово к действию. В этом случае работает только один из них. Плюс У вас нет возможности синхронизировать потоки, если возникнет такая необходимость.

  2. То же самое.

  3. То же самое.

Если я правильно помню, NVIDIA предлагает как минимум 32 потока в группе, чтобы получить максимальную производительность.

Смежные вопросы