ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
1072583 Топик полностью
Adept (27.01.2021 13:46 - 15:50, просмотров: 512) ответил Adept на прикинул, добавив контроль границ массива, но не реализовывая досрочное завершение, которое у меня тоже в комментах. Поздравляю, коллега - 7 тактов на байт в функции "приведения к 256" Вашим методом, и потом 9 тактов на байт при поиске максимума в массиве 256 байт (моим алгоритмом) - от 9 до 2304 тактов (смотря где встретится максимум в первой или последней попытке)
Пока, ПО РЕЗУЛЬТАТАМ: лучшее 3,5 / 7,5 тактов на байт (первое - для алгоритма максимальной скорости, второе - для алгоритма максимальной компактности), при условии массива 2K рандомных значений, уже размещённых в памяти (ну чтобы хоть как-то стандартизировать условия) 

Считаем исходным условием наличие в памяти массива рандомных байт размером в 2K

что на реальной xmega@32MHz 8,76 / 4,07МБайт/с [по формуле Fclc/clocks/1024/1024 ], где "Fclc" тактовая частота ядра в герцах, "clocks" - производительность алгоритма в тактах на байт (АВР в условии задачи, но давайте и для других камней, интересно :)


RESULT: (правда не Си, а Ассемблер, но для Си всегда оставляем возможность проявить cебя (можно дописать ниже -значения полученные для максимально быстрого алгоритма на Си :))

- максимально быстрым пока можно считать 3,5 тактов на байт (с учётом некоторых условий, как то требование размещения в алресном пространстве кратно 256 байтам ) (компактный циклический алгоритм с "приведением к 256" и "растяжкой" цикла на 256 операций копирования)

- максимально красивым и компактным, т.е. близким к оптимальному в соотношении цена(размер)/качество 7,5 тактов на байт (компактный циклический алгоритм с "приведением к 256" и байтовым копированием в цикле)


P.S. включаемся в аукцион, господа Ымбеддеры :)) "кто больше" в смысле "лучше" :))

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