Зависит от сложности вычисления этих общих значений и от того, сколько рабочих элементов могут работать параллельно.
Допустим, время вычисления общих значений равно A, время выполнения остальных вычислений - B, а накладные расходы для барьера - AO & BO (часть A и часть B). Мы можем рассчитать время для каждого варианта.
- Вариант 1 и одна нить и 1000 рабочих элементов: 1000А + 1000В
- Вариант 2 и один поток и 1000 рабочих элементов: A + AO + 1000B + 1000BO
- Вариант 1 с 1000 нитями и 1000 рабочих элементов: A + B
- Вариант 2 с 1000 нитями и 1000 рабочих элементов: A + AO + B + BO
Когда у вас столько потоков, сколько рабочих элементов, вариант 2 явно медленнее.
Если у вас одна нить, если BO меньше по сравнению с A, вариант 2, вероятно, быстрее.
Истина, вероятно, где-то посередине.
Вариант 3: хост должен рассчитать эти значения и поместить результаты в постоянную память. Если вы сделаете это и используете небольшую двойную буферизацию, вы, вероятно, сможете скрыть время для вычисления следующего набора общих значений, ожидая, пока OpenCL выполнит текущий расчет.