ASM.JS невероятен
Ну че пасоны, кто игрался, кто что думает? п.с. (Я вот буду на нем юиху писать теперь), там есть и работа с дом и виртуальная файловая система,и удобно шейдеры писать, и на канве рисовать, и можно в бинарник для node.js скомпилировать и.т.п. А вы что думаете? Научить вас его запускать писать и компилить? Али сами)? |
Вот я добавил обьектов и цикл на 10 миллионов итераций, примерно столько я хочу иметь в юишке за кадр.
javascript код: function Cat(newAge) { this.age = newAge } Cat.prototype.say = function () { return this.age; } console.time('javascript time'); var q = 0 for (var i = 0; i < 10000000; ++i) { var cat = new Cat(4) q += cat.say() if (q === 12) q = 0 } console.timeEnd('javascript time'); console.log('javascript q=' + q); его эквивалент на С++: class Cat { private: int age; public: Cat(int newAge) { age = newAge; } int say() { return age; } }; int main() { EM_ASM(console.time('asm time')); int q = 0; for (int i = 0; i < 10000000; ++i) { Cat cat(4); q += cat.say(); if (q == 12) q = 0; } EM_ASM(console.timeEnd('asm time')); printf("asm: q=%d", q); return 0; } То есть asm показывает минимальное проседание fps в 52 кадра в секунду Яваскрипт же выдает 5.4 кадра в секунду Иными словами чем сложнее данные и чем больше операций, тем выгодней asm js Использовать его в юишке было отличной идеей. Осталось только как то выкинуть тучу лишнего кода который прикрепляется в выходному файлу, убрать всякую егалду для работы с файлами и прочие штуки для совместимости с сишными программами. Мне по сути очень не хочется в фреймворк тащить тучу лишнего кода увеличивая вес на 100кб. То есть по сути мне просто нужно получить кучу и все, все внешние вызовы я буду делать через темплейт EM_ASM который код написаный внутри оставляет "как есть" и там я буду вызывать стандартные функции браузера. |
Цитата:
Для этого нужно будет построить не только виртуал дом, но и виртуал стайлшит, но фреймворк предполагает что мы не будем добавлять новые css стили после инициализации приложения, но если добавим ни что не мешает вызвать что-то типа ui.update() и пересчитать виртуальный стайлшит. Вообще, теоретически, имея такие мощности, можно написать браузер в браузере, и оптимизировать не оптимальные места в браузере заточив под нужды фреймворка. Например я уже парсю стайлшиты определяю приоритеты селекторов и определяю какие изменения добавляет тот или иной класс чтобы анимировано изменить width с auto на допустим 30em, если задан transition widtn. Хотя браузер это делает рывком. и.т.п. Я могу расширить эту концепцию и добавить нууу, например можно будет не писать префиксы всякие в css, фреймворк их сам добавит. Или можно будет написать что-то вроде новых кастомных css свойств, ну как то что делают препроцессоры, тока тут будет какое нить свойство типа width: @parent - 10% и фреймворк начнет автоматически в виртуал дом брать ширину в 10% от родительской высчитывать. Или можно добавить новые единицы измерения например, типа "одна сотая ширины экрана". Но я пока не знаю можно ли получать доступ к сырым данным css файлов? Кто знает? Я имею ввиду если стайл уже загружен и я хочу посмотреть тупо его КОД. Как это сделать? Просто стайлшиты котрые генерит браузер, при парсинге игнорируют неизвестные им свойства и синтаксические ошибки. По этому мне нужны сырые стили. Чтобы не делать xhr запрашивая и парся их повторно. |
Увеличел количество итераций с обьектами в 10 раз
результаты поражают: |
Еще есть вот такая штука http://www.leaningtech.com/cheerp/, она генерирует не asm.js код а просто код на бинарных операторах. В отличии от emscripten она позволяет из С++ работать напрямую со всем браузерным api включая дом и прочее, даже позволяет фреймворки юзать типа jQuery. НО она работает где то на 20% медленнее asm, а где то млять БЫСТРЕЕ!! Чертовщина) и оверхед у неё аж 600 килобайт!!!! а у асма 140
вот сравнение производительности на миллионе элементов: Кстати помнится мне кто-то тут кукарекал что бинарные операторы работают не быстрее чем обычные и типа все это миф)??? лалки |
Ну, короче че я думаю, я думаю я буду писать классы обертки для взаимодействия с DOM в браузере ;) для Emscripten.
Так как он все таки быстрее и кода меньше генерит. А потом предложу внедрить их в стандартную библиотеку Emscripten, я ж крутой |
о, оказуца стандартные яваскрипт классы могут наследовать от сишных) красавцы ребята
|
оказуца взаимодействовать с рантайм окружением проще простого
#include <emscripten.h> #include <emscripten/val.h> using namespace emscripten; int main() { val document = val::global("document"); val body = document["body"]; body.set("innerHTML", val("ololo")); body.call<void>("setAttribute", val("name"), val("i winner")); } |
Mаxmaxmаximus, тема интересная. Взял бы свою энергию направил на бы созидание, а точнее, написал бы туториал. Сейчас, я не понимаю, для кого ты всё это пишешь.
|
Цитата:
|
Mаxmaxmаximus, лично мне было бы интересно узнать, как использовать АСМ без компилятора и в каких задачах его можно применить. В циклах, типизированных массивах, типизированных переменных - ок. Но хорошо бы узнать, помогает ли асм при работе с объектами (обычными инстансами Object) и как оптимизировать вызов одной функции внутри другой (обе на АСМ).
|
лайк репост https://youtrack.jetbrains.com/issue/CPP-4974#
|
Я вот тоже попробовал вчера asm.js , пока что только настроил работу с ним через Emscripten в Visual Studio, могу теперь писать на с/c++ и сразу запускать html/js в браузере. Скорость выполнения такого JS приближается к нативной, и при этом работает в любом браузере! Согласен полностью, что код большой получается в .js, как то надо научиться компилировать без лишнего. Но вообще, я думаю намудрили они там... когда настраивал и разбирался с мануалом, напомнило мне это всё, как я разбирался с Marmalade, который позволял програмить один раз на одном языка, а потом портировать на все платформы, правда для этого надо изучить кучу нюансов работы с ним, переписанных ими функций, и тд, а инфы в инете очень мало, даже на английском! Портировать с++ в asm.js, настраивать Emscripten, изучать новый мануал и тп есть смысл только, если у вас много постоянно выполняемого JS кода. Если JS кода мало, то его и вручную можно написать в стиле asm.js, если выполнение JS кода это менее 10% от всей нагрузки, думаю смысла заморачиваться с ним нет. К примеру, если делать графику на WebGL/OpenGL ES, то там почти все сложные расчеты можно делать в шейдерах, что не имеют отношения к JS и быстрее выполняться не будут. А вот если у вас сложный ИИ написан на JS или какой-нить парсер, или идет интенсивная работа в DOM-ом, циклы всяких вычислений, и любые подобные вещи, которые жрут много процессорного времени при выполнении, то однозначно нужен asm.js или тп прокладки. У меня простые расчеты в цикле на asm.js выполняются в 1000 раз быстрее, чем на обычном js (с нетипизированными переменными).
|
Цитата:
Цитата:
|
Цитата:
> в каких задачах его можно применить обычно оптимизируют только горячие куски кода, но вслучае асм нужно весь поджект псиать на асм, по этому только горячие проэкты пишутся на нем, например физические движки или что то, что служдит платформой для чего либо другого, и должно работать максимально быстро, напимер фреймворки какие-то и.т.п., а вот игрули же, использующие эти фреймворки, должны писаться на яваскрипте, что и идеологически верно, и не затормозит игрулину так как api фреймворка будет все выкрутасы делать а ты яваскриптом только рулить им будешь. |
Цитата:
Вообще если человек пишет сложные физические расчеты, не используя мощь GPU , то это просто означает, что он не знает как это правильно делать:) мне кажется полным идиотизмом вычислять физику, трансформацию вершин, генерацию текстур, создание карт нормалей динамически создаваемых примитивов и тп в оперативке, используя CPU, а затем гонять эти данные по шине в GPU ... |
Цитата:
http://habrahabr.ru/post/193642/ http://asmjs.org/spec/latest/ |
Цитата:
Ага, нашел ответ в посте на Хабре. |
function x() {"use asm"; y = 0;} x()Почему не генерируется исключение? |
Цитата:
|
В дополнение к этому посту, вот инфа как еще в 5 раз ускорить выполнение JS вычислений:
http://www.cs.utexas.edu/users/ivan/pubs/simdjs.pdf https://esdiscuss.org/notes/2014-07/simd-128-tc39.pdf |
Цитата:
|
Цитата:
Пасоны, вы читаете то же что и я или мне показалось что он сказал что может физический движок на WebGL написать? Даже я в самом начале своей карьеры такой ахинеи не нес. Ты бы еще сказал что на шейдерах физику писать собрался ляля). Анука пример кода определающего входит ли точка в круг на webGL или звездабол диванный. |
Цитата:
типа делать вставки на С++ и он бы конверитл их в асм инлайн. тогда удобно было бы писать горячие куски кода на асме. повторюсь что руками на асме писать невозможно физически. у кого есть обратные данные напишите мне банально функцию которая складывает 2 строки "hello" и "world" и выводит результат как return функции. а то раскудахтались тут что руками они писать собрались лол. если отец говорит вам чт это невозможно значит отец фигни не посоветует и батю надо слушать понятно? НИ какие возражения по этому пункту не принимаются если это не КОД! Все остальное автоматически воспринимается как отмаза на которую я даже отвечать не буду! |
Цитата:
|
> https://esdiscuss.org/notes/2014-07/simd-128-tc39.pdf
кто-то мне помнится тут говорил что ко ко ко бинарные операторы не быстрее работают и что это миф, а я вам эту либу хотел привести но тупо забыл название. ну выходит я в сотнетысячный раз оказался прав, но я привык) |
Цитата:
P.s. грубить не надо, вы меня не знаете, чтобы делать выводы, чего я могу, а чего нет, но одно я знаю точно, если вы чего та не умеете, это не значит что никто этого не умеет и не знает. |
Цитата:
Цитата:
Цитата:
Почитай мне на webGL 2+4 и покажи код, звездун. Цитата:
А я не дурак я профессор между прочим |
Цитата:
Дальнейшее общение считаю бессмысленным. Adiós |
webgame,
> Поcчитай мне на webGL 2+4 и покажи код. > Профессор) Ха-ха) я уже почитал в других топиках как ты общаешься с людьми, поверь - ты даже близко не гений, как себя считаешь! У меня создалось ощущение что ты просто школота с завышенным самомнением. Дальнейшее общение считаю бессмысленным. Adiós https://ru.wikipedia.org/wiki/Ad_hominem хахаха, разоблачили звездабола |
Цитата:
|
Цитата:
|
Цитата:
раунд! |
Mаxmaxmаximus, webgame, товарищи школьники, не засоряйте эту интересную тему своим срачем. Вы можете продолжить вашу бесконечно интересную беседу в личке.
|
Цитата:
|
Цитата:
Сорри за разборки, просто не могу сдержаться, когда меня засыпают в личку матом, а тут постят тупые картинки, и берут на слабо. Любому человеку, знающему хотя бы основы opengl будет достаточно моего описания алгоритма, более того даже такого тупого вопроса не возникнет, поскольку генерация ланшафта, динамики волн водной поверхности, скелетная анимация и тп вещи генерируемые фрагментным шейдеров в FBO/R2VO это основы, зачем человек не знающий этого и вообще основ работы шейдеров, спорит со мной, мне не понятно... |
Цитата:
|
По пунктам
1) Я естственно знаю про физикс хавок и все такое прочее 2) На ГПУ не делаются физические движки 3) физикс это двигло от нвидии обрадающее аппаратным усоркнием, при чем тут то что школьник говорит что на webGL собрался физику считать?? 4) при чем тут аппаратное ускорение физики от nvidia и webGL карл? У Тебя нуливые знания в этой сфере и в пунктах выше я это доказал. Так что понял свою неправоту и мою правоту? |
webgame, ну давай, звездун, вот банально, нам нужно посчитать пересекаются ли aabb двух фигур. Как ты это сделаешь на webGL? Пришли код. Нет ни одной причины не прислать код кроме того что ты ЗВЕЗДАбол.
Я уже читаю отмазы несколько сраниц) ТЫ АВТОМАТИЧЕСКИ ИМЕЕШЬ СТАТУС ЗВЕЗДАБОЛА пока не пришлешь код где доказываешь свои фантазии. А по скольку ты не то что НЕ ХОЧЕШЬ, а именно НЕ МОЖЕШЬ этого сделать, то конечно же ты этого НЕ ПРИШЛЕШЬ, иждать это бессмысленно по этому я просто официально нарекаю тебя ЗВЕЗДАболом и прекращаю разговор. Я доказал что я прав и что ты не прав. |
Цитата:
Только это ты и доказал в очередной раз :lol: |
Часовой пояс GMT +3, время: 04:04. |