Тема: Ускорение машины
TSVM.RunThread реализован
через case по OP Codes.
Возможно ли ускорение выполнения программ?
если каждый опкод завернуть в процедуру,
сделать массив ссылок на них,
и при интепретации делать выбор по целому.
Официальный форум проекта. |
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Mash lang → Mash Compiler → Ускорение машины
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TSVM.RunThread реализован
через case по OP Codes.
Возможно ли ускорение выполнения программ?
если каждый опкод завернуть в процедуру,
сделать массив ссылок на них,
и при интепретации делать выбор по целому.
К сожалению нет... Это приведет к лишним вызовам и соответственно замедлению.
Не знаю какой код генерирует case конкретный компилятор.
Преполагаю типа такого:
cmp eax, OpcodeN
je doesOpcodeN
...
doesOpcodeN:
; некий код
jmp к_началу_цикла
Здесь расход тактов cmp, je, jmp
количество сравнений cmp в худшем случае maxN, в лучшем 1.
При выполнении операций ВМ по ссылке из массива
расход тактов только на call ret
независимо от OpcodeN
Для case генерируется конструкция, поочередно проверяющая равенство выражения с кейсами пока не наткнется на нужное.
Для case генерируется конструкция, поочередно проверяющая равенство выражения с кейсами пока не наткнется на нужное.
Ну да, линейный поиск...
Думаю в будущем мне стоит попробовать написать для Mash бекенд для JVM.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Mash lang → Mash Compiler → Ускорение машины