Підхід “CPS” завдав великої шкоди результативності в SML / NJ; міркування бажаного


11

У коментарі до Learning F #: Які книги за допомогою інших мов програмування можна перекласти на F # для вивчення функціональних понять? Макарій заявив:

Зауважте, що підхід "CPS" завдав великої шкоди продуктивності в SML / NJ. Його модель фізичної оцінки порушує занадто багато припущень, які вбудовані в апаратне забезпечення. Якщо ви використовуєте великі символічні програми SML, такі як Ізабель / HOL, SML / NJ з CPS виходить приблизно. У 100 разів повільніше, ніж Poly / ML із звичайним стеком.

Чи може хтось пояснити причини цього? (Переважно з деякими прикладами) Чи є тут невідповідність імпедансу?


1
Я розумію, що апаратне забезпечення передбачає стек дисципліни, і тому підхід CPS сприймає перформанс, оскільки не дотримується цього припущення. Але це лише моя необізнана думка.
Андрій Бауер

Відповіді:


9

При першому наближенні є різниця в "локальності" доступу до пам'яті, коли програма просто запускається вперед на купі в стилі CPS, замість традиційного росту та скорочення стека. Також зауважте, що CPS завжди знадобиться GC для відновлення ваших, здавалося б, локальних даних, розміщених у купі. Ці спостереження були б адекватними 10 чи 20 років тому, коли обладнання було набагато простішим, ніж сьогодні.

Я сам не є гуру апаратних засобів, ні компілятора, тому, як друге наближення, ось деякі конкретні причини прибл. коефіцієнт 100, помічений в Ізабелі / HOL:

  • Основні втрати продуктивності відповідно до "першого наближення" вище.

  • Управління купами SML / NJ та GC мають серйозні проблеми, що перевищують кілька десятків МБ; Зараз Isabelle використовує 100-1000 МБ звичайно, іноді кілька ГБ.

  • Компіляція SML / NJ дуже повільна - це може бути абсолютно не пов’язано (зауважте, що Isabelle / HOL чергує компіляцію виконання та запущений код).

  • У SML / NJ бракує рідної багатопотоковості - не повністю пов'язаної між собою, оскільки CPS рекламувались як "розкачати власні потоки в просторі користувача без окремих стеків".

Співвідношення купи та ниток також обговорюється у статті Morriset / Tolmach PPOPP 1993 "Програми та замки: Портативна багатопроцесорна платформа для стандартних ML Нью-Джерсі" ( CiteSeerX ) Примітка: PDF у CiteSeerX є назад, сторінки з 10- 1 замість 1-10.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.