Як працювати з JIT

enter image description here
У деяких внутрішніх системах для швидкого пошуку за великим бітовому масиву ми в Badoo використовуємо JIT. Це дуже цікава і не найвідоміша тема. І, щоб виправити таку прикру ситуацію, я перевів корисну статтю Елая Бендерски про те, що таке JIT і як його використовувати.
Читати далі →

Повість про неможливе ба: big.LITTLE і кешування

Коли хтось вимовляє слово багатоядерний, то ми несвідомо маємо на увазі SMP. Це успішно спрацьовувало для нас до недавнього часу, поки ARM не оголосила про big.LITTLE. Архітектура ARM big.LITTLE є першим масово виробленим прикладом архітектури AMP, і як ми побачимо далі, вона піднімає планку складності багатоядерного програмування ще вище.

Читати далі →

PHP-Дайджест № 92 – цікаві новини, матеріали і інструменти (29 серпня – 11 вересня 2016)



Пропонуємо вашій увазі чергову підбірку з посиланнями на новини та матеріали.

Приємного читання!

Читати далі →

«Як я провів це літо»: відео з літніх зустрічей JUG.ru

Ось і настала осінь. Хтось повертається в місто з центнером яблук в багажнику, хтось — з норвезьким пивом прямо з JavaZone, а ми підготували для вас матеріал, який, сподіваємося, перечекає непогоду. Ми розповімо про трьох літніх зустрічах JUG.ru. Тому розробники, повернувшись із відпусток, мають чудову можливість запастися чашкою гарячого чаю, загорнутися в плед і подивитися відео з наших митапов.

Отже, влітку у нас було три зустрічі:
    — Douglas Hawkins з Azul розповів про особливості роботи JIT-компіляторів в HotSpot JVM;
    — Alvaro Hernandez, розробник ToroDB, розповів про те, як Java працює з PostgreSQL;
    — нарешті, Євген Борисов порадував нас новою порцією загадок на тему Spring.


Читати далі →

Введення в компілятори, інтерпретатори і JIT's

З народженням PHP 7 не припиняються суперечки про деревах абстрактного синтаксису, just-in-time компіляторах, статичному аналізі і т. д. Але що означають всі ці терміни? Це якісь чарівні властивості, що роблять PHP набагато продуктивніше? І якщо так, то як це все працює? У цій статті ми розглянемо основи роботи мов програмування та роз'яснимо для себе процес, який повинен виконуватися до того, як комп'ютер запустить, наприклад, ваш PHP-скрипт.

Читати далі →

Особливості роботи JIT-компіляторів в HotSpot JVM — зустріч з Дагом Хокінсом, Санкт-Петербург

У четвер, 30 червня, о 20:00, в пітерському офісі компанії Luxoft відбудеться зустріч JUG.ru з Дагом Хокінсом, JVM-інженером в Azul Systems. Тема зустрічі — особливості роботи JIT-компиляторов в HotSpot JVM.

Мова зустрічі — англійська. Участь — безкоштовна. Кількість місць обмежена, необхідна реєстрація за посиланням.


Читати далі →

Сім видів інтерпретаторів віртуальної машини. У пошуках самого швидкого

Всі проблеми в області Computer Science можуть бути вирішені введенням додаткового рівня побічності. За винятком одного: занадто великого числа рівнів побічності.
All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.
Програмні інтерпретатори відомі своєю невисокою швидкістю роботи. У цій статті я розповім, як їх можна прискорити.
Я давно вже хотів детальніше зупинитися на створенні інтерпретаторів. Прямо таки обіцяв, у тому числі самому собі. Проте серйозний підхід вимагав використання більш-менш реалістичного коду для прикладів, а також проведення вимірювань продуктивності, що підтверджують (а іноді і спростовують) мої аргументи. Але нарешті-то я готовий представити поважній публіці результати, причому навіть трохи більш цікаві, ніж збирався.
У даній статті буде описано сім способів побудови програмної ВМ для однієї гостьової системи. Від самих повільних ми проследуем більш швидким, по черзі позбавляючись від різних «неэффективностей» в коді, і в кінці порівняємо їх роботу на прикладі однієї програми.
Тих, хто не боїться ассемблерних лістингів, поцяткованого макросами коду на Сі, рясно хімічного адресної арифметикою, goto і навіть longjmp, а також програм, що використовують копіпаст в ім'я швидкості або навіть створюють шматки самих себе, прошу просимо під кат.

Читати далі →

Прокачуємо JavaScript за допомогою TurboFan

Привіт, Хабр! Щось давно ми не говорили про Google Chrome і простих веб-технологія. Давайте це виправимо.



Як вам всім, напевно, відомо, екосистема JavaScript розвивається відразу в декількох напрямках. Серед основних змін можна виділити, наприклад, прогрес в основних стандартах мови — недавнє закріплення норм ECMAScript 2015. Крім таких серйозних змін, розвивається мова й у безлічі маленьких експериментів — наприклад — Strong Mode.

Само собою, для забезпечення зростаючих потреб і підтримки нових технологій необхідний новий, гнучкий динамічний (just-in-time) компілятор, і ми старанно працювали над ним для нашого JavaScript-движка V8.

Читати далі →

LLILC - транслятор DOS у байткод LLVM від Microsoft

Сьогодні співробітник Microsoft анонсував проект LLILC — новий проект для трансляції DOS у байткод LLVM, призначений поки головним чином для інфраструктури CoreCLR. Найближчим часом він може бути використаний для JIT-компіляції, а в подальшому і для формування прекомпилированных збірок (Ahead-of-Time) засобами .NET Native.

Незважаючи на те, що в CoreCLR вже є свій JIT, планується розширити підтримку різних платформ за рахунок LLVM. Новий JIT використовує той самий набір внутрішніх API, що і RyuJIT і підключати його замінює. Таким чином новий JIT дозволить .NET-кодом виконуватися на всіх підтримуваних LLVM-платформах, на які можна переносити CoreCLR.

Читати далі →

Зламаний legacy JIT в .NET 4.6

Сьогодні я розповім вам про одну неприємної ситуації, яка пов'язана з JIT в .NET 4.6. Ось кілька фактів:
  • Якщо ви поставили .NET Framework 4.6 Preview, то у вас по дефолту стоїть RyuJIT.
  • Якщо ви поставили Visual Studio 2015 CTP, то вона включає .NET Framework 4.6 Preview, а значить у вас по дефолту стоїть RyuJIT.
  • Якщо ви працюєте на Windows 10 Tech Preview, то вона також включает.NET Framework 4.6 Preview, а значить у вас по дефолту стоїть RyuJIT.
  • Якщо ви хочете повернути старий JIT, то це можна зробити з допомогою ключа регістру, змінної середовища або app.config-налаштування
    useLegacyJit
    .
  • Якщо включити
    useLegacyJit
    у Windows 8 або Windows 8.1, то ви отримаєте велику кількість проблем, пов'язаних з компіляцією та запуском додатків.
  • RyuJIT все ще не готовий до реального використання, деякі програми можуть працювати некоректно на ньому.
Можливо, я просто щось не розумію в цьому житті. Давайте розберемося в ситуації разом.
Читати далі →