Издержки на стороне хоста при запуске ядра с использованием API времени выполнения составляют всего 15-30 микросекунд на платформах Windows без WDDM.На платформах WDDM (которые я не использую) я понимаю, что это может быть намного, намного выше, плюс в драйвере есть какой-то механизм пакетной обработки, который пытается амортизировать стоимость, выполняя несколько операций в одной операции на стороне драйвера.
Как правило, произойдет увеличение производительности при «объединении» нескольких операций с данными, которые в противном случае выполнялись бы в отдельных ядрах в одно ядро, где это допускают алгоритмы.GPU имеет намного более высокую арифметическую пиковую производительность, чем пиковая пропускная способность памяти, поэтому, чем больше FLOP может быть выполнено для каждой транзакции памяти (и для "кода установки" ядра), тем выше будет производительность ядра.С другой стороны, попытка написать ядро в стиле «швейцарского армейского ножа», которое пытается втиснуть совершенно разрозненные операции в один кусок кода, никогда не будет особенно хорошей идеей, потому что это увеличивает давление в регистре и снижает эффективность таких вещей, как L1постоянная память и кэши текстур.
Какой путь вы выберете, должен действительно руководствоваться природой кода / алгоритмов.Я не верю, что есть один «правильный» ответ на этот вопрос, который можно применять при любых обстоятельствах.