Подтвердить что ты не робот

Общие рекомендации по сокращению времени GC в GHC

Существуют ли какие-либо общие правила, чтобы обнаружить причину, когда программа, скомпилированная GHC, тратит много времени на сборку мусора? И что в целом считалось бы слишком большим? Например, в целом, приемлема ли производительность на 60% или это указывает на то, что что-то не так с кодом?

4b9b3361

Ответ 1

Вот быстрый и очень неполный список:

  • Тест и бенчмарк. Одним из немногих недостатков слабого является сложность прогнозирования затрат времени и пространства. Если у вас нет тестовых данных, у вас ничего нет.
  • Используйте лучшие алгоритмы. Это звучит слишком просто, но оптимизация неэффективных алгоритмов похожа на рэп с s ** t в золоте.
  • Стратегически сделать некоторые данные более строгими. Test and Benchmark! Цель состоит в том, чтобы сохранить физически меньшее значение WHNF, а не то, что его производит, тем самым очищая больше мусора в самом эффективном первом проходе. искать сложные функции, которые производят простые данные.
  • Стратегически сделать некоторые данные менее строгими. Test and Benchmark! Цель - задержка производства большого количества данных до момента ее использования и отбрасывания, тем самым очищая больше мусора в самом эффективном первом проходе. Ищите простые функции, которые производят большие сложные данные. См. Также comonads.
  • Стратегически использовать массивы и распакованные типы, в частности, см. # 2. в отношении монады ST. Тест и контрольный показатель!. Все они подходят для более сырых данных в более компактную память. Собрать меньше мусора.
  • Скрипт с настройками RTS (специфический ghc). Тест и тест! Цель состоит в том, чтобы "соответствовать импедансу" GC с потребностями в памяти вашей программы. Я становлюсь еще более потерянным здесь, а затем в 1-5, поэтому попросите экспертов об этом.

Лучшая сборка мусора имеет довольно простое предположение: создавайте меньше мусора, собирайте его раньше, создавайте меньше распределений/освобождений памяти. Любая вещь, которую вы можете сделать, может привести к тому, что один из этих трех эффектов стоит того. Тест и контрольный показатель!