ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1072911 Топик полностью
Adept (29.01.2021 01:16, просмотров: 458) ответил LightElf на Я, кагбэ, не знал забыл ассемблер AVR, но что-то больно удивительно, что пара чтение/запись выполняется быстрее, чем пара чтение/сравнение. Ну и специально подготовленные условия (массив выровнен на 256 байт) - читерство чистой воды :)
дело в том, что не пара чтение/сравнение, а цикл: чтение/сравнение/запись/переход по условию а в "приведении к 256" чтение/запись включает в себя "скрытое сравнение", т.к. потом, в результирующем массиве 256байт 

просто сверху ищем не ноль, который и будет значением максимума,

выравнивание массива по 256 - это оптимизация кода, которое позволяет упростить сравнение на выходе и получить несколько процентов. Аналогично и разворачивание цикла в линейный код 256 операций и таким образом движение по циклам блокам по 256 - тоже оптимизация кода по скорости исполнения, но позволяющая получить уже 2-х кратный выйгрыш в скорости относительно одной операции в цикле. Хотите называйте читерством, хотите - допингом, но это работает :) В итоге получаем беспрецедентно высокую скорость поиска максимума в памяти - порядка 3-х тактов на байт :) прокрутите прилагаемый код в отладчике - убедитесь :))

http://caxapa.ru/1072613/

ничего волшебного там нет, но решение действительно неожиданное и достаточно стройное :)

достаточно просто пройтись по комментам, даже не вникая в смыслы команд (хотя и там "всё просто, как ситцевые трусы" (С) ) там всё достаточно подробно описано и не вызывает трудности в понимании (ассемблер действительно не только эффективная , но и очень простая штука :)))

...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)