Открыть список
Как стать автором
Обновить
4
Карма
0
Рейтинг
Alexander @joedm

Пользователь

ВКонтакте снова выкладывает KPHP

Будет лучше хотя бы в том, что вы сможете уйти от C++ вообще и g++ в частности. Получите более гибкую настройку оптимизатора + легко сможете добавить свои оптимизации. Или например, зачем вам плюсовый ABI, легко сможете от него отступать или сделать вообще свой.

ВКонтакте снова выкладывает KPHP

Почему бы не использовать LLVM? PHP -> LLVM IR -> .o + gold -> ваш бинарник.

Ethernet, FTP, Telnet, HTTP, Bluetooth — основы анализа трафика. Решение задач на сети с r0от-мi. Часть 1

Пароль замазали, а Base64 от него нет. Вывод — пароль не замазали. ;)

Vivaldi 2.2 — Количество, переходящее в качество

Понятно, спасибо. Я искал через общие настройки.

Vivaldi 2.2 — Количество, переходящее в качество

Можно как-то отключить javascript на определённых сайтах? Я почему-то не нашёл этого в настройках. Плохо искал?

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Вопрос: может я просмотрел в статье, вы Поросёнка для себя как академический проект делаете или это отражение вашей работы?

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

libjit я рассматривал, но у меня от него тогда остались какие-то противоречивые ощущения. Может, сейчас что-то там изменилось, давно не заглядывал.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Да не за что. Будут вопросы — обращайтесь. А я попробую выделить время на статью.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Увы, в архитектуре особенно не разгуляешься. Например, обратная совместимость, так её разэтак — в общем, там всё сложно.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

И да и нет. Была попытка сделать jit-компиляцию при помощи LLVM, но компиляция получилась настолько медленной, что выигрыш в производительности нивелируется временем на разогрев. Поэтому пока этот проект отложен и скорее всего будет продолжен уже как AOT-компилятор либо как second tier для templated jit.
Плюс рассматривается возможность применения JitBuilder/OMR от J9 — это вообще родственная душа. :)

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Это-то и хорошо, что он много чего делает с IR. К тому же, можно рулить тем, что делать, а что не делать. Потом, можно допилить, если он чего-то делает не так. Как сам LLVM, так и сделать свой LLVM pass.
На чистом асме было бы, конечно, здорово. Однако интерпретатор довольно большой и сложный. К тому же у нас три разных архитектуры, умножьте на два для 32-бит версий и вот уже слишком дофига кода.
В случае с LLVM IR — это и есть тот самый портативный асм, и весь код интерпретатора в одном месте.
Что не получилось, так это заставить LLVM использовать %rsp. Почему, потому что сама концепция LLVM не подразумевает использование понятия «стек» и в IR нет вещей для явной работы со стеком (за исключением пары интринсиков, добавленных по просьбам трудящихся). К тому же, в реализациях для платформ стековый регистр настолько прибит гвоздями, что оторвать его — очень трудоёмкая задача.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Вы мыслите в правильном направлении. :) Нужно что-то «повыше» ассемблера и «пониже» С. Для этих целей отлично подходит LLVM IR.
Я очень долго боролся с С за интерпретатор, пробовал всякие варианты — в том числе и аналог «трасс», замешанный с continuation passing style. Лучшее, что получилось — это threaded code с прибитыми регистрами.
И после некоторых упражнений с LLVM я понял — это то что надо. В итоге наш новый VA Smalltalk содержит интерпретатор, написанный на LLVM IR. :)
Собирался написать об этом статью тут, но решил, что мало кому будет интересно.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Я понимаю ваши опасения, но быстрый интерпретатор целиком на pure С вы не напишете. Так или иначе придётся применять«плохие» решения. И, поверьте, pinned registers — это довольно близко к золотой середине. Повторюсь, главный недостаток этого — уменьшение кол-ва доступных GPR для компилятора.
Вы попробуйте ради спортивного интереса.
Можно было бы также задействовать %rsp для стека VM, но во-первых, gcc не даст его закрепить, во-вторых, даже если его инициализировать принудительно через ассемблер, то gcc не обучен таким извращениям и не будет использовать стековые инструкции.

Полёт свиньи, или Оптимизация интерпретаторов байт-кода

Читатель iliazeus предложил еще одну оптимизацию: кеширование вершины стека в отдельной переменной.

А если её ещё и в регистр прикрепить вместе с ip — совсем летать будет:
register uint8_t *ip asm("%r14");
register uint64_t *stack_top asm("%r15");

Использовать осторожно (особенно в x86_32) — эти регистры всегда будут заняты, их аллокатор не трогает вообще.

10 лет Android: вспомнить всё

Blackberry выпускает с аппаратной клавиатурой.

10 лет Android: вспомнить всё

Пособолезнуйте и мне тоже — у меня в машине китайская магнитола на 4.2. Естественно, обновлять ПО в которой никто не собирается.

Doom II: Hell on Earth, id Software. Secret No. 4 on Map 15 (Industrial Zone) открыт в обычном игровом режиме

Чуть выше выложил видео, посмотрите. Монстр там ни при чём. ;) Баг в игре связан со спецификой обработки движения игрока.
А секрет это да, только ради секрета.

Doom II: Hell on Earth, id Software. Secret No. 4 on Map 15 (Industrial Zone) открыт в обычном игровом режиме

У автора видео тоже не оригинал — в оригинальной игре узнать сколько ты открыл секретов можно было только выйдя с уровня.

Doom II: Hell on Earth, id Software. Secret No. 4 on Map 15 (Industrial Zone) открыт в обычном игровом режиме

Короче, вот как-то так, без всяких читов и монстров.
vimeo.com/287924909
Где мои поздравления, Джон Ромеро? :)

Doom II: Hell on Earth, id Software. Secret No. 4 on Map 15 (Industrial Zone) открыт в обычном игровом режиме

Таким образом, что бы там ни писал Ромеро — это баг уровня, баг, не учитывающий особенности движка.

Информация

В рейтинге
5,891-й
Откуда
Липецкая обл., Россия
Зарегистрирован
Активность