The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новая версия PHP QB 1.3, позволяющего существенно увеличить производительность PHP-программ

21.06.2013 15:56

Вышла новая версия расширения PHP QB 1.3, предоставляющего средства для написания требовательных к производительности приложений на языке PHP.

В то время как PHP является отличным языком для создания сложных веб приложений, он имеет несколько определённых ограничений. Написание кода который выполняет низкоуровневые, интенсивные по вычислениям задачи, в основном не практично - он просто будет слишком медленен. Расширение QB направлено на устранение этой слабости PHP. Транслируя Zend опкод и исполняя его с помощью статически типизированной виртуальной машины или преобразуя его в нативный исполняемый код, QB обеспечивает колоссальный прирост производительности (от 5 до 20 раз). Добавленная мощность позволяет программистам на языке PHP делать вещи которые они не могли сделать ранее, такие как сложные операции с видео и изображениями на уровне пикселей.

В QB программа может быть скомпилирована как в родной для платформы код, так и в байткод для исполнения в виртуальной машине. Код, использующий QB, можно вызывать из классов, написанных для Zend PHP. Трансляция выполняется на уровне отдельных функций и затрагивает только специальным образом помеченный код. Взаимодействие кода PHP QB и кода PHP осуществляется бесшовно - после компиляции функции на PHP QB становятся видимы из PHP-приложения как обычные функции. Таким образом с использованием PHP QB могут выполняться только критичные к производительности участки кода, а остальной код может быть оставлен нетронутым.

Особенностью расширения PHP QB является то, что оно использует сведения указанные в блоках PHPDoc для получения информации о типах данных. Хотя PHP QB в основном совместим с Zend PHP, он имеет несколько отличий которые позволяют его считать отдельным языком. Например массивы являются просто блоками памяти в PHP QB, в нём нет ассоциативных массивов, в силу этого действия операторов также во многом отличаются от эталонной реализации Zend PHP. Большинство операторов в PHP QB поддерживают на входе как скалярные данных так и массивы. Таким образом реализуется принцип "одна инструкция, много данных". Например результатом $b = array(1, 2, 3, 4); $b += 10; будет [11, 12, 13, 14]. В PHP QB нет типа "строка", это просто массив uint8.

Основными нововведениями в версии PHP QB 1.3 являются улучшение производительности компилированного кода и сокращение использование памяти при компиляции. Некоторые изменения:

  • Для преобразований float-в-int, когда это возможно, используется инструкции SSE.
  • Добавлена функция blend.
  • Добавлена инструкция умножить-аккумулировать. $d = $c + ($a * $b) сейчас производится в одну инструкцию, с по существу бесплатной операцией сложения.
  • Импортированные ядра Adobe Pixel Bender сейчас работают с предумноженным альфа-каналом так как они должны.
  • Добавлена поддержка Mac OS X Mountain Lion.

На графике показана производительность PHP QB в тесте fannkuch-redux из Computer Language Benchmark Game. (1) Zend PHP, (2) PHP+QB в режиме интерпретации и (3) в режиме компиляции (с использованием gcc).

На графике показана производительность PHP QB при рассчёте контрольной суммы CRC-32 для данных размером в 10мб.

  1. Главная ссылка к новости (http://www.php-qb.net/index.ph...)
  2. OpenNews: Facebook анонсировал виртуальную машину HipHop и JIT-компилятор для языка PHP
  3. OpenNews: PHP-транслятор HipHop позволил Facebook использовать в разы меньше оборудования
  4. OpenNews: Компания Facebook открыла код высокопроизводительного PHP транслятора
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/37244-php
Ключевые слова: php, compile, vm, speed
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 21:41, 21/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    PHP+QB (compiled) практически догоняет Native код по производительности?
    Современные игрушки можно писать на PHP?
     
     
  • 2.3, Аноним (-), 21:47, 21/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Любую задачу можно написать на любом языке, вопрос всего лишь программных оберток
     
  • 2.4, Аноним (-), 21:51, 21/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Современные игрушки можно писать на PHP?

    для админов. обычным людям на серверах игры ни к чему.

     
  • 2.7, freehck (ok), 22:15, 21/06/2013 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Какие Вы выводы делаете, однако, при том даже, что ОСИ НЕ ПОДПИСАНЫ!
     
  • 2.9, Аноним (-), 23:17, 21/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    А для JavaScript есть чтото похожее, хочу игрушку запилить? Fps
     
     
  • 3.10, rhamdeew (?), 23:59, 21/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Для JS запилили asm.js недавно вроде, да и игровых движков на нем есть небольшая кучка
     
     
  • 4.13, Аноним (-), 03:47, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Двиг с нуля придётся делать.
    asm.js не совсем то.
     
     
  • 5.24, GG (ok), 21:36, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    На хабре один пацанчик на JS написал первокваку. Работает хорошо. Двигло свободное, бери да перепиливай под себя.
    http://habrahabr.ru/post/177159/
     
     
  • 6.28, Аноним (-), 23:11, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Очень плохая идея, могут наехать, очевидное нарушение патентов, а может и копирайтов.
     
     
  • 7.30, GG (ok), 23:44, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Очень плохая идея, могут наехать, очевидное нарушение патентов, а может и копирайтов.

    Нет

     
     
  • 8.32, Аноним (-), 23:51, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Ребята из Mozilla однажды несколько лет назад, запилили целый Doom 1 или Doom 2,... текст свёрнут, показать
     
  • 6.29, Аноним (-), 23:40, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    WebQuake — это двиг для конкретной старой игрушки — Quake 1, мне то он зачем сдался?

    Если я хочу делать новый качественный продукт, зачем мне сверхустаревший движок со старыми принципами и ошибочными решениями для какой-то игры каменного века?

    Я что, должен подстраиваться и всю игрушку писать под этот шизофреничный движок? В ущерб своей психике, нервам, графике, геймплею и FPS? Это что за ересь?

    Вы меня не так поняли кажется, я вовсе не собирался делать игру похожую на Quake 1.

    Сейчас всё по другому можно сделать, гораздо экономнее и fps больше выйдет.

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

    Но мне нужен новый качественный движок с современными принципами, и изначально ориентированный на работу в браузере, всё это должно быть учтено заранее, движок пишется с нуля ориентируясь на это.

    Без всяких глупостей и шизофрений, которые были актуальны или нужны 17 лет назад.

     
     
  • 7.36, dennis_p (?), 15:11, 23/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ну так бы и сказал, что у тебя принципиально новый движок
     
  • 7.42, ОНО (?), 13:19, 25/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    ну так напиши.
     

  • 1.2, GentooBoy (ok), 21:44, 21/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я понимают пхп аноним, не шарит, но моделаторы то.
    Хотя бы графики уберите с холерными данными.
     
  • 1.5, Georges (ok), 22:04, 21/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.
     
     
  • 2.25, GG (ok), 21:37, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.

    Битрикс писался с учётом особенностей MS SQL, потому и тормозит на всём остальном (да и на нём тоже), пыха тут не поможет.

     
  • 2.26, XoRe (ok), 22:59, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.

    Код битрикса править все равно придется.
    Это больше похоже на ассемблерные вставки в исходнике на С/С++.
    Если хотите оптимизировать функцию, нужно четко указать типы входных данных.
    И если функция работает со строками, надо ещё посмотреть, будет ли профит.

     

  • 1.6, all_glory_to_the_hypnotoad (ok), 22:12, 21/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > В то время как PHP является отличным языком для создания сложных веб приложении

    нельзя же так неаккуратно делить на ноль

     
     
  • 2.11, Аноним (-), 00:53, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это была рекламная пауза.
     

  • 1.12, lucentcode (ok), 02:57, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Интересно, а насколько совместим сабж с Zend PHP? Будет ли работать на нём тот-же Drupal?
     
     
  • 2.15, kamiram (?), 10:50, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    фигово совместим.
    нет, например, словарей.
     

  • 1.14, Аноним (-), 09:27, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >> Memory usage during compilation was significantly reduced. QB can now be compiled comfortably on system with 2 gig of physical RAM (provided some swap space is available).

    Петросяны

     
  • 1.17, ip1981 (ok), 13:48, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > обавлена инструкция умножить-аккумулировать. $d = $c + ($a * $b) сейчас производится в одну инструкцию, с по существу бесплатной операцией сложения.

    lea? :-)

     
     
  • 2.19, Аноним (-), 17:03, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    mla
     

  • 1.18, Anonymouz (?), 16:59, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Даёшь больше костылей, хороших и разных!
     
     
  • 2.41, Аноним (-), 09:43, 24/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Даёшь больше костылей, хороших и разных!

    Смолистых-деревянных, оне горятъ лутчее.

     

  • 1.20, edwin3d (?), 18:41, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Забавно ... сперва мы создаем интерпретатор да еще с динамической типизацией, потом набираем шишки ... а потом пританцовываем к той-же печке: Бинарные сборки, компиляция и т.д. ....
     
     
  • 2.21, pro100master (ok), 19:34, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Сначала мы изобрели молоток, а потом уже гвозди. И чо?)
     
     
  • 3.22, Аноним (-), 20:04, 22/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    пальцы уже отбиты, вот чё))
     

  • 1.23, AlexAT (ok), 20:48, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нет, производительность, конечно, хороша. Но блин то, как это на соплях и скотче примотано - вызывает только "oh, shi...". PHPDoc, какая-то невменяемая типизация...
    Короче, я лучше поюзаю HHVM там, где нужно, и подожду JIT в движке PHP, чем связываться с этим.
     
  • 1.27, XoRe (ok), 23:01, 22/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересная штука, если вы готовы переписывать оптимизируемые функции.
    Хотя не проще тогда сразу на компилируемом языке писать критические вещи?
     
  • 1.33, Булочка (?), 00:07, 23/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это как Phalcon в PHP, но для особо тонких ценителей?
     
  • 1.34, Crazy Alex (??), 13:45, 23/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так, глядишь, наконец плавненько уйдем от нетипизированных языков..
     
     
  • 2.35, AlexAT (ok), 14:01, 23/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Так, глядишь, наконец плавненько уйдем от нетипизированных языков..

    Куда уходить-то? Для этого уже давным давно есть C - вполне себе строго типизированный универсальный язык.

     
     
  • 3.37, balex (??), 16:07, 23/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Разве что вполне себе. Слишком опрометчиво для строго типизированного enum от int не отличать.
     
     
  • 4.38, pro100master (ok), 19:54, 23/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    с какого субботнего похмелья он enum от int не отличает? Ну-ка, определение enuma озвучьте?)
     
     
  • 5.39, all_glory_to_the_hypnotoad (ok), 23:20, 23/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    ты эта... не относишься к тем самым, которые считают c/c++ одним языком?
     
     
  • 6.43, pro100master (ok), 23:40, 25/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > ты эта... не относишься к тем самым, которые считают c/c++ одним языком?

    из чего следует столь нелепое предположение?

     

  • 1.40, Аноним (-), 09:42, 24/06/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    QB это Куиск Басек?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру