Я выполняю операцию, разрешаю ее CalculateSomeData. CalculateSomeData работает в последовательных «поколениях», пронумерованных 1..x. Количество поколений во всем прогоне фиксируется входными параметрами для CalculateSomeData и известно априори. Одно поколение занимает от 30 минут до 2 часов. Некоторая часть этой изменчивости обусловлена входными параметрами и не может контролироваться. Тем не менее, часть этой изменчивости обусловлена такими вещами, как аппаратные возможности, загрузка процессора из других процессов, пропускная способность сети и т. Д. Одним из параметров, который можно контролировать за поколение, является количество потоков, используемых CalculateSomeData. Сейчас это исправлено и, вероятно, неоптимально. Я хотел бы отслеживать время, которое занимает каждое поколение, и затем иметь некоторый алгоритм, с помощью которого я настраиваю количество потоков, чтобы каждое последующее поколение улучшалось по времени вычисления предыдущего поколения (минимизируя время). Какой подход я должен использовать? Насколько применимы генетические алгоритмы? Intuition говорит мне, что диапазон будет довольно жестким - может быть, от 1 до 16 потоков на двухъядерном процессоре с четырьмя ядрами.Алгоритм оптимизации # потоков, используемых при вычислении
любые указатели, псевдокоды и т. Д. Очень ценятся.
Я думаю, вы не используете C# или Microsoft C++, существует TPL (http://msdn.microsoft.com/en-us/library/dd460717.aspx), которые могут координировать ядра потоков. – Iain
Я фактически используя C#/TPL. CalculateSomeData не полностью встречается внутри .net. Я выполняю некоторые .net-взаимодействия с Excel. Я нашел TPL удобным способом добавления параллельной обработки, но для моих конкретных вычислений я обнаружил, что он делает ужасную работу по выбору правильного количества потоков. Обычно это слишком много. Я предпочитаю указывать количество потоков и иметь алгоритм, который изменяет число до тех пор, пока оно не будет оптимизировано. – SFun28
TPL встроен в настройку, но он нацелен на деятельность, связанную с процессором, я полагаю, что встроенная настройка не очень хорошо работает, если у вас есть связанные с сетью действия или действия, которые изменяют характеристики рабочей нагрузки с течением времени. –