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

Сборщики мусора для многоядерных двигателей?

Я долгое время рассматривал LLVM как новый back-end для языка, который я сейчас реализую. Похоже, что он обладает хорошей производительностью, а также высокоуровневыми API-интерфейсами поколения, достаточной поддержкой низкого уровня для оптимизации экзотических оптимизаций. Кроме того, и, хотя я сам этого не проверял, Apple, похоже, успешно продемонстрировала использование LLVM для собранных мусором многоядерных программ.

До сих пор так хорошо. Поскольку меня интересуют как сбор мусора, так и многоядерные, следующим шагом было бы выбрать многожильный сборщик мусора LLVM. Это подводит меня к вопросу: что доступно? Я знаю Jon Harrop HLVM работает, но об этом.

Обратите внимание, что мне нужна кросс-платформа, поэтому Apple GC, вероятно, не то, что я ищу (если нет кросс-платформенной версии). Также обратите внимание, что я ничего не имею против монстров-сборщиков-миров.

Спасибо заранее, Yoric

4b9b3361

Ответ 1

Документы LLVM говорят, что он еще не поддерживает многопоточные коллекторы.

Как показывает матрица, LLVM инфраструктура сбора мусора уже подходит для широкого спектра коллекционеров, но в настоящее время распространяются на многопоточные программы. Эта будут добавлены в будущем, так как там представляет интерес.

Документы говорят, что для многопоточной сборки мусора вам нужно остановить мир и что это не переносная вещь:

Каскадный    Обозначает многопоточный мутатор; сборщик должен все равно остановить мутатора ( "остановить мир" ) до начальный анализ достижимости. Остановка многопоточного мутатора - это сложная проблема. Это вообще требует особого кода для конкретной платформы во время выполнения и тщательно разработанный машинный код при безопасные точки.

Однако разделяемое состояние между потоками является неприятной проблемой масштабирования. Если ваш язык связывается исключительно через сообщение, проходящее между "задачами", и поэтому между рабочими потоками не существует общего состояния, тогда вы можете использовать сборщик потоков для каждой кучи потоков?

Ответ 2

Кавычки, которые будут предоставлены, касаются внутренней поддержки LLVM для GC, где вы увеличиваете LLVM с помощью кода на С++, рассказывая ему, как ходить по стеку, интерпретировать стековые фреймы, вводить барьеры чтения и записи и т.д. Основная цель моего проекта HLVM - стать полезной с минимальными усилиями и риском, поэтому я решил использовать теневой стек для "несовместимого" окружающей среды ", чтобы избежать взлома на незрелых внутренних структурах LLVM. Следовательно, те утверждения о внутренней поддержке LLVM для GC не относятся к HLVM сборщику мусора, поскольку он вообще не использует эту инфраструктуру. Мои результаты чрезвычайно важны: вы можете добиться отличной производительности с минимальными усилиями ( последовательная производительность и параллельная производительность).

Я верю, что HLVM уже запускается из коробки в Unix, включая Mac OS X, потому что для этого требуются только потоки POSIX. Я категорически не согласен с утверждением о том, что писать GC-стоп-стоп трудно: мне потребовалось 5 дней, чтобы написать многострочный сборщик мусора на 100 строк, и я почти ничего не знаю о компьютерах. Я не могу поверить, что будет трудно переносить в Windows.