Показать сообщение отдельно
  #4 (permalink)  
Старый 26.07.2022, 13:00
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 112

Clamped сложение/вычитание/сравнение - только предстоит брать!
Сообщение от Aetae Посмотреть сообщение
1. У меня на машине ничего не тормозит.
Очeнь интересный момент!
У меня в Chromium под Raspbian 600MHz (лето: частоту занизил до плинтуса) линия на весь Canvas подвешивает браузер на 15-25 секунд и периодически выскакивает окошко с вопросом о принудительном завершении сценария!
(Скрипт отлаживать в таких жарких и тормозных условиях чудовищно сложно.)
Сообщение от Aetae Посмотреть сообщение
4. Скорее всего проблемы с производительностью и вовсе не в вызовах или математике, а во взаимодействии с браузерным api - тем же canvas например, но не поручусь - включите профалер в инструментах браузера и найдите что именно вызывает у вас тормоза, туда и смотрите.
Мой промах: Вы правы!
Стоило в листинге даже закомментировать «.canvas rax» - всё залетало!
Ещё притормаживает функция записи в журнал каждого снимка состояния регистров, которая к тому же безобразно написана: Два цикла с push'ами строк в массив. Но не так сильно, как ожидалось…
Всё же Canvas.toDataURL чудовищно просаживает всю производительность!
Буду искать другой метод: Не делать снимки всего Canvas, а просто сохранять координаты, куда ставить точки. Но это усложнит верхний уровень - реакция на «ползунок времени», где вместо простого вывода спрайта нужно будет пиксели стирать-ставить…
Сообщение от voraa Посмотреть сообщение
Вам уже не раз писали, что BigInt не имеет никакого отношения к 64 разрядным целым числам. Это вообще многобайтное (столько, сколько нужно) представление числа. Там может быть и 16 бит, и 64, и 128, и 1024...
Да, я это уже понял, когда потрудился не действовать методом интуитивного тыка, а вчитаться в спецификацию.
Хорошая фишка этот BigInt!

Для AVX нужно уметь работать с 512 битным словом, да ещё и упакованным.
Если сложение/вычитание ещё работает с упакованными данными по описанному мною трюку с масками выше, то сравнение и сложение/вычитание с насыщением (аналог Uint8ClampedArray) - очень сложная тема и как там с масками трюкачить - пока не понятно.
Сообщение от voraa Посмотреть сообщение
Операция вила n = n|0n для BigInt вообще не имеет никакого смысла. Число никак не изменяется.
Обычная операция для Number n = n|0 переводит в число в целое, отбрасывая дробную часть, и ограничивает целую часть 32 разрядами. Но BigInt и так целые, и разряды у них не ограничиваются.
Придётся мне непосредственно методом тыка действовать и изучать реакцию браузера!
Ответить с цитированием