Я думаю, вы можете предсказать лучший случай с небольшим количеством работы.Как вы сказали, с количеством команд, пропускной способностью памяти, размером ввода и т. Д.
Однако прогнозировать фактический или наихудший случай гораздо сложнее.
Прежде всего, существуют такие факторы, как шаблоны доступа к памяти.Например: со старыми картами, поддерживающими CUDA, вы должны были уделять внимание распределению ваших глобальных обращений к памяти, чтобы все они не боролись за один банк памяти.(Более новые карты CUDA используют хеш-код между логическими и физическими адресами для решения этой проблемы).
Во-вторых, существуют недетерминированные факторы, такие как: насколько занята шина PCI?Насколько загружено ядро хоста?И т.д.
Я подозреваю, что самый простой способ приблизиться к фактическим временам выполнения - это, в основном, запустить ядро на подмножествах входных данных и посмотреть, сколько на самом деле это займет времени.