The OpenNET Project / Index page

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

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

Вышла новая версия расширения 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 транслятора
Автор новости: Аноним
Тип: Программы
Ключевые слова: php, compile, vm, speed
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.1, Аноним, 21:41, 21/06/2013 [ответить] [смотреть все]
  • +/
    PHP QB compiled практически догоняет Native код по производительности Совреме... весь текст скрыт [показать]
     
     
  • 2.3, Аноним, 21:47, 21/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Любую задачу можно написать на любом языке, вопрос всего лишь программных оберто... весь текст скрыт [показать] [показать ветку]
     
  • 2.4, Аноним, 21:51, 21/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    для админов обычным людям на серверах игры ни к чему ... весь текст скрыт [показать] [показать ветку]
     
  • 2.7, freehck, 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, 21:36, 22/06/2013 [^] [ответить] [смотреть все]  
  • +/
    На хабре один пацанчик на JS написал первокваку Работает хорошо Двигло свободн... весь текст скрыт [показать]
     
     
  • 6.28, Аноним, 23:11, 22/06/2013 [^] [ответить] [смотреть все]  
  • +/
    Очень плохая идея, могут наехать, очевидное нарушение патентов, а может и копира... весь текст скрыт [показать]
     
     
  • 7.30, GG, 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 8212 это двиг для конкретной старой игрушки 8212 Quake 1, мне то ... весь текст скрыт [показать]
     
     
  • 7.36, dennis_p, 15:11, 23/06/2013 [^] [ответить] [смотреть все]  
  • +1 +/
    ну так бы и сказал, что у тебя принципиально новый движок
     
  • 7.42, ОНО, 13:19, 25/06/2013 [^] [ответить] [смотреть все]  
  • +/
    ну так напиши.
     
  • 1.2, GentooBoy, 21:44, 21/06/2013 [ответить] [смотреть все]  
  • –2 +/
    Я понимают пхп аноним, не шарит, но моделаторы то.
    Хотя бы графики уберите с холерными данными.
     
  • 1.5, Georges, 22:04, 21/06/2013 [ответить] [смотреть все]  
  • +4 +/
    Битрикс им можно скомпилировать? Вот кто особые требования по производительности предъявляет.
     
     
  • 2.25, GG, 21:37, 22/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Битрикс писался с учётом особенностей MS SQL, потому и тормозит на всём остально... весь текст скрыт [показать] [показать ветку]
     
  • 2.26, XoRe, 22:59, 22/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Код битрикса править все равно придется Это больше похоже на ассемблерные встав... весь текст скрыт [показать] [показать ветку]
     
  • 1.6, all_glory_to_the_hypnotoad, 22:12, 21/06/2013 [ответить] [смотреть все]  
  • +8 +/
    > В то время как PHP является отличным языком для создания сложных веб приложении

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

     
     
  • 2.11, Аноним, 00:53, 22/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Это была рекламная пауза.
     
  • 1.12, lucentcode, 02:57, 22/06/2013 [ответить] [смотреть все]  
  • +1 +/
    Интересно, а насколько совместим сабж с Zend PHP? Будет ли работать на нём тот-же Drupal?
     
     
  • 2.15, kamiram, 10:50, 22/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    фигово совместим.
    нет, например, словарей.
     
  • 1.14, Аноним, 09:27, 22/06/2013 [ответить] [смотреть все]  
  • +/
    Петросяны... весь текст скрыт [показать]
     
  • 1.17, ip1981, 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, 19:34, 22/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Сначала мы изобрели молоток, а потом уже гвозди. И чо?)
     
     
  • 3.22, Аноним, 20:04, 22/06/2013 [^] [ответить] [смотреть все]  
  • +/
    пальцы уже отбиты, вот чё))
     
  • 1.23, AlexAT, 20:48, 22/06/2013 [ответить] [смотреть все]  
  • +/
    Нет, производительность, конечно, хороша. Но блин то, как это на соплях и скотче примотано - вызывает только "oh, shi...". PHPDoc, какая-то невменяемая типизация...
    Короче, я лучше поюзаю HHVM там, где нужно, и подожду JIT в движке PHP, чем связываться с этим.
     
  • 1.27, XoRe, 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, 14:01, 23/06/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    > Так, глядишь, наконец плавненько уйдем от нетипизированных языков..

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

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

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

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

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


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor