Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Срастить профилировщик с рантаймом #5

Open
Mazdaywik opened this issue Mar 3, 2016 · 0 comments
Open
Assignees
Labels

Comments

@Mazdaywik
Copy link
Owner

Предлагается следующее. Рантайм (скомпилированный в особом режиме) при запуске открывает файл с заданным именем, содержащий имена функций, подлежащие профилировке. Затем, на каждом шаге рефал-машины сравнивает имя выполняемой функции с известными именами и, если имя находится, осуществляет профилировку заданной функции.

Детали. Дьявол кроется в деталях.

  • На каждом шаге сравнивать имя накладно. Но если в узлах поля зрения для функций хранить не указатель на функцию + указатель на имя, а указатель на дескриптор (который, в свою очередь, хранит указатель на функцию и имя), то выполнение можно организовать более эффективно. Дескриптор дополняется полем отладочных флагов, изначально равным нулю. Бит 0 означает, что функция уже известна, бит 1 — подлежит профилировке. На каждом шаге проверяется поле, если оно равно нулю, то (1) устанавливается бит 0, проверяется имя и, при необходимости, устанавливается бит 1. Затем профилировка осуществляется для функций с установленным битом 1.
  • Взаимодействие с Простым Рефалом — тут одни вопросы. При компиляции в него все имена декорируются, поэтому вопрос, как выписывать профилируемые функции в файл. Рантайм привязывается к профилировщику — надо ли переносить профилировщик в Простой Рефал.
  • Имя файла со списком функций можно указывать в виде макроса препроцессора (как имя файла дампа сейчас). Тогда, если этот макрос не определён, код, ответственный за профилирование даже не включается.

Отладочное поле флагов можно использовать и для других целей: трассировка, break-point’ы и т. д.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant