Я ищу алгоритм, который, основываясь на предыдущем поведении системы, предсказывает будущее поведение.
Я создаю параллельный распределитель памяти, в котором есть открытый список пустых блоков. Каждый поток, когда это необходимо, может взять блоки из этого списка и выделить из них. Блоки сгруппированы в ячейки, в зависимости от размера выделения (8, 12, 16 байт ... до примерно 4 КБ). Когда блок становится пустым, он возвращается в глобальный список (с накладными расходами синхронизации, конечно). Если в корзине нет пустых блоков, он пытается «украсть» местоположения из блоков в других корзинах, прежде чем получить новый пустой.
Теперь меня волнуют две ситуации:
- Возможно, что поток выделяет, скажем, память, которая занимает 5 блоков. Через некоторое время он освобождает всю эту память (и блоки попадают в глобальный список). Сразу после этого он снова выделяет 5 блоков, освобождает их и так далее. В этом случае было бы целесообразно постоянно хранить эти 5 блоков и не возвращать их в глобальный список, поскольку это позволяет избежать накладных расходов на синхронизацию.
- Если распределитель «крадет» местоположение, он использует память, которая в противном случае была бы потрачена впустую. Но есть случаи, когда это увеличивает использование памяти.
Я хочу создать систему, которая могла бы наблюдать шаблоны такого типа и сохранять результаты где-нибудь, чтобы в следующий раз распределители знали, что делать разумно, а что нет (сохраняйте по крайней мере N блоков в корзине X, дон 'украсть' из корзины Y).
Являются ли генетические алгоритмы какого-либо использования? Я ничего о них не знаю, но слышал, что они хороши в машинном обучении или что-то в этом роде.
Заранее спасибо!