таким образом, вот моя проблема:
У меня есть несколько различных configuarion серверов. У меня есть различные вычисления (задания); я могу предсказать, сколько времени приблизительно каждое задание возьмет, чтобы быть caclulated. Кроме того, у меня есть приоритеты. Мой вопрос состоит в том, как сохранить загруженные 99-100% всех машин, и запланируйте задания лучшим способом.
Каждая машина может сделать несколько вычислений за один раз. Задания продвинуты к машине. Центральная машина знает текущую загрузку каждой машины. Кроме того, я хотел бы для присвоения некоторого машинного обучения здесь, потому что я буду знать, статистика каждого задания (запустился, законченный, загрузка ЦП и т.д.).
Как я могу распределить задания (вычисления) самым лучшим способом, имея в виду приоритеты?
Какие-либо предложения, идеи или алгоритмы?
К вашему сведению: Моя платформа.NET.
Microsoft недавно опубликовала статью о своем планировщике quincy. Если вы просто оптимизируете загрузку ЦП, то очень простой решатель может найти глобальный оптимум. Если вам нужна оптимизация по большему количеству осей, то, очевидно, проблемное пространство будет более сложным.
Насколько велик ваш кластер? Как вы справляетесь с оптимизацией в случаях сбоя? Они имеют значение? Есть IO? Есть ли у данных привязка к диску? Есть ли несколько мест для выполнения части работы? Все, что нужно учесть.
Похоже, это имеет мало общего с .NET.
Но думайте о своих машинах как о «рабочих потоках», создайте «пул» доступных машин, упорядоченных на доступном процессоре (или другом важном ресурсе), а затем используйте свои знания о каждой задаче, чтобы передать каждое задание на наиболее подходящую машину.
Если вы заранее знаете все задания, вы, вероятно, могли бы использовать алгоритм «наилучшего соответствия», чтобы запланировать их в правильном порядке на правильных машинах. Вы также можете взглянуть на алгоритмы «сокращения запасов»; http://en.wikipedia.org/wiki/Cutting_stock_problem ...