![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 05.05.2018
Сообщений: 94
|
![]()
Ув. Kronos913! Мне очень импонирует Ваше стремление овладевать новыми знаниями (в данном случае ASM). Однако, рискну высказать своё, сугубо личное и, вероятно, ошибочное, суждение.
В настоящее время в программировании превалирует тенденция к универсализации кода (насколько это возможно): попытки сделать код, который с помощью различных ухищрений сможет работать и в Windows, и в MacOs, и на линуксе. Ассемблерные вставки полностью исключают такую возможность, т.к. даже в Windows на машинах с разной архитектурой, скажем так - ассемблерный код не всегда будут вести себя адекватно. Стоит ли изучение ASM затраченного времени? |
![]() |
![]() |
![]() |
#12 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
northener
Цитата:
Kronos913 Никакого не слушай те делайте. К примеру Graphica32 быстрая потому что написана на ассемблере. Что касается быстрого поворота на 90°. То секрет в блочном алгоритме изображение разбиваем на блоки по 8х8 байт. Загоням в регистры xmm. Внутри блока поворот без использования указателей или индексов, а чисто сдвигами и командами уакеовки. Плюс кэш процессора работает более оптимально. А блоки разворачиваем при помощи индексов i,j. Загнать их в регистры esi,edi так что снизим частоту обращения к памяти. Цитата:
![]()
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
![]() |
![]() |
![]() |
#13 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]() Цитата:
Т.е. главное это умение составить наилучший алгоритм. |
|
![]() |
![]() |
![]() |
#14 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,427
|
![]() Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 28.06.2021 в 01:35. |
![]() |
![]() |
![]() |
#15 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Да и нет. Ассемблер даёт ряд преимуществ. Это SIMD распаролеливание по данным 1 машинная инструкция выполняет работа над несколькими данными. Чем больше регистр тем больше в нем пикселей тем быстрее работает код. Типичный пример полупрозрачные наложение(блендинг) .
По мимо SIMD современные процессоры используют MIMD как только освободился 1 каскад в конвейре блоке умножения можно засылать следующие данные. Что дает ускорения в 2 или 4 раз. Если мы пишим на Delphi то он использует базовый набор инструкций и не использует расширения mmx, see, avx. Это дает ускорение в разы 2,4,8,16. А базовый набор тем плох что там команды плохо спариваются. Т.е их нельзя запустить по конвейерной схеме пока предыдущая не выдаст результат. Сейчас в процессорах развито опережающее исполнение(спекулятивное). Оно частично решает эту проблему. Чисто за счёт распаролеливания имеем ускорение в 32 раза Так как на ассемблер вам доступно больше регистров чем на Delphi то можно указатели и счётчики разложить по ним более оптимально чем это делает компилятор. Снизив обращения к памяти. Обращение к памяти это от 4 до 100 тактов. А вот алгоретмически тоже важно. К примеру в брендинге экспоненты были заменены умножением и никто разницы и незаметил. Или частый прием заменить умножение сложением. При обращении к массиву у вас происходит вычисление адресса. При этом используется неявое, скрытое умножение. Вот BDA так и сделал. Получил ускорение в 2 раза. Правда тут ещё эффект синергии. Ушли лишние конструкции высвободились регистры. Вот и ускорение в 2 раза. Блочный алгоритм снижает число обращений к памяти. Когда мы пишем mov eax, data и pmov mmx1, data мы читаем в первом случае 4 байта во втором уже 8. Чем большими регистры тем меньше обращений к кэш памяти тем быстрее код. И в блочном алгоритмк обращения сосредоточены по адресам. Что даёт ускорение правда тут трудно оценить насколько. Если делать обход по диагонали то это даст ещё процентов 30% ускорения может больше.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 28.06.2021 в 08:21. |
![]() |
![]() |
![]() |
#16 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]() |
![]() |
![]() |
![]() |
#17 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]() Цитата:
http://sysbin.com/files/hard/mmxbook.zip Delphi делает не очень эффективный код, так как не использует mmx и see. Это вот с компиляторами Си соревноваться трудно так как они умеет использовать SIMD. Хотя примеров когда ручная оптимизации выигрывает компилятор вагон и маленькая тележка: К примеру тут человек без подготовки справился: https://m.habr.com/ru/post/273109/ Или кодеки ffmpeg там сплошь ассемблер. А топы развликаются решением конкурсных задач от Zimmermann'а. http://azspcs.com/ там ради скорости пишут на ассемблере. До сентября можно успеть выучить ассемблер и подать своё решение очередной задачи.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 29.06.2021 в 07:35. |
|
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 684
|
![]() Код:
|
![]() |
![]() |
![]() |
#19 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
А то что вы привели разве это что-то другое?
|
![]() |
![]() |
![]() |
#20 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
![]()
Надо запустить проект под отладчиком. Ставишь бряк в нужном месте Alt+F8 запускаешь код F9. Затем открываем окно с дизассемблером Ctrl+shift+C или через меню view-> debug windows -> cpu.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 01.07.2021 в 07:39. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Несколько вопросов | Rost93 | PHP | 18 | 19.09.2012 19:38 |
Несколько вопросов | shrek1993 | Visual C++ | 3 | 05.08.2012 18:53 |
несколько вопросов по C | Horus92 | Общие вопросы C/C++ | 2 | 15.11.2009 16:08 |
несколько вопросов | fitc | Общие вопросы Delphi | 28 | 14.07.2009 21:20 |
Несколько Вопросов | Дорст | Общие вопросы Delphi | 3 | 12.11.2007 09:18 |