Бесплатно скачать Adobe Flash Player

+30-40%: Alchemy Virtual Memory API в haXe

Не прошло и дня, как Николя Канасье добавил в язык haXe поддержку API виртуальной памяти. Помогли ему ценные комментарии к Alchemy-посту в его блоге (см. предыдущую запись).

Николя удалось заставить недокументированные опкоды (opcodes) AVM2 работать в haXe. Также он обернул их в haXe API, называемое flash.VMem.

С помощью этого API можно создавать быструю виртуальную память из массивов байтов (минимум 1024) и методом select() выбирать ее как текущую виртуальную память.

Николя пишет, что это позволяет ускорить операции по чтению и записи в память на 40 и 30 процентов соответствеенно (относительно самого быстрого в FP10 класса Vector).

Serge Flop: MD5 через алхимию — в два раза быстрее, чем на AS

Flop, как и обещал вчера, сделал демонстрацию повышения производительности с Alchemy:

Это приложение требует установки Flash Player 10.

Пишет Flop: Демка работает только под Flash Player 10, а под 9-кой интересная ошибка: [ #1033: Cpool entry 397 is wrong type. ], в гугле не находится. В md5 адобовском берет хэш от строки, а не от байтаррэя, поэтому не сходится (не написали они от байтаррэя)).

Писал: Rost, 21 Ноябрь 2008 18:23

Комментарии:

Полагаю что можно такую-же апишку (swc) сделать и для AS3
(заюзать эти нефокументированные фунцыкли AVM2)
и получить этот - же прирост.
Кто возьмется?

Flop - 21 Ноябрь 2008 18:33

Flop не выйдет, вызовы функций из swc съедят весь выигрыш. В swc придется пихать целые алгоритмы, а для этого alchemy по сути и сделали.

makc - 21 Ноябрь 2008 18:45

а динамическое выделение памяти как происходит? изменять значение length выбранного экземпляра ByteArray?

yelbota - 21 Ноябрь 2008 19:51

а динамическое выделение памяти как происходит? изменять значение length выбранного экземпляра ByteArray?

Скорее всего подстановкой другого массива

Вообще, смысл тут не в выделении памяти, а в том, что можно взять ByteArray, который нужно обработать, положить его на "разделочную доску" и быстро-быстро обсчитать.
Затем, если нужно обработать другой массив - сделать текущим уже его.

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

Dan - 21 Ноябрь 2008 21:27

Макс: что-то я сомневаюсь.... может быть я не прав, но насколько я понял всю эту штуку:

1) Алхимия - конвертируер код С/С++ в байткод AVM2
Я алхимию сам не пробывал, но пробовал то-что после нее получается (swc либу)
Тобиш любые файлы С/С++ можно завернуть в swc которая будет работать быстрее чем если тоже самое написать на AS и завернуть в либу. Это я уже проверил и убедился - взял из их примеров готовую swc и заюзал: проверил скорость выполнения - реально быстрее (может Рост выложит демку).
2) Николас задался вопросом: А откуда этот прирост который реально виден, если по сути тот-же AVM2 байткод? И нашел 12 недокументированных AVM2 инструкций которые получаются после Алхимии, но не получаются при компиляции AS3.
3) Николас, с помощью francis bourre разобрался в этих инструкциях (по сути это прямой доступ в виртуальную память, который и дает этот прирост в производительности) и сделал класс VMem - который доступен из haXe и понимается его компилятором, компилится в байткод AVM2 УЖЕ С ЭТИМИ ХИТРЫМИ ИНСТРУКЦИЯМИ.
- кстати все декомпилеры спотыкаются на этих инструкциях (пока))))
4) Так почему бы не сделать те-же самые функции на С (выделение, запись, чтение в виртуальую память) и конвертнуть их с помощью Алхимии в swc в такого-же рода класс VMem ??? зачем целые алгоритмы? если из инх получается тот-же! байткод за исключением вот этого доступа к памяти?

---
сам я СИ неумею, линукса у меня нету, пойду попинаю знакомых пока выходные, может ктонить мне поможет по этому поводу

Flop - 22 Ноябрь 2008 1:50

ну наконец-то можно нормально работать .... :)

Artem Brigert - 22 Ноябрь 2008 12:28

прикольная вещь, реально работает.

- 22 Ноябрь 2008 14:55

По поводу Cpool entry - в 10-й версии действительно добавили какой-то новый тип данных в пул констант с идентификатором 29.
Знаю это потому, что старый abcdump на нём спотыкался. Обновился из тамариновского репозитория - заработало.

Dan - 22 Ноябрь 2008 16:43

Хмммм.

... Calc MD5 with Alchemy
74ab891e3bf169d399fd679c7d45bb08
... time =711 ms.
... Calc MD5 with as3Crypto (Hurlant)
74ab891e3bf169d399fd679c7d45bb08
... time =3 ms.
... Calc MD5 with as3Crypto (Adobe)
8b1a9953c4611296a827abf8c47804d7
... time =4 ms.

Dan - 22 Ноябрь 2008 16:44

Dan, у меня вообще со второго раза идут 0ли.

Flop, в haXe байткод по идее при компиляции просто подставится в нужное место, у тебя же в as3 останется обычный вызов твоей функции, тело которой хотя и будет работать быстро, но сам вызов тоже займёт некое время.

makc - 22 Ноябрь 2008 17:52

В AVM1, помнится, можно было напрямую вызывать методы Flash Player API через директивы ASNative. Нет ли подобных директив в AVM2? Если есть, то их можно использовать для вызова opcodes.

Ivan Azarov - 22 Ноябрь 2008 18:25


... Calc MD5 with Alchemy
1dbb54f9416d88cc06ca73c5a0bb0012
... time =281 ms.
... Calc MD5 with as3Crypto (Hurlant)
1dbb54f9416d88cc06ca73c5a0bb0012
... time =2 ms.
... Calc MD5 with as3Crypto (Adobe)
2065bae1f71b5fe7e8530e968f8d0a7d
... time =0 ms.

странный прирост какой-то

Artem Brigert - 22 Ноябрь 2008 18:37

Я понял. Там при первом запуске происходит что-то очень медленное (загрузка и компиляция каких-то классов или ещё что-то) поэтому при первом старте всегда медленно.
При втором уже более реальные цифры.
Однако Hurlant всё равно получается быстрее.
Может быть вариант для Alchemy недостаточно заоптимизирован.

Dan - 22 Ноябрь 2008 20:09

у меня вообще со второго раза идут 0ли.

Накидай побольше данных. Килобайт 20-30.

Dan - 22 Ноябрь 2008 20:10

ну вот 8 Kb
и задом наперёд

... Calc MD5 with as3Crypto (Adobe)
3d8badffebe0875685e3625a1bcbf437
... time =10 ms.
... Calc MD5 with as3Crypto (Hurlant)
4bcccc24c36c3088b1541418a84fc153
... time =3 ms.
... Calc MD5 with Alchemy
4bcccc24c36c3088b1541418a84fc153
... time =281 ms.

- 23 Ноябрь 2008 1:51

Оставляйте пожалуйста информацию о системе и браузере, флэш плеер по разному работает в разном окружении.

Mac OS X, Safari 3.1, Flash Player 10, 45056 Bytes:

... Calc MD5 with Alchemy
709c02e6f5d9423260dfe91795db76a9
... time =26 ms.
... Calc MD5 with as3Crypto (Hurlant)
709c02e6f5d9423260dfe91795db76a9
... time =48 ms.
... Calc MD5 with as3Crypto (Adobe)
9fd17473b1fb79e9c6a2b0475b5153c3
... time =90 ms.

Nirth - 23 Ноябрь 2008 8:08


... Calc MD5 with Alchemy
fa5b994318dfe41c8031da1c0ba3f705
... time =35 ms.
... Calc MD5 with as3Crypto (Hurlant)
fa5b994318dfe41c8031da1c0ba3f705
... time =61 ms.
... Calc MD5 with as3Crypto (Adobe)
c23c65c6185f8b3ec19e341a70b3e5f3
... time =110 ms.
... Calc SHA1 with Alchemy
11edf711b98ea1b52ebbd685828ce46a101b11b7
... time =90 ms.
... Calc SHA1 with as3Crypto (Hurlant)
11edf711b98ea1b52ebbd685828ce46a101b11b7
... time =187 ms.
... Calc SHA1 with as3Crypto (Adobe)
11edf711b98ea1b52ebbd685828ce46a101b11b7
... time =166 ms.
... Calc SHA256 with Alchemy
ca9e58e384d5531cee025a31cab8790f017aa5d12d02f6f6529029f12170ed94
... time =224 ms.
... Calc SHA256 with as3Crypto (Hurlant)
ca9e58e384d5531cee025a31cab8790f017aa5d12d02f6f6529029f12170ed94
... time =234 ms.
... Calc SHA256 with as3Crypto (Adobe)
ca9e58e384d5531cee025a31cab8790f017aa5d12d02f6f6529029f12170ed94
... time =262 ms.

Nirth - 23 Ноябрь 2008 8:10

15360 bytes, PC/XP SP2, IE7/FP10:

... Calc MD5 with Alchemy
7a4edfd77dda05055e268204a74849e7
... time =313 ms.
... Calc MD5 with as3Crypto (Hurlant)
7a4edfd77dda05055e268204a74849e7
... time =16 ms.
... Calc MD5 with as3Crypto (Adobe)
e24e6b5684fc21f418ad80e32dea63c2
... time =31 ms.
... Calc MD5 with Alchemy
7a4edfd77dda05055e268204a74849e7
... time =0 ms.
... Calc MD5 with as3Crypto (Hurlant)
7a4edfd77dda05055e268204a74849e7
... time =16 ms.
... Calc MD5 with as3Crypto (Adobe)
e24e6b5684fc21f418ad80e32dea63c2
... time =15 ms.

где то явно бага.

makc - 23 Ноябрь 2008 13:31

Первый запуск како-го нить метода алхимии тут всегда тормозит.
из-за враперва в АС3. там такое дело, что он весь онован на статических методах,
и при вызове любого, если не создан сам объект который считает эти хэши, он его создает и инициализирует (вроде синглтона), так-что первый не считается ))

Flop - 23 Ноябрь 2008 13:48

Не все нормально Alchemy работает быстрее. Запускала 10 раз, на инпут ложил 13 кило, браузер Chrome, ОС WindowsXP, Flash 10
Вот резалты (чаще показывало 1ms):
... Calc MD5 with Alchemy
79cfa5edf928ac46c38eb5baca8ca69d
... time =3 ms.
... Calc MD5 with as3Crypto (Hurlant)
79cfa5edf928ac46c38eb5baca8ca69d
... time =8 ms.
... Calc MD5 with as3Crypto (Adobe)
ac7677cc7f977d3f7045da717b26f09e
... time =25 ms.

Deadmanovich - 24 Ноябрь 2008 23:32

20kb, ff3, vista32


... Calc MD5 with Alchemy
c6edca01bb71ca0473a0fad846acd585
... time =1 ms.
... Calc MD5 with as3Crypto (Hurlant)
c6edca01bb71ca0473a0fad846acd585
... time =6 ms.
... Calc MD5 with as3Crypto (Adobe)
a2c4bd883512b7127f66ad528cc07833
... time =23 ms.

dedulik - 25 Ноябрь 2008 0:18



Подписаться на новости (RSS)




Примечания:
Статус документа
: в процессе
   2002-2009 Производство: Ростислав Сирык · О проекте · Подписка на новости (RSS)