Я думаю, что лучший способ - это попробовать и сравнить два варианта.В некоторых случаях компиляция нескольких условных блоков, даже если выполняется только один из них, может привести к снижению производительности.Причина в GPR (регистры общего назначения): компилятор выделяет столько регистров, сколько необходимо для наихудшего случая.
Я могу предложить такое решение: иметь одну функцию ядра, но с условным временем компиляции:
__kernel void work()
{
#if VAR
// one code
#else
// another code
#endif
}
Затем вам нужно перекомпилировать ядро с true
/ false
, установленным на VAR
при изменении условия.Очевидно, что для компилятора он не отличается от двух ядер, но для поддержки может быть лучше, если часть кода одинакова для этих ядер.