-
- Средний ПК ищет максимальное за Tpoeшник(310 знак., 10.02.2021 15:14)
- С каких пор ХМега на 64МГц работает? Она же всегда на 32МГц
работала? - Ale3000(12.02.2021 08:00)
- Работает, разгоняют. - Tpoeшник(12.02.2021 09:34)
- Вопрос от пиковода. Эти ваши 64 МГц - частота генератора или
количество команд в секунду? - Kpoк(12.02.2021 10:57)
- Я так понимаю что если команда выполняется за один такт, то 64млн в
сек команд. - Tpoeшник(12.02.2021 13:02)
- Вот это "если" смущает. А сколько тактов вообще занимают команды
как правило? - Kpoк(12.02.2021 13:16)
- Большинство команд исполняется за 1 такт, иногда за 2 и несколько за 3 и единицы за 4 :)) ещё зависит от семейства: На "иксмегах", к примеру, некотрые инструкции выполняются быстее, чем на "мегах" или "тайнях". - Adept(12.02.2021 13:31, ссылка)
- все кроме команд ветвления и аппаратного умножения выполняются за
один такт, переходы могут занимать и 4 такта )) - Aleksey_75(12.02.2021 13:20)
- Ну не только. Некоторые косвенные обращения к памяти через X, Y, Z
требуют два такта - LightElf(12.02.2021 13:26)
- это детали. Главное, что в основном по 1 такту. Быстрее, чем ПИКи,
мля. - Kpoк(12.02.2021 13:41)
- в этом плане AVR вне конкуренции - Aleksey_75(12.02.2021 13:49)
- угу! - Aleksey_75(12.02.2021 13:26)
- это детали. Главное, что в основном по 1 такту. Быстрее, чем ПИКи,
мля. - Kpoк(12.02.2021 13:41)
- Ну не только. Некоторые косвенные обращения к памяти через X, Y, Z
требуют два такта - LightElf(12.02.2021 13:26)
- Вот это "если" смущает. А сколько тактов вообще занимают команды
как правило? - Kpoк(12.02.2021 13:16)
- Я так понимаю что если команда выполняется за один такт, то 64млн в
сек команд. - Tpoeшник(12.02.2021 13:02)
- Если разгонять можно, берите толстую плисину и накатывайте корку,
вот тут клевущут ~300 МГц >>> SciFi(77 знак., 12.02.2021 09:54, ссылка)
- Что интересно, ядро SH2 всего вдвое толще AVR. - LightElf(12.02.2021 11:35)
- Дык Троешнику давно намякивают, что он не на ту клячу поставил :-) - SciFi(12.02.2021 11:36)
- Для Троешника есть совсем няшная цацка - LightElf(12.02.2021 11:52, ссылка)
- Кнута раскулачили? - Kpoк(12.02.2021 14:14)
- теперь дайте к нему конпелятор! - Mahagam(12.02.2021 13:35)
- Там ассемблер есть. Писать несложно должно быть - всего 4 команды у
процессора. - LightElf(12.02.2021 14:05)
- даже у брейнфака команд побольше будет. несложно, ага. - Mahagam(12.02.2021 14:46)
- Там ассемблер есть. Писать несложно должно быть - всего 4 команды у
процессора. - LightElf(12.02.2021 14:05)
- Спасибо. Ничего не понятно, но документ конфетка. Шрифты, отступы,
ммм - Tpoeшник(12.02.2021 12:00)
- Это заначка на случай ядерной войны. Как сделать проц на
транзисторах КТ315. - SciFi(12.02.2021 12:02)
- Done. Можешь начинать изучать - Evgeny_CD(12.02.2021 12:32, ссылка)
- Где-то в начке валяется MAX7064S, можно попробовать упихать :) - LightElf(12.02.2021 12:06)
- Это заначка на случай ядерной войны. Как сделать проц на
транзисторах КТ315. - SciFi(12.02.2021 12:02)
- Для Троешника есть совсем няшная цацка - LightElf(12.02.2021 11:52, ссылка)
- Дык Троешнику давно намякивают, что он не на ту клячу поставил :-) - SciFi(12.02.2021 11:36)
- Что интересно, ядро SH2 всего вдвое толще AVR. - LightElf(12.02.2021 11:35)
- внешним тактом? - m16(12.02.2021 09:41)
- Я не разбираюсь в этом вопросе. Знаю что работает - Tpoeшник(12.02.2021 10:28, ссылка)
- Вопрос от пиковода. Эти ваши 64 МГц - частота генератора или
количество команд в секунду? - Kpoк(12.02.2021 10:57)
- Работает, разгоняют. - Tpoeшник(12.02.2021 09:34)
- Я правильно понимаю, чт АВР выполняет операцию
выборки-сравнения-замены-инкремета адреса быстрее чем за одну
команду? Код в студию! - Kpoк(11.02.2021 09:11)
- вот :) --> - Adept(11.02.2021 13:27, ссылка)
- Три команды вроде как. На 64Мhz это быстро. 46ms - 1млн записей - Tpoeшник(11.02.2021 10:59)
- Кто разучился считать? - SciFi(11.02.2021 11:05)
- Вероятно я? А как нужно? Tpoeшник(170 знак., 11.02.2021 11:19)
- По большому счёту, какая разница? Но когда считаете деньги, делайте
это тщательно. - SciFi(11.02.2021 11:21)
- Разница? Для меня есть. Если три команды на один элемент то на 64
млн команд в секунду можно перелопатить 21млн с копейками. Или я не
правильно понимаю как соотносятся скорости и команды проца? Спс - Tpoeшник(11.02.2021 11:33)
- Это я торможу. Прошу пардону. - SciFi(11.02.2021 11:40)
- Тогда в качестве жеста справедливости подскажите как работает
команда std Tpoeшник(36 знак., 11.02.2021 11:50)
- std y+r17,r17 есть неверно m16(1 знак., 11.02.2021 12:04, картинка)
- Спасибо - Tpoeшник(11.02.2021 17:09)
- держи буку m16(11.02.2021 19:16, ссылка)
- Спасибо! Есть такая в бумажном виде. - Tpoeшник(11.02.2021 22:59)
- держи буку m16(11.02.2021 19:16, ссылка)
- Спасибо - Tpoeшник(11.02.2021 17:09)
- std y+r17,r17 есть неверно m16(1 знак., 11.02.2021 12:04, картинка)
- Тогда в качестве жеста справедливости подскажите как работает
команда std Tpoeшник(36 знак., 11.02.2021 11:50)
- Это я торможу. Прошу пардону. - SciFi(11.02.2021 11:40)
- Разница? Для меня есть. Если три команды на один элемент то на 64
млн команд в секунду можно перелопатить 21млн с копейками. Или я не
правильно понимаю как соотносятся скорости и команды проца? Спс - Tpoeшник(11.02.2021 11:33)
- По большому счёту, какая разница? Но когда считаете деньги, делайте
это тщательно. - SciFi(11.02.2021 11:21)
- Вероятно я? А как нужно? Tpoeшник(170 знак., 11.02.2021 11:19)
- Кто разучился считать? - SciFi(11.02.2021 11:05)
- У меня скриптовый язык считает в 4 раза быстрее вашего "среднего
ПК" 1000000@0.644775ms - lloyd(10.02.2021 20:34, ссылка)
- Код с SSE работает примерно в 1000 раз быстрее LuaJIT - lloyd(10.02.2021 21:46, ссылка)
- Я не понимаю. Напишите сколько ПК тратит на 1млн значений в массиве
в ms ну или us. 0.644775ms? Спасибо - Tpoeшник(10.02.2021 23:03)
- С SSE4.1 он потратил на это 0.6 мкс. Суть в использовании SIMD
инструкций, которые находят 16 максимумов за раз. - lloyd(11.02.2021 06:29)
- Там сразу вынимает 16 байт, и 16 компараторов сравнивают их с 16
опорами? - Kpoк(11.02.2021 10:24)
- ага. SIMD давно умеет в 128 бит. очень давно - Mahagam(11.02.2021 14:57)
- 0,6 мкс на 1000000 значений? Это 0,6 пс на одно значение? У меня 2
вопроса: как я проспал терагерцы и какая там скорость памяти? - SciFi(11.02.2021 07:31)
- +1 - Tpoeшник(11.02.2021 09:20)
- Вообще может я и накосячил в коде, надо внимательнее глянуть. Но
вообще весь мегабайт строки прекрасно помещается в кеш процессора
(запускалось на intel xeon) - lloyd(11.02.2021 08:10)
- для работы из кеша вообще какой-то нереальный тормоз :( - Adept(11.02.2021 15:41)
- запускалось в виртуалке, вот - lloyd(11.02.2021 17:35)
- для работы из кеша вообще какой-то нереальный тормоз :( - Adept(11.02.2021 15:41)
- Там сразу вынимает 16 байт, и 16 компараторов сравнивают их с 16
опорами? - Kpoк(11.02.2021 10:24)
- С SSE4.1 он потратил на это 0.6 мкс. Суть в использовании SIMD
инструкций, которые находят 16 максимумов за раз. - lloyd(11.02.2021 06:29)
- Я не понимаю. Напишите сколько ПК тратит на 1млн значений в массиве
в ms ну или us. 0.644775ms? Спасибо - Tpoeшник(10.02.2021 23:03)
- Код с SSE работает примерно в 1000 раз быстрее LuaJIT - lloyd(10.02.2021 21:46, ссылка)
- Какой-то шибко медленный ПК. Код можно увидеть? - LightElf(10.02.2021 17:43)
- Можно Tpoeшник(428 знак., 10.02.2021 20:29 - 20:39)
- А на асме вылизать? - LightElf(11.02.2021 17:47)
- для этого есть специально обученный компилятор - Mahagam(11.02.2021 21:54)
- Если вот здесь смотреть то результаты совсем плохие. Но из консоли
с установленной средой данные выше приводил. - Tpoeшник(10.02.2021 20:30, ссылка)
- Там же можно сишник запускать. - SciFi(10.02.2021 20:41)
- Да, но все плохо. Ну или я не понимаю. Tpoeшник(1 знак., 10.02.2021 20:53, картинка)
- Ну так измерения делают на больших кусках, чтобы краевые эффекты не
мешали. - SciFi(10.02.2021 20:56)
- 0.004242 на чистом 1000000 - Tpoeшник(10.02.2021 20:58)
- или вот >>> - SciFi(10.02.2021 21:17, ссылка)
- 0.004242 на чистом 1000000 - Tpoeшник(10.02.2021 20:58)
- Ну так измерения делают на больших кусках, чтобы краевые эффекты не
мешали. - SciFi(10.02.2021 20:56)
- Да, но все плохо. Ну или я не понимаю. Tpoeшник(1 знак., 10.02.2021 20:53, картинка)
- жабаскрипт понад усе :-) - SciFi(10.02.2021 20:40)
- Там же можно сишник запускать. - SciFi(10.02.2021 20:41)
- А на асме вылизать? - LightElf(11.02.2021 17:47)
- Можно Tpoeшник(428 знак., 10.02.2021 20:29 - 20:39)
- да не так уж и плохо :) берём блок 2K (именно столько есть
свободного в достатке у иксмеги) исходим из скорострельности
алгоритма 3 такта и клока 32МГц (штатно для иксмеги) =
2048*(3/32e6)=192мкс супротив 69мкс на ПК, т.е. соотношение 1:3 в
пользу ПК при разнице клоков 1:100 (@3GHz в однопотоке) /про разницу в энергопотреблении и не говорю/ :)) Adept(186 знак., 10.02.2021 17:01, ссылка)
- а где вы такой медленный x86 нашли?? - Mahagam(10.02.2021 17:38)
- ТС выше пишет: - "Средний ПК ищет максимальное за... 2000 - 0.067001ms" - Adept(10.02.2021 17:43)
- а цифры откуда взяты? а код под этот поиск также оптимизирован? Mahagam(1 знак., 10.02.2021 17:49, картинка)
- ТС выше пишет: - "Средний ПК ищет максимальное за... 2000 - 0.067001ms" - Adept(10.02.2021 17:43)
- а где вы такой медленный x86 нашли?? - Mahagam(10.02.2021 17:38)
- С каких пор ХМега на 64МГц работает? Она же всегда на 32МГц
работала? - Ale3000(12.02.2021 08:00)
- Есть вариантец побыстрее. Обещаете не смеяться? - Tpoeшник(02.02.2021 16:26)
- ну и где же он? (если конечно не разворачивать цикл в линию) - Adept(02.02.2021 18:09)
- Сразу говорю: вариант так себе, но почему нет!? Tpoeшник(1018 знак., 02.02.2021 18:35)
- А почему АЦП? У таймера тоже есть сравнение. - m9rs(03.02.2021 09:08)
- Да, и я с ним попробовал. Забавная штука. Но сравнение там только
на равенство! - Tpoeшник(03.02.2021 09:27)
- А если использовать режим PWM? - m9rs(03.02.2021 12:13)
- Все что с таймерами только "равно" ловит я так понял. - Tpoeшник(03.02.2021 12:15)
- таймер в режиме PWM настроен на вывод в ножку, на ней же
прерывание, таймер не тактируется (остановлен), в сам таймер
грузите свой байт а в регистр сравнения максимальное найденное
значение, которое по прерыванию на ножке перезаписывается. - m9rs(03.02.2021 20:03)
- неа. если в таймер загрузить число 100. а в регистре сравнения 50 - прерывания/реакции не будет - Tpoeшник(03.02.2021 20:17)
- таймер в режиме PWM настроен на вывод в ножку, на ней же
прерывание, таймер не тактируется (остановлен), в сам таймер
грузите свой байт а в регистр сравнения максимальное найденное
значение, которое по прерыванию на ножке перезаписывается. - m9rs(03.02.2021 20:03)
- Все что с таймерами только "равно" ловит я так понял. - Tpoeшник(03.02.2021 12:15)
- А если использовать режим PWM? - m9rs(03.02.2021 12:13)
- Да, и я с ним попробовал. Забавная штука. Но сравнение там только
на равенство! - Tpoeшник(03.02.2021 09:27)
- Если читерствовать с новыми ATMega то тогда лучше обратить внимание на блок CCL. - Boвa(02.02.2021 23:41)
- чего мелочиться, бери уже ПЛИСину скоростную, заливай авр ядро,
допиливай блок сравнения, а там и до параллельных процессов
недалеко и конвейера... после реализации, глядишь попадешь в группу
разрабов эльбруса или байкала. все возможно. - klown1(02.02.2021 20:13)
- Я написал что-то не то!? Это глупость? Это медленно? Это не будет
работать? - Tpoeшник(02.02.2021 20:15)
- не твой путь ? klown1(484 знак., 03.02.2021 13:11, ссылка)
- Спасибо. Тема с fpga очень интересная. Но это нужно применительно к чему то заниматься. Всегда цифровая логика нравилась. Tpoeшник(185 знак., 03.02.2021 13:25)
- ну почему, очень даже креативненько. Может и работать будет. Но раз
мысль пошла в область аппаратных вычислителей, то плисина с авр
ядром будет в самый раз (если так важно сохранить авр ядро). Речь
же о самой быстрой реализации на условно бесконечном массиве
(потоке данных). Аппаратная реализация вероятно самая быстрая
получится. А так-то молодец, продолжай рыть и не принимай близко к
сердцу критику или подколы.
Это от безделия- klown1(02.02.2021 20:47)
- не твой путь ? klown1(484 знак., 03.02.2021 13:11, ссылка)
- Я написал что-то не то!? Это глупость? Это медленно? Это не будет
работать? - Tpoeшник(02.02.2021 20:15)
- Есть ЦАП и АЦП? Г-но вопрос! Лепим снаружи аналоговый пиковый
детектор, прогоняем через него сигнал в аналоге и находим наш
максимум. - SciFi(02.02.2021 18:39)
- сэмплрейт ихсмеги 2MSPS для АЦПи 1MSPS для ЦАП, но сократить циклы
до 8 байт и тогда только на IO DAC/ADC сравняемся с самым быстрым
алгоритмическим решением, а ведь ещё надо эти данные счесть из
памяти, (ну чтобы вывести в ЦАП/АЦП) имхо, утопия какая-то) - Adept(02.02.2021 18:48)
- Да нет, вы не поняли! Я выгружаю данные в регистр процессора. Все.
По очереди. Больше ничего не делаю с данными. Но если прерывание -
обрабатываю значение которое больше текущего максимума. В ситуации
когда значений в массиве миллиард, я попаду в прерывание максимум
255 раз. Все остальные переборы по одному такту процессора
например. Ну или больше, плохо понимаю как в тактах оценить - Tpoeшник(02.02.2021 19:04)
- откуда выгружаете данные и с какого перепугу должно сработать
какое-то прерывание?? Если имеете ввиду регистры АЦП/ЦАП, то всё
равно аппаратно всё ограничено возможным сэмплрейтом. Adept(111 знак., 02.02.2021 19:13)
- АЦП используется не сами по себе а как блок внутри которого есть
цифровой компаратор. У этого компаратора есть свое прерывание ADC0
- Window Compare. Ну вот "идея" в том чтоб настроить блоки системы
так что из исследуемого массива я подаю байты в регистры WINHT,
аппаратно сравниваю с регистром RES и жду "ADC0 - Window Compare".
В самом прерывании обновляю текущим максимальным регистр RES Tpoeшник(83 знак., 02.02.2021 19:42)
- есть запись данных в IO регистр, есть чтение этих данных их памяти,
есть время обработки прперывания (вход/выход) = гораздо больше трёх
тактов на байт. В чём смысл (ну разве что поиграться с оригинальной
идеей :)) ??? - Adept(02.02.2021 23:02)
- Да черт с ней с идеей! Тут о деньгах поговаривали!? А когда речь
идет о деньгах то я страшный человек.. Tpoeшник(359 знак., 02.02.2021 23:20)
- Код получится примерно такой ... Те же 3 такта на байт при чтении
из внутренней РАМ. Boвa(84 знак., 03.02.2021 00:48)
- Почему 3? А разве st может так? Tpoeшник(37 знак., 06.02.2021 20:11)
- В варианте о котором вы говорите есть проблема с 0xff. Без проверки
на максимальное значение алгоритм принципиально обречен. - Tpoeшник(03.02.2021 02:07)
- Запись в регистр сравнения референсного значения - 16-битная (т.е.
медленная, в два приёма), и ещё возможно ошибаюсь, но мне кажется,
что вся периферия АЦП завязана на тактовую систему АЦП (по крайней
мере я бы так поступил наверное (было бы легче реализовать
аппаратуру). Так что вариант действительно "так себе", но за
пытливый умшаловливые ручки - респект :)) Adept(314 знак., 03.02.2021 09:59)- Почему? Я пишу младшее значение, а проц в этот момент пишет пару и младший и старший. Да и пусть. А вот что касается прерывания и его сдвига во времени относительно самого сравнения, то здесь как раз и вся красота. А и ничего страшного что прерывание запоздает, мне не важно. Главное получить факт что текущее больше чем в RES! Потом без спешки разбор, обновление RES и снова поиск. Если нужно то после прерывания с индексом -5 например можно начать:) - Tpoeшник(03.02.2021 12:20)
- Запись в регистр сравнения референсного значения - 16-битная (т.е.
медленная, в два приёма), и ещё возможно ошибаюсь, но мне кажется,
что вся периферия АЦП завязана на тактовую систему АЦП (по крайней
мере я бы так поступил наверное (было бы легче реализовать
аппаратуру). Так что вариант действительно "так себе", но за
- Код получится примерно такой ... Те же 3 такта на байт при чтении
из внутренней РАМ. Boвa(84 знак., 03.02.2021 00:48)
- Да черт с ней с идеей! Тут о деньгах поговаривали!? А когда речь
идет о деньгах то я страшный человек.. Tpoeшник(359 знак., 02.02.2021 23:20)
- Как только не извращаются, лишь бы на рассыпухе не собрать - lloyd(02.02.2021 20:03)
- есть запись данных в IO регистр, есть чтение этих данных их памяти,
есть время обработки прперывания (вход/выход) = гораздо больше трёх
тактов на байт. В чём смысл (ну разве что поиграться с оригинальной
идеей :)) ??? - Adept(02.02.2021 23:02)
- АЦП используется не сами по себе а как блок внутри которого есть
цифровой компаратор. У этого компаратора есть свое прерывание ADC0
- Window Compare. Ну вот "идея" в том чтоб настроить блоки системы
так что из исследуемого массива я подаю байты в регистры WINHT,
аппаратно сравниваю с регистром RES и жду "ADC0 - Window Compare".
В самом прерывании обновляю текущим максимальным регистр RES Tpoeшник(83 знак., 02.02.2021 19:42)
- откуда выгружаете данные и с какого перепугу должно сработать
какое-то прерывание?? Если имеете ввиду регистры АЦП/ЦАП, то всё
равно аппаратно всё ограничено возможным сэмплрейтом. Adept(111 знак., 02.02.2021 19:13)
- Да нет, вы не поняли! Я выгружаю данные в регистр процессора. Все.
По очереди. Больше ничего не делаю с данными. Но если прерывание -
обрабатываю значение которое больше текущего максимума. В ситуации
когда значений в массиве миллиард, я попаду в прерывание максимум
255 раз. Все остальные переборы по одному такту процессора
например. Ну или больше, плохо понимаю как в тактах оценить - Tpoeшник(02.02.2021 19:04)
- АЦП и ЦАП использую только для того чтоб воспользоваться цифровым компаратором. Я не знаю, может есть еще другая возможность сравнить два значения аппаратно в меге!? Я сильно рассчитывал на регистры сравнения из блоков таймера, но там только на равенство. Много всего интересного получилось кстати, но не по теме) - Tpoeшник(02.02.2021 18:44)
- сэмплрейт ихсмеги 2MSPS для АЦПи 1MSPS для ЦАП, но сократить циклы
до 8 байт и тогда только на IO DAC/ADC сравняемся с самым быстрым
алгоритмическим решением, а ведь ещё надо эти данные счесть из
памяти, (ну чтобы вывести в ЦАП/АЦП) имхо, утопия какая-то) - Adept(02.02.2021 18:48)
- А почему АЦП? У таймера тоже есть сравнение. - m9rs(03.02.2021 09:08)
- Сразу говорю: вариант так себе, но почему нет!? Tpoeшник(1018 знак., 02.02.2021 18:35)
- ну и где же он? (если конечно не разворачивать цикл в линию) - Adept(02.02.2021 18:09)
- кто бы мог подумать, что в результате придём к скорострельности 3,5 такта на байт ?:))) Adept(368 знак., 27.01.2021 20:11, ссылка)
- по 3 и 4 хорошо бы подключить мат. анализ и стат.анализ ну и теорию
вероятности например. Искать не перебором сверху вниз или наоборот,
а допустим от центра в обе стороны и каждый участок с двух сторон
навстречу друг другу. klown1(557 знак., 27.01.2021 21:34)
- п.с. klown1(369 знак., 27.01.2021 21:39)
- вы не поняли,
это другоетам основной массив обрабатывается методом "приведения к 256", а уже на результирующем маленьком массиве перебираем сверху вниз, пока не встретится значащий, а не нулевой байт со значением максимума. Все ухищрённые методы анализа и перебора будут в разы проигрывать прямому перебору при обработке такого маленького массива в 256 байт - Adept(27.01.2021 21:50)- Честно говоря, совсем не очевидно что "приведение к 256" чем-то
лучше прямого поиска - LightElf(28.01.2021 20:29)
- гораздо быстрее (3 такта на байт данных) - Adept(28.01.2021 21:49)
- Я, кагбэ,
не зналзабыл ассемблер AVR, но что-то больно удивительно, что пара чтение/запись выполняется быстрее, чем пара чтение/сравнение. Ну и специально подготовленные условия (массив выровнен на 256 байт) - читерство чистой воды :) - LightElf(29.01.2021 00:31)- дело в том, что не пара чтение/сравнение, а цикл:
чтение/сравнение/запись/переход по условию а в "приведении к 256"
чтение/запись включает в себя "скрытое сравнение", т.к. потом, в
результирующем массиве 256байт Adept(1047 знак., 29.01.2021 01:16, ссылка)
- Просто я XMEGA не застал, а во времена оны инструкция LightElf(204 знак., 29.01.2021 20:56)
- да, всё так. st - один такт, ld - два, всего три такта на операцию чтения-записи (а их в цикле 256
друг за дружкой, потом проверка условия выхода и опять в цикл. По
выходу - поиск ненулевого байта в результирующем массиве 256 байт.
в итоге в среднем 3,5 такта на байт при блоке данных 2к Adept(183 знак., 30.01.2021 00:54)
- Ну ещё не забудьте, что массив 256 байт надо обнулить перед
использованием, а цикл со сравнением можно и развернуть. - LightElf(30.01.2021 09:26)
- После использования, если его обнулять на этапе INIT. - ILYAUL(30.01.2021 09:44)
- Ну ещё не забудьте, что массив 256 байт надо обнулить перед
использованием, а цикл со сравнением можно и развернуть. - LightElf(30.01.2021 09:26)
- да, всё так. st - один такт, ld - два, всего три такта на операцию чтения-записи (а их в цикле 256
друг за дружкой, потом проверка условия выхода и опять в цикл. По
выходу - поиск ненулевого байта в результирующем массиве 256 байт.
в итоге в среднем 3,5 такта на байт при блоке данных 2к Adept(183 знак., 30.01.2021 00:54)
- А если массив 0xffff значений и встретим на первой итерации 0xff?
Получается что тогда такой алгоритм быстрее? Tpoeшник(64 знак., 29.01.2021 13:10)
- не занимайтесь шулерством :) по условию задачи - "поиск максимального числа в огромном массиве
char" :))) Adept(348 знак., 29.01.2021 13:40 - 13:43)
- Повторяю: меня абсолютно не интересует ничего кроме красоты языка
программирования. В данном случае Си. Но не только это. Сами
алгоритмы, мысли, идеи доставляют. Если в вашем случае нет проверки
на 0xff, то "мой" алгоритм может оказаться в тысячи раз быстрее.
Так не пойдет. - Tpoeшник(29.01.2021 13:42)
- описывайте корректно условие задачи и и будет Вам Щастье :)) ну и
допустим разницу в быстродействии Вы завысили в несколько десятков
раз :) не не суть - не нравится шагами по 256 байт - вариант с
побайтовым сравнением и 9 тактов на байт - (но таки как раз
предлагаемый алгоритм с приведением к 256 красив и эффективен
именно на больших массивах (в соответствии с условием задачи) Adept(203 знак., 29.01.2021 13:49)
- Почему завысил? Разница в скорости может достигнуть и миллионов
раз. Я на первой итерации выйду и распечатаю максимальное, а вы? К
условию задачи мне нечего добавить. Ну разве что напомнить что речь
шла о Си. Хотя я ничего против АСМ не имею, но код писать уже на
нем не буду никогда вероятно. - Tpoeшник(29.01.2021 13:53)
- ассемблер незаменим в эксклюзивных задачах достижения максимальной эффективности и компактности, но такие, к счастью , встречаются крайне редко, но они бывают, и камень "пожирнее" не всегда есть возможность выбрать (вот, к примеру у меня в одном проекте ATtiny10 стоит и другой не поставить по габаритам/стоимости :)) Adept(776 знак., 30.01.2021 01:07)
- Открой секрет получения "огромного массива" авром??? все остальное
онанизм!!! - Aleksey_75(29.01.2021 20:59)
- С внешнего параллельного АЦП, на пример.:-)) - Boвa(30.01.2021 09:56)
- Ну с этим проще. В таком случае сразу формируете массив 256 байт. - ILYAUL(30.01.2021 10:58)
- С внешнего параллельного АЦП, на пример.:-)) - Boвa(30.01.2021 09:56)
- Это при условии , что он 0хFF первый (повезло) , а если последний? И как уже было сказано , зачем городить огород с массивом 0xFFFF, если для Вашей задачи (найти максимум) при условии что вы же и получаете данные , вполне хватит 256 байт. Хоть на Си , хоть на asm. При этом свой 0xFF, Вы найдете с первого шага . - ILYAUL(29.01.2021 17:12)
- Почему завысил? Разница в скорости может достигнуть и миллионов
раз. Я на первой итерации выйду и распечатаю максимальное, а вы? К
условию задачи мне нечего добавить. Ну разве что напомнить что речь
шла о Си. Хотя я ничего против АСМ не имею, но код писать уже на
нем не буду никогда вероятно. - Tpoeшник(29.01.2021 13:53)
- Всё так. Совместить проверку на 255 с разворачиванием цикла. И волки сыты, и овцы целы. - SciFi(29.01.2021 13:48)
- описывайте корректно условие задачи и и будет Вам Щастье :)) ну и
допустим разницу в быстродействии Вы завысили в несколько десятков
раз :) не не суть - не нравится шагами по 256 байт - вариант с
побайтовым сравнением и 9 тактов на байт - (но таки как раз
предлагаемый алгоритм с приведением к 256 красив и эффективен
именно на больших массивах (в соответствии с условием задачи) Adept(203 знак., 29.01.2021 13:49)
- Повторяю: меня абсолютно не интересует ничего кроме красоты языка
программирования. В данном случае Си. Но не только это. Сами
алгоритмы, мысли, идеи доставляют. Если в вашем случае нет проверки
на 0xff, то "мой" алгоритм может оказаться в тысячи раз быстрее.
Так не пойдет. - Tpoeшник(29.01.2021 13:42)
- не занимайтесь шулерством :) по условию задачи - "поиск максимального числа в огромном массиве
char" :))) Adept(348 знак., 29.01.2021 13:40 - 13:43)
- Просто я XMEGA не застал, а во времена оны инструкция LightElf(204 знак., 29.01.2021 20:56)
- дело в том, что не пара чтение/сравнение, а цикл:
чтение/сравнение/запись/переход по условию а в "приведении к 256"
чтение/запись включает в себя "скрытое сравнение", т.к. потом, в
результирующем массиве 256байт Adept(1047 знак., 29.01.2021 01:16, ссылка)
- Я, кагбэ,
- гораздо быстрее (3 такта на байт данных) - Adept(28.01.2021 21:49)
- нуда, хороший вариант. А как насчет условия по уникальности
максимального значения, по условиям задачи оно единственное и
повторяться не может, так ? - klown1(27.01.2021 22:01)
- Да пусть оно хоть 1000 раз будет максимальное, надо найти его значение, а не количество - ILYAUL(27.01.2021 22:46)
- Честно говоря, совсем не очевидно что "приведение к 256" чем-то
лучше прямого поиска - LightElf(28.01.2021 20:29)
- вы не поняли,
- п.с. klown1(369 знак., 27.01.2021 21:39)
- Вот. А даже старая C66x DSP сделает 8 байт за такт (инструкция MAXU4 на юнитах L1 и L2) - lloyd(27.01.2021 20:35)
- по 3 и 4 хорошо бы подключить мат. анализ и стат.анализ ну и теорию
вероятности например. Искать не перебором сверху вниз или наоборот,
а допустим от центра в обе стороны и каждый участок с двух сторон
навстречу друг другу. klown1(557 знак., 27.01.2021 21:34)
- Единственный вариант хоть немного выиграть - убрать проверку for
(i=0;i<len;i++) на КАЖДОМ шаге сравнения. arhiv6(1279 знак., 27.01.2021 09:21, ссылка, ссылка)
- Такого я с свичами не делал.. Как это работает? Мы один раз в
функции find_max попадаем в switch (len % 8) { ? Tpoeшник(46 знак., 27.01.2021 13:12)
- Свич используется только для первого прохода, там прыжок такой,
чтобы оставшееся число сравнений стало кратным 8. Остальные проходы
целиком весь цикл, т.е. кратно 8 байтам. - arhiv6(27.01.2021 13:22)
- Я не понял просто как код цикла раскинул булки прямо посреди свитча.. ! :)) о_О - Tpoeшник(27.01.2021 13:44)
- Свич используется только для первого прохода, там прыжок такой,
чтобы оставшееся число сравнений стало кратным 8. Остальные проходы
целиком весь цикл, т.е. кратно 8 байтам. - arhiv6(27.01.2021 13:22)
- Спасибо, интересный подход прореживания контроля выхода за границы массива, правда в ущерб точности теперь граница определена с точностью 8 байт а не один :)) Adept(194 знак., 27.01.2021 13:08)
- Такого я с свичами не делал.. Как это работает? Мы один раз в
функции find_max попадаем в switch (len % 8) { ? Tpoeшник(46 знак., 27.01.2021 13:12)
- А откуда этот массив взялся, и кем он заполняется? Задачу поиска
максимума надо решать в момент заполнения массива. - il-2(27.01.2021 06:35)
- если побайтово-врукопашную, то да, а если DMA??? мы исходим из
того, что он в памяти уже лежит и нужно найти наиболее
быстрый/красивый алгоритм (накладные расходы на IO не учитываем.
То, что его можно обрабатывать "на лету" понятно, но это будет
по-любому не быстрее обработки уже находящегося в ОЗУ - Adept(27.01.2021 06:40)
- А откуда этот массив взялся в ОЗУ? Сам появился? :-) DMA несколько
усложняет дело, но задача не становится нерешаемой. Хотя вопрос
задан про AVR, у которого DMA нет :-) Но не буду занудничать, а по
существу: il-2(716 знак., 27.01.2021 07:17)
- иксмега с каких пор не AVR ?? (ейный DMA глядит на Вас с удивлением
:)) Adept(246 знак., 27.01.2021 12:50)
- Написать на Верилоге простенькую программку для ФПГА-ЦПЛД и с
помощью ДМА пулять туду байты из "огромного месива". Типа, по срезу
/WR проводить сравнение, а по фронту, есличо, обновлять максимум.
Один цыкл шыны - один байт. Можно ещо одновременно считать индекс
этого байта и заподминать рядом. - mse homjak(27.01.2021 14:25)
- на верилоге нельзя написать программку, это не язык программирования. и вообще проще не DMA, а если периферия внешняя - то принимать
данные параллельно процу, и потом тупо выдавать найденный максимум. - Mahagam(27.01.2021 14:36)
- Если нельзя, но хочеццо, значит, можно. А по условию задачи, "огромное месиво" уже есть и с этим нужно каг-то жить. - mse homjak(27.01.2021 14:39)
- на верилоге нельзя написать программку, это не язык программирования. и вообще проще не DMA, а если периферия внешняя - то принимать
данные параллельно процу, и потом тупо выдавать найденный максимум. - Mahagam(27.01.2021 14:36)
- Написать на Верилоге простенькую программку для ФПГА-ЦПЛД и с
помощью ДМА пулять туду байты из "огромного месива". Типа, по срезу
/WR проводить сравнение, а по фронту, есличо, обновлять максимум.
Один цыкл шыны - один байт. Можно ещо одновременно считать индекс
этого байта и заподминать рядом. - mse homjak(27.01.2021 14:25)
- иксмега с каких пор не AVR ?? (ейный DMA глядит на Вас с удивлением
:)) Adept(246 знак., 27.01.2021 12:50)
- А откуда этот массив взялся в ОЗУ? Сам появился? :-) DMA несколько
усложняет дело, но задача не становится нерешаемой. Хотя вопрос
задан про AVR, у которого DMA нет :-) Но не буду занудничать, а по
существу: il-2(716 знак., 27.01.2021 07:17)
- если побайтово-врукопашную, то да, а если DMA??? мы исходим из
того, что он в памяти уже лежит и нужно найти наиболее
быстрый/красивый алгоритм (накладные расходы на IO не учитываем.
То, что его можно обрабатывать "на лету" понятно, но это будет
по-любому не быстрее обработки уже находящегося в ОЗУ - Adept(27.01.2021 06:40)
- там у вас всё сожрут IO-процедуры c носителями информации, сам
алгоритм - это 5 команд на ассемблере :)) Adept(3281 знак., 26.01.2021 21:14 - 27.01.2021 00:50)
- Привести "огромный массив" к 256 ILYAUL(130 знак., 27.01.2021 01:29 - 01:53)
- а зачем так
через жопусложно? чего бы вместо ld temp,Х+; ldi YL,0; add YL, temp, просто не написать ld YL,X+ ну и вообще я как-то не вкурю сакральный смысл сих пируэтов :((( наверное переработал уже сегодня :) пойду чайку попью с мёдом, авось отпустит :)) - Adept(27.01.2021 01:38)- ld YL,X+ точно :))) , пойду я лучше кофейку глотну - ILYAUL(27.01.2021 01:44)
- интересно и эстетично, спасибо. Adept(838 знак., 27.01.2021 03:11)
- прикинул, добавив контроль границ массива, но не реализовывая
досрочное завершение, которое у меня тоже в комментах. Поздравляю,
коллега - 7 тактов на байт в функции "приведения к 256" Вашим методом, и потом 9 тактов на байт при поиске максимума в
массиве 256 байт (моим алгоритмом) - от 9 до 2304 тактов (смотря
где встретится максимум в первой или последней попытке) Adept(861 знак., 27.01.2021 13:11 - 13:18)
- Пока, ПО РЕЗУЛЬТАТАМ: лучшее 3,5 / 7,5 тактов на байт (первое - для алгоритма максимальной скорости,
второе - для алгоритма максимальной компактности), при условии
массива 2K рандомных значений, уже размещённых в памяти (ну чтобы
хоть как-то стандартизировать условия) Adept(1071 знак., 27.01.2021 13:46 - 15:50)
- не всё так однозначно потому как не видел ответа на вопрос: откуда
в раму набиваются данные? - m16(27.01.2021 16:16)
- они там по условию уже размещены - Adept(27.01.2021 16:20)
- а если они загружаются из ацп, смысл за тактами гоняться? проще на
лету. - m16(27.01.2021 16:41)
- "на лету" это чуть другая задача (по условию работаем с массивом данных в ОЗУ) и задач таких дофига по по обработке данных Adept(262 знак., 27.01.2021 16:45)
- а если они загружаются из ацп, смысл за тактами гоняться? проще на
лету. - m16(27.01.2021 16:41)
- они там по условию уже размещены - Adept(27.01.2021 16:20)
- Спасибо за теплые слова. Мне тут подумалось, что если задача столь
тривиальная и при условии, что "большой массив" он формирует сам,
то можно от него отказаться и формировать 256 сразу. Что кстати
избавит от лишних команд В/В. - ILYAUL(27.01.2021 13:48)
- Если будет денежный приз, прошу направить его мне :-)
>>> - SciFi(27.01.2021 14:20, ссылка)
- ОК, поделите пополам с ILYAUL :), сорри, уж больно Вы невнятно высказались. Я только сейчас
понял что Вы имели ввиду. Особенно сбивало с толку "записывать туда что-нибудь по этому индексу" :)) - Adept(27.01.2021 14:30)
- Это заявка на победу :)) Для массива 2K имеем среднестатистически 3,5 такта на байт :)) С использованием наработок ILYAUL/SciFi и по мотивам, навеянным идеями arhiv6 Adept(4404 знак., 27.01.2021 16:19 - 12.02.2021 14:37)
- Нет, я хочу все. Никаких четверых. И кстати кто эти люди? :) - Tpoeшник(11.02.2021 17:07)
- ну как бы я тут сочинил прогу, опираясь на некоторые мысли и идеи уважаемых ILYAUL, SciFi и arhiv6 :) - Adept(11.02.2021 17:37)
- Я не понимаю код. Tpoeшник(101 знак., 11.02.2021 18:24)
- там всё просто Adept(1355 знак., 11.02.2021 22:42 - 12.02.2021 12:50)
- Алгоритм я понял, было не ясно как st используется. Понял. Спасибо. Tpoeшник(67 знак., 12.02.2021 10:31)
- контроль FF вчера добавил с дискретностью 256 байт :) деньги уже
пропили :(( Adept(760 знак., 12.02.2021 13:05)
- Чтоб не переливать и не морочить голову. Напишите здесь или ссылку
в ветке дайте на крайний вариант с контролем на 0xff. Деньги зря
потратили, нужно будет вернуть. - Tpoeшник(12.02.2021 13:20)
- ну вот жеж, тут всё в крайней редакции: --> Adept(49 знак., 12.02.2021 13:29, ссылка)
- Все, до меня дошло. Вы после каждой порции байт смотрите на верхний индекс! Хорошо: 3,5 такта. - Tpoeшник(12.02.2021 14:30)
- ну вот жеж, тут всё в крайней редакции: --> Adept(49 знак., 12.02.2021 13:29, ссылка)
- Чтоб не переливать и не морочить голову. Напишите здесь или ссылку
в ветке дайте на крайний вариант с контролем на 0xff. Деньги зря
потратили, нужно будет вернуть. - Tpoeшник(12.02.2021 13:20)
- контроль FF вчера добавил с дискретностью 256 байт :) деньги уже
пропили :(( Adept(760 знак., 12.02.2021 13:05)
- Алгоритм я понял, было не ясно как st используется. Понял. Спасибо. Tpoeшник(67 знак., 12.02.2021 10:31)
- там всё просто Adept(1355 знак., 11.02.2021 22:42 - 12.02.2021 12:50)
- Я не понимаю код. Tpoeшник(101 знак., 11.02.2021 18:24)
- ну как бы я тут сочинил прогу, опираясь на некоторые мысли и идеи уважаемых ILYAUL, SciFi и arhiv6 :) - Adept(11.02.2021 17:37)
- xmega может и так, но в AVR8 получается 4+ такта: Dingo(138 знак., 03.02.2021 05:12, картинка)
- Упростил слегка ILYAUL(397 знак., 27.01.2021 22:40)
- ну да, можно и так, "те же яйца, только вид сбоку" ну и на 10% быстрее - тоже дело :)) я тут тоже немного подрихтовал Adept(693 знак., 27.01.2021 23:28)
- Нет, я хочу все. Никаких четверых. И кстати кто эти люди? :) - Tpoeшник(11.02.2021 17:07)
- А что, ГЦЦ для АВР так плох? Без слёз не взглянешь >>> - SciFi(27.01.2021 20:30, ссылка)
- Это заявка на победу :)) Для массива 2K имеем среднестатистически 3,5 такта на байт :)) С использованием наработок ILYAUL/SciFi и по мотивам, навеянным идеями arhiv6 Adept(4404 знак., 27.01.2021 16:19 - 12.02.2021 14:37)
- ОК, поделите пополам с ILYAUL :), сорри, уж больно Вы невнятно высказались. Я только сейчас
понял что Вы имели ввиду. Особенно сбивало с толку "записывать туда что-нибудь по этому индексу" :)) - Adept(27.01.2021 14:30)
- Если будет денежный приз, прошу направить его мне :-)
>>> - SciFi(27.01.2021 14:20, ссылка)
- не всё так однозначно потому как не видел ответа на вопрос: откуда
в раму набиваются данные? - m16(27.01.2021 16:16)
- Пока, ПО РЕЗУЛЬТАТАМ: лучшее 3,5 / 7,5 тактов на байт (первое - для алгоритма максимальной скорости,
второе - для алгоритма максимальной компактности), при условии
массива 2K рандомных значений, уже размещённых в памяти (ну чтобы
хоть как-то стандартизировать условия) Adept(1071 знак., 27.01.2021 13:46 - 15:50)
- прикинул, добавив контроль границ массива, но не реализовывая
досрочное завершение, которое у меня тоже в комментах. Поздравляю,
коллега - 7 тактов на байт в функции "приведения к 256" Вашим методом, и потом 9 тактов на байт при поиске максимума в
массиве 256 байт (моим алгоритмом) - от 9 до 2304 тактов (смотря
где встретится максимум в первой или последней попытке) Adept(861 знак., 27.01.2021 13:11 - 13:18)
- интересно и эстетично, спасибо. Adept(838 знак., 27.01.2021 03:11)
- ld YL,X+ точно :))) , пойду я лучше кофейку глотну - ILYAUL(27.01.2021 01:44)
- "Условие конца "огромный массив" X" ну очень понравилось!!!! )))) - Aleksey_75(27.01.2021 01:31)
- Это к заказчику. Дал бы размер .... а так... - ILYAUL(27.01.2021 01:34)
- а зачем так
- +1 загрузка с носителя похерит всю скорость проверки! ибо даж если
бpать SPI-flash и выжимать по полной (если склероз не изменяет для
spi avr два такта на бит) + минимум 16 тактов на каждый байт
данных! - Aleksey_75(27.01.2021 00:42)
- Заказчик не указал источнк данных. Мы будем их брать готовыми с
параллельной шины данных :) - Codavr(27.01.2021 01:02)
- Заказчик знатный троль! Он вообще ничего не указал! Непонятный AVR
и "огромный массив"..... "дерево вООт такое и мужик в пиджаке!" (с) - Aleksey_75(27.01.2021 01:07)
- божится, что нет :) - Adept(27.01.2021 01:29, ссылка)
- ))) "Век воли не видать" не сказал !!! - Aleksey_75(27.01.2021 01:33)
- зато интересный дискусс получился. Я вот прикинул на что можно поменять кластер из 100 АВРок :)) ну
и примерно понял (даж какой-то код накрапал :) , на что можно
рассчитывать в простейшей арифметике на АВР-ах (раньше как-то и не
задавался таким дурацким вопросом, теперь вот знаю :))) - Adept(27.01.2021 01:28)
- Из своей практики и понимания! Аврки рулят там где нужен
"ногодрыг", тогглить пин с частотой в 1/2 тактовой мало кто умеет
(по моему совсем никто)... По всем остальным операциям с более 8бит
данными уже хромоног.. - Aleksey_75(27.01.2021 01:36)
- для совсем аццкого ногодрыга рулят плисины, возможно даже в авр внутри )) - Mahagam(27.01.2021 14:38)
- Из своей практики и понимания! Аврки рулят там где нужен
"ногодрыг", тогглить пин с частотой в 1/2 тактовой мало кто умеет
(по моему совсем никто)... По всем остальным операциям с более 8бит
данными уже хромоног.. - Aleksey_75(27.01.2021 01:36)
- божится, что нет :) - Adept(27.01.2021 01:29, ссылка)
- Заказчик знатный троль! Он вообще ничего не указал! Непонятный AVR
и "огромный массив"..... "дерево вООт такое и мужик в пиджаке!" (с) - Aleksey_75(27.01.2021 01:07)
- Заказчик не указал источнк данных. Мы будем их брать готовыми с
параллельной шины данных :) - Codavr(27.01.2021 01:02)
- Кто знает набор инструкций avr? Как насчёт брать байты из
сканируемого массива, превращать их в индекс 0...255 в массиве в
ОЗУ, записывать туда что-нибудь по этому индексу. После
сканирования заглянуть в массив, станет понятно, какой максимальный
индекс встречался. - SciFi(26.01.2021 21:18)
- думаете это будет быстрее прямого сравнения ?? :)) - Adept(26.01.2021 21:45)
- от этого вашего чудо-авра всего можно ожидать :-) - SciFi(26.01.2021 21:48)
- Сравнение двух 16 битных регистровых переменных 2 такта. Codavr(96 знак., 27.01.2021 00:28)
- в лучшем случае + 4 такта на загрузку! - Aleksey_75(27.01.2021 00:37)
- А куда деваться. Зато авээрок можно сто штук впараллель поставить
сравнивать и жрать они все равно будут меньше :) - Codavr(27.01.2021 00:47)
- жрать они будут меньше , кого ??? прибавляем накладные расходы на
синхру сто аверок и все это превращается лютый ад .. - Aleksey_75(27.01.2021 00:50)
- 12mA XMEGA@32MHz 3.3V (т.е. 36mW) - 100шт, чуть менее 4W, при
суммарной производительности (без учёта IO операций для данных)
соответсвенно около 3GIPS (это какбы 3K MIPS :) - тока что сам
узнал :))) (чт-то мне подсказывает, что даже не самый топовый ARM в
каком-нить смартфоне будет мягко говоря пошустрее, да и похолоднее
пожалуй:)) Adept(384 знак., 27.01.2021 01:05 - 01:24, ссылка)
- Зачем нам флоп, нам флоп не нужен. Закзчик чары сравнивать просил,
такшта извольте, на яве в мабиле под андроидом :) - Codavr(27.01.2021 01:15)
- сорри флопы указал по
привычкеошибке там MIPSы конечно :) - Adept(27.01.2021 01:20)
- сорри флопы указал по
- без учета IO, без учета синхронизации и прочего... Это все пальцем в .... , в небо я имел ввиду! )))) - Aleksey_75(27.01.2021 01:10)
- Зачем нам флоп, нам флоп не нужен. Закзчик чары сравнивать просил,
такшта извольте, на яве в мабиле под андроидом :) - Codavr(27.01.2021 01:15)
- Ой блин 20 мегагерц раскидать на сотню камней, как 2 пальца. Порвут
любой топовый хоть под виндой, хоть под линухом, а сожрут при этом
полтора ампера. - Codavr(27.01.2021 00:58)
- "отнюдь, батенька, отнюдь..." (С) - Adept(27.01.2021 01:27, ссылка)
- Не силен я в MIPSах нынешних х86, но что-то мне подсказывает, что
дутые они, и как раз на такой тупой задачке сдуются на порядок, а
то и больше. - Codavr(27.01.2021 01:33)
- "Носители" хромают из этого и реальные мисы не померить - Aleksey_75(27.01.2021 01:38)
- Я малость тупанул, когда про "топовые" сказал. У них нынче по 64
ядра на борту. Куда сотне АВРок до них. Их тока обновление винды
может остановить :) - Codavr(27.01.2021 01:43)
- это да :) в страшном сне мне не могло приснится, когда я перешёл с
люительского ОРИОНа на Z80 :) на первый пень 90МГц, что вот через
25 лет (блин, людистоканеживут :(( - как давно это было оказывается) при увеличившейся на три
порядка производительности, буду ждать когда прогрузится ОСь
минутами а уж про обновления 10-ки смущённо промолчу :)) Adept(805 знак., 27.01.2021 02:04 - 05:34)
- Как раз сегодня сижу жду важного звонка, втыкаю между делом в инет
на мабиле. Тут звонок, а за мгновение до того нажал на ссылку в
яндексе и начинается загрузка ихнего ебучетормозного дзена. Я
истошно пытаюсь переключиться с оперы на звонок, но не тут то было,
случайно попадаю пальцем в яндекс-навигатор и начинает грузиться
уже он. Упорно пытюсь добраться до кнопки с зеленой трубой и сцуко
попадаю на автоматичекий ответ, где по умолчанию всякая хуйня типа
я вам перезвою или Codavr(196 знак., 27.01.2021 02:35)
- во-во вот это лютыпесдетс до того меня слегка подз@ёб, что ну их
нахрен со своими "десятками", андроидофонами и прочим трешем :P Adept(958 знак., 27.01.2021 02:44)
- С того момента, как неподалеку от моего дома открылся Глобус, а это
уже лет 10, я подхожу к весам в овощном отделе заранее успокаивая
себя - не надо, крепись, тебе же всегда хватало воли не расхеачить
их, ну и что, раза с восьмого-дестого удастся ввести нужную цифру,
ну и что, что придется каждый раз снимать пакет с весов, тут весов
много, хоть на одних да получится. Шоб он сдох падла, кто эти весы
спректировал, я его НЕНАВИЖУ. Эта тварь отняла у человечесва многие Codavr(294 знак., 27.01.2021 03:17 - 03:23)
- Касса самообслуживания - тот ещё квест. Купил линейку ученическую, 25 см. maik-vs(195 знак., 27.01.2021 13:39)
- ЗачОт :)) присоединяюсь - порой обуревают подобные эмоции (диву
только даёшься как таким рукожопам удаётся что-то сделать, да ещё и
продатьзапустить в серию? :)) Подобные эмоции у меня вызывал Adept(248 знак., 27.01.2021 03:24)
- С того момента, как неподалеку от моего дома открылся Глобус, а это
уже лет 10, я подхожу к весам в овощном отделе заранее успокаивая
себя - не надо, крепись, тебе же всегда хватало воли не расхеачить
их, ну и что, раза с восьмого-дестого удастся ввести нужную цифру,
ну и что, что придется каждый раз снимать пакет с весов, тут весов
много, хоть на одних да получится. Шоб он сдох падла, кто эти весы
спректировал, я его НЕНАВИЖУ. Эта тварь отняла у человечесва многие Codavr(294 знак., 27.01.2021 03:17 - 03:23)
- во-во вот это лютыпесдетс до того меня слегка подз@ёб, что ну их
нахрен со своими "десятками", андроидофонами и прочим трешем :P Adept(958 знак., 27.01.2021 02:44)
- Мне вот такая статейка про вояджеры недавно попалась. КМОП память с
питанием напрямую от радиоизотопного гнератора. Просто писк. - Codavr(27.01.2021 02:17, ссылка)
- От перевода начинает кровь из глаз идти. Наверное, так - лучше? www.allaboutcircuits.com/news/voyager-mission-anniversary-celebration-introduction Toчкa oпopы(116 знак., 03.02.2021 10:23, ссылка)
- Как раз сегодня сижу жду важного звонка, втыкаю между делом в инет
на мабиле. Тут звонок, а за мгновение до того нажал на ссылку в
яндексе и начинается загрузка ихнего ебучетормозного дзена. Я
истошно пытаюсь переключиться с оперы на звонок, но не тут то было,
случайно попадаю пальцем в яндекс-навигатор и начинает грузиться
уже он. Упорно пытюсь добраться до кнопки с зеленой трубой и сцуко
попадаю на автоматичекий ответ, где по умолчанию всякая хуйня типа
я вам перезвою или Codavr(196 знак., 27.01.2021 02:35)
- это да :) в страшном сне мне не могло приснится, когда я перешёл с
люительского ОРИОНа на Z80 :) на первый пень 90МГц, что вот через
25 лет (блин, людистоканеживут :(( - как давно это было оказывается) при увеличившейся на три
порядка производительности, буду ждать когда прогрузится ОСь
минутами а уж про обновления 10-ки смущённо промолчу :)) Adept(805 знак., 27.01.2021 02:04 - 05:34)
- Я малость тупанул, когда про "топовые" сказал. У них нынче по 64
ядра на борту. Куда сотне АВРок до них. Их тока обновление винды
может остановить :) - Codavr(27.01.2021 01:43)
- "Носители" хромают из этого и реальные мисы не померить - Aleksey_75(27.01.2021 01:38)
- Не силен я в MIPSах нынешних х86, но что-то мне подсказывает, что
дутые они, и как раз на такой тупой задачке сдуются на порядок, а
то и больше. - Codavr(27.01.2021 01:33)
- "отнюдь, батенька, отнюдь..." (С) - Adept(27.01.2021 01:27, ссылка)
- 12mA XMEGA@32MHz 3.3V (т.е. 36mW) - 100шт, чуть менее 4W, при
суммарной производительности (без учёта IO операций для данных)
соответсвенно около 3GIPS (это какбы 3K MIPS :) - тока что сам
узнал :))) (чт-то мне подсказывает, что даже не самый топовый ARM в
каком-нить смартфоне будет мягко говоря пошустрее, да и похолоднее
пожалуй:)) Adept(384 знак., 27.01.2021 01:05 - 01:24, ссылка)
- жрать они будут меньше , кого ??? прибавляем накладные расходы на
синхру сто аверок и все это превращается лютый ад .. - Aleksey_75(27.01.2021 00:50)
- А куда деваться. Зато авээрок можно сто штук впараллель поставить
сравнивать и жрать они все равно будут меньше :) - Codavr(27.01.2021 00:47)
- в лучшем случае + 4 такта на загрузку! - Aleksey_75(27.01.2021 00:37)
- Сравнение двух 16 битных регистровых переменных 2 такта. Codavr(96 знак., 27.01.2021 00:28)
- от этого вашего чудо-авра всего можно ожидать :-) - SciFi(26.01.2021 21:48)
- типа Tpoeшник(112 знак., 26.01.2021 21:26)
- думаете это будет быстрее прямого сравнения ?? :)) - Adept(26.01.2021 21:45)
- Мне не нравится. Но за досрочный выход - плюсик от Троешника. - Tpoeшник(26.01.2021 21:14)
- ваша правда, облажался немного с контролем границы массива (поправил) так-то внутренний цикл недлинный 9 тактов (для иксмеги на 32МГц это 3,4Мбайт/сек - мало??) (основное - сравнение границ массива , само сравнение двух регистров с условием - почти в три раза короче :) Adept(600 знак., 27.01.2021 00:08)
- Привести "огромный массив" к 256 ILYAUL(130 знак., 27.01.2021 01:29 - 01:53)
- На AVR цивилизация ничего лучшего не придумала. Но на более крутых
процессорах (скажем x86/64) появились SIMD-инструкции, позволяющие
совмещать сравнение с условным копированием за один такт, в том
числе и параллельно с целыми блоками элементов, взятыми из массива
в том же порядке. - Kceния(26.01.2021 22:58 - 23:15)
- вот интересно, (чисто академически) насколько эффективно скомпилит
какой-нить "яр" сей незамысловатый код /из предположения, что
массив с данными у нас уже в памяти/ (у меня на асме получилось 9
тактов на байт (6,3такта в линейной, т.е. не циклической процедуре
с прямой адресацией) что даст Си?? )ну чисто из любопытства :))) (не приведи господь устроить холивар :))) - Adept(27.01.2021 00:00, ссылка)
- Как скомпилит IAR не знаю, однако ясно, что переменную max следует
во время поиска хранить в регистре, не переписывая ее на каждом
обороте цикла в память, а выложить из регистра в память лишь после
того, как поиск окончен. Полагаю, что компилятору можно было бы и
помочь, объявив переменную max, как register. - Kceния(27.01.2021 02:24)
- набросайте, плз, крутаните в отладчике, чтобы посмотреть сколько там тактов на байт получается. Интересно же :) - Adept(27.01.2021 02:31)
- Как скомпилит IAR не знаю, однако ясно, что переменную max следует
во время поиска хранить в регистре, не переписывая ее на каждом
обороте цикла в память, а выложить из регистра в память лишь после
того, как поиск окончен. Полагаю, что компилятору можно было бы и
помочь, объявив переменную max, как register. - Kceния(27.01.2021 02:24)
- вот интересно, (чисто академически) насколько эффективно скомпилит
какой-нить "яр" сей незамысловатый код /из предположения, что
массив с данными у нас уже в памяти/ (у меня на асме получилось 9
тактов на байт (6,3такта в линейной, т.е. не циклической процедуре
с прямой адресацией) что даст Си?? )ну чисто из любопытства :))) (не приведи господь устроить холивар :))) - Adept(27.01.2021 00:00, ссылка)
- использовать быструю сортировку, она же быстрая :), Если len
степень 2, можно попробовать что-нибудь рекурсивное с половинным
сравнением. А если немножко подумать, задача решается для
произвольного len. Типа так IBAH(283 знак., 26.01.2021 22:10)
- Сортировка по сложности степени 2, в прямой поиск по сложности
степени 1. Глупо заменять поиск максимального элемента массива его
сортировкой. - Kceния(26.01.2021 22:51)
- Сударыня, вы гоните! Время выполнения "быстрой сортировки" пропорционально логарифму от размера массива. На этом же принципе я предлагаю "быстрый поиск", время выполнения также пропорционально логарифму от размера массива. Если развернуть рекурсию, получится следующее: IBAH(289 знак., 03.02.2021 20:45)
- Сортировка по сложности степени 2, в прямой поиск по сложности
степени 1. Глупо заменять поиск максимального элемента массива его
сортировкой. - Kceния(26.01.2021 22:51)
- тонкий троллинг :)))) а я-то повелся :)))))))) Adept(132 знак., 26.01.2021 21:58)
- Не ,я вот такими вещами не занимаюсь. Просто на самом деле
интересно. Вот какие варианты начали предлагать люди и вот вы в
частности. Я например с рекурсией не понимаю, буду еще курить - Tpoeшник(26.01.2021 22:02)
- задача оторвана от реальности. Условия слишком неопределены. Если "чисто академический интерес производительности ядра", то нужно предполагать, что массив (кстати говоря и размер нужно указать) у нас уже в памяти, Adept(108 знак., 26.01.2021 23:25)
- во времена жития конфы телесистем был у них раздел для покупки изобретений... Вот ты напомнил мне тамошнюю атмосферу...)) klown1(394 знак., 26.01.2021 22:15)
- Не ,я вот такими вещами не занимаюсь. Просто на самом деле
интересно. Вот какие варианты начали предлагать люди и вот вы в
частности. Я например с рекурсией не понимаю, буду еще курить - Tpoeшник(26.01.2021 22:02)
- Числа всякий раз полностью новые, я надеюсь? :) - Cкpипaч(26.01.2021 21:00)
- Да, каждый раз ничего заранее о содержимом массива не известно. - Tpoeшник(26.01.2021 21:02)
- КМК неплохо было бы массив разместить с выравниванием на 256 и ещё
помочь в оптимизации доступа Vit(162 знак., 26.01.2021 20:29)
- А зачем крутить дальше если Arr[i] = 0xFF ? - Tpoeшник(26.01.2021 20:37)
- Дело Тумосца живет ;) - Гyдвин(26.01.2021 20:26)
- А что, он и массивы сортировал? Не припомню. - VLLV(26.01.2021 21:20)
- массивную ось писал - m16(26.01.2021 21:22)
- Не надо грязи, пока можно списать на пыль :-) - SciFi(26.01.2021 20:28)
- А что, он и массивы сортировал? Не припомню. - VLLV(26.01.2021 21:20)
- Если нужно быстро-быстро, то убираем avr :-) - SciFi(26.01.2021 19:36)
- Нужно оставить. Да и я ниже спрашиваю: в поиске максимального в ПЗУ
носителе "тормозить" будет по идее носитель!? - Tpoeшник(26.01.2021 19:37)
- ROM максимальной скорости - это LUT. Быстрее чистой логики не будет
ничего :) - lloyd(26.01.2021 20:43)
- Там и искать ничего не надо. Известно же, что в результате будет 42. Или 146. Одно из двух. - SciFi(26.01.2021 20:45)
- а прикрути к avr Еthernet, залей массив в комп в ексел-файло, в
екселе функцией (MAX) найди значение и верни в avr. klown1(142 знак., 26.01.2021 20:35)
- Напомню про этот замечательный проект - Ethernut. Экономического
смысла нет, но интересно! Evgeny_CD(9 знак., 26.01.2021 21:36, ссылка, ссылка)
- У меня до сих пор девайc на ATmega2560, совместимый по архитектуре шины с Ethernut 2, выпускается, с 512 кБ SRAM, но без Ethernet:) - Vit(26.01.2021 22:18)
- даааа, было время... klown1(185 знак., 26.01.2021 22:10)
- Вот еще - Evgeny_CD(26.01.2021 21:43, ссылка)
- Напомню про этот замечательный проект - Ethernut. Экономического
смысла нет, но интересно! Evgeny_CD(9 знак., 26.01.2021 21:36, ссылка, ссылка)
- Мы тут конкретную задачу решаем или просто беспредметно треплемся, как обычно? :-) - SciFi(26.01.2021 19:39)
- ROM максимальной скорости - это LUT. Быстрее чистой логики не будет
ничего :) - lloyd(26.01.2021 20:43)
- Нужно оставить. Да и я ниже спрашиваю: в поиске максимального в ПЗУ
носителе "тормозить" будет по идее носитель!? - Tpoeшник(26.01.2021 19:37)
- А как Вы представляете алгоритм без сравнения с каждым? Можно
максимально оптимизировать ваш код avr. - kaf1(26.01.2021 19:16)
- Само понятие сравнения можно обсудить. Разве обязательно if (Arr[i]>max) делать!? - Tpoeшник(26.01.2021 19:20)
- Если ваш массив не упорядочен, не имеет еще каких-то особенностей,
а совершенно случайный, то ни чего лучше не найдете. Возможна
только оптимизация самого процесса перебора, но проще доверить это
компилятору. - AlexBi(26.01.2021 19:07)
- Массив совершенно случайный. Особенностей нет никаких. - Tpoeшник(26.01.2021 19:09)
- Молитва о чуде говорят помогает в таких случаях. - Codavr(26.01.2021 19:13)
- Тады без вариантов. Для N чисел будет (N-1) операций сравнения - LightElf(26.01.2021 19:12)
- Вдогонку еще один вопрос. Возможно немного глупый: если массив
состоит из 1млр значений и записан на внешнюю флешку, карту и тд.
АВР может посоревноваться с ПК в скорости поиска максимального? - Tpoeшник(26.01.2021 19:14)
- Разве что найти исключительно тормозную флешку. Даже очень плохая
uSD легко отдает 10МБ/с на чтение. AVR столько просто не прожует, а
писюк - вполне - LightElf(26.01.2021 19:39)
- отдать то может она и отдаст, вот только кто их примет! даж с 16к буфером посчитате накладные расходы! у меня получается правда с STM, с буфером 8к spi флеш с обработкой получается порядка 800К в сек! - Aleksey_75(27.01.2021 01:13)
- То есть: если я буду тащить из файла данные и сравнивать с
максимальным, то получу 10МБ/с? Можно ведь написать код например на
Си и определить время за сколько код найдет максимальное значение.
И получится что за 1 сек ПК 10М раз выполнит if с байтом
очередным!? Или 10МБ/с это переброс по шине в ОЗУ?! - Tpoeшник(26.01.2021 19:53)
- Типа того. Но это должна быть реально плохая/древняя флешка или очень древний/унылый контроллер SD. Скорее и карта и контроллер умеют в 50МГц и выдадут порядка 20МБ/с, что для писюка - несущественная мелочь. Для оценки дури современных писюков: Core i7-9700K одним ядром сжимает данные алгоритмом LZ4 (а это нифига не максимум найти) со скоростью 780МБ/с. - LightElf(29.01.2021 21:27)
- при условии уже наличия массива данных в памяти, быстрый
беспонтовыйлинейный код на иксмеге@32МГц не дотягивает и до 5МБайт/сек, увы:(( Более красивый и хоть как-то полезный циклический - при тех же условиях - чуть меньше 3,5Мбайт/сек. Однако в свете последних достижений :)) удалось достичь почти 8,8МБайт/сек :) - Adept(27.01.2021 18:35, ссылка, ссылка) - LightElf фсе врет, если винда в это время начнет обновляться, то в
АВРку можно отчасового кварца тактировать, и то она быстрее успеет
:) - Codavr(27.01.2021 00:05)
- В условиях задачи винды не было :) - LightElf(27.01.2021 05:10)
- Нет. У ПК шина быстрее, регистры длиннее, куча ядер и есть SIMD.
Ничего из этого нет у AVR - lloyd(26.01.2021 19:16)
- Да, понимаю. Но при поиске максимального тормозить ведь носитель
будет, не ядра и регистры. Ну типа вычитать 100 байт с дикового
носителя ПК и вычитать 100 байт АВРкой с флешки резвой. Не
сопоставимо!? - Tpoeшник(26.01.2021 19:19)
- А что, в AVR уже положили PCIe? - lloyd(26.01.2021 19:20)
- Ну ок. Прямо вот реально если записать на диск ПК один млр.
значений. Потом запустить программу которая потянет с винта данные
и начнет их перебирать. Будет много быстрее чем АВР с флешки (или
другого максимально быстрого носителя для архитектуры) то же самое
сделает? - Tpoeшник(26.01.2021 19:24)
- На PC можно распараллелить работу по ядрам, видеокарту
задействовать - Ruslan(26.01.2021 19:27)
- Да я в некотором смысле понимаю. Я о том что скорость физ.доступа к
данным на ПЗУ наверное не сильно то отличается. Выигрыш у ПК в том
что он втягивает в ОЗУ все, в кеши всяки там и уже работает с
данными в поле быстрого доступа к инфе. Но если последовательная
цепочка и алгоритм сканит на лету поток, то АВРка не сильно хуже
может быть. Хотя звучит конечно странно) - Tpoeшник(26.01.2021 19:31)
- 1 млрд байт это меньше гигабайта. Массив можно загрузить в память
видеокарты и распараллелить поиск по ядрам. Авр такое и не снилось
:) Ну можно попробовать собрать кластер на авр :) - Ruslan(26.01.2021 19:32)
- Стоп. Я о ПЗУ говорил. В память видео карты это о другом.
Вставляете в ПК USB флешку, запускаете код который ищет максимум в
файле бинарном например. Вместо флешки диск ,SSD может быть - Tpoeшник(26.01.2021 19:35)
- "Слушай, ты за меня или за медведя?" - Ruslan(26.01.2021 19:39)
- У моего бюджетного SSD максимальная скорость чтения - 3 гигабайта в секунду. Чтобы AVR успевала обрабатывать такие данные ей нужно работать на частоте 3ГГц - lloyd(26.01.2021 19:38)
- Стоп. Я о ПЗУ говорил. В память видео карты это о другом.
Вставляете в ПК USB флешку, запускаете код который ищет максимум в
файле бинарном например. Вместо флешки диск ,SSD может быть - Tpoeшник(26.01.2021 19:35)
- 1 млрд байт это меньше гигабайта. Массив можно загрузить в память
видеокарты и распараллелить поиск по ядрам. Авр такое и не снилось
:) Ну можно попробовать собрать кластер на авр :) - Ruslan(26.01.2021 19:32)
- Да я в некотором смысле понимаю. Я о том что скорость физ.доступа к
данным на ПЗУ наверное не сильно то отличается. Выигрыш у ПК в том
что он втягивает в ОЗУ все, в кеши всяки там и уже работает с
данными в поле быстрого доступа к инфе. Но если последовательная
цепочка и алгоритм сканит на лету поток, то АВРка не сильно хуже
может быть. Хотя звучит конечно странно) - Tpoeшник(26.01.2021 19:31)
- На PC можно распараллелить работу по ядрам, видеокарту
задействовать - Ruslan(26.01.2021 19:27)
- Ну ок. Прямо вот реально если записать на диск ПК один млр.
значений. Потом запустить программу которая потянет с винта данные
и начнет их перебирать. Будет много быстрее чем АВР с флешки (или
другого максимально быстрого носителя для архитектуры) то же самое
сделает? - Tpoeшник(26.01.2021 19:24)
- А что, в AVR уже положили PCIe? - lloyd(26.01.2021 19:20)
- Да, понимаю. Но при поиске максимального тормозить ведь носитель
будет, не ядра и регистры. Ну типа вычитать 100 байт с дикового
носителя ПК и вычитать 100 байт АВРкой с флешки резвой. Не
сопоставимо!? - Tpoeшник(26.01.2021 19:19)
- Разве что найти исключительно тормозную флешку. Даже очень плохая
uSD легко отдает 10МБ/с на чтение. AVR столько просто не прожует, а
писюк - вполне - LightElf(26.01.2021 19:39)
- Вдогонку еще один вопрос. Возможно немного глупый: если массив
состоит из 1млр значений и записан на внешнюю флешку, карту и тд.
АВР может посоревноваться с ПК в скорости поиска максимального? - Tpoeшник(26.01.2021 19:14)
- Массив совершенно случайный. Особенностей нет никаких. - Tpoeшник(26.01.2021 19:09)
- Средний ПК ищет максимальное за Tpoeшник(310 знак., 10.02.2021 15:14)