Я выполняю операцию, назовем ее CalculateSomeData. CalculateSomeData работает в последовательных «поколениях», пронумерованных 1..x. Количество поколений во всем прогоне фиксируется входными параметрами CalculateSomeData и известно априори. Одно поколение занимает от 30 минут до 2 часов. Часть этой изменчивости связана с входными параметрами и не может контролироваться. Однако часть этой изменчивости связана с такими вещами, как аппаратные мощности, загрузка ЦП другими процессами, загрузка полосы пропускания сети и т. д. Одним из параметров, которым можно управлять для каждого поколения, является количество потоков, используемых CalculateSomeData. Сейчас это исправлено и, вероятно, неоптимально. Я хотел бы отслеживать время, которое занимает каждое поколение, а затем иметь некоторый алгоритм, с помощью которого я настраиваю количество потоков, чтобы каждое последующее поколение улучшало время расчета предыдущего поколения (минимизируя время). Какой подход следует использовать? Насколько применимы генетические алгоритмы? Интуиция подсказывает мне, что диапазон будет довольно узким — может быть, от 1 до 16 потоков на машине с двумя четырехъядерными процессорами.
любые указатели, псевдокод и т. д. очень ценятся.