Рабочие элементы в группе будут запланированы вместе и могут выполняться вместе.Это зависит от аппаратного обеспечения и / или драйверов, чтобы выбрать, насколько параллельное выполнение на самом деле.Для этого есть разные причины, но одна очень хорошая причина - скрыть задержку памяти.
На моей карте AMD «вычислительные блоки» разделены на 16 SIMD-блоков по 4 в ширину.Это означает, что технически можно одновременно выполнять 16 рабочих элементов в группе.Рекомендуется использовать несколько 64 рабочих элементов в группе, чтобы скрыть задержку памяти.Очевидно, что все они не могут быть запущены в точное время.Это не проблема, потому что большинство ядер фактически связаны с памятью, поэтому планировщик (аппаратное обеспечение) будет менять рабочие элементы, ожидающие на контроллере памяти, в то время как «готовые» элементы получают время вычислений.Фактическое количество рабочих элементов в группе задается хост-программой и ограничивается CL_DEVICE_MAX_WORK_GROUP_SIZE.Вам нужно будет поэкспериментировать с оптимальным размером рабочей группы для вашего ядра.
Реализация процессора "хуже", когда речь идет об одновременных рабочих элементах.Работает только столько рабочих элементов, сколько ядер доступно для их запуска.Они ведут себя более последовательно в процессоре.
Так работают ли рабочие элементы в одно и то же время?Почти никогда на самом деле.Вот почему нам нужно использовать барьеры, когда мы хотим быть уверены, что они останавливаются в данной точке.