-
- Сегодня приснился пример Compiler vs ASM сложения многобитных
чисел. На ARM ассемблере это просто серия add-with-carry ADC... - RxTx(24.02.2024 16:29)
- Тут ниже понеслось в дебри доказательств на С "возможно всё!" но
смысл был другой. На ASM компактнее по памяти и быстрее по тактам. RxTx(253 знак., 25.02.2024 18:29)
- Равно как и на любом другом языке. даж на "брэйнфаке" теоретически возможно всё тоже :)) вопрос целесообразности и эффективности (правда это тоже нифига не функции одной переменной), такшо нравится кому-то аль нет, - ассемблер вечен :) насколько его будут использовать, - вангую, что по мере необходимости, использовать будут, ещё и как. Вопрос настколько часто, чтобы стоило в него вникать?? Ответ - достаточно редко, чтобы все поголовно его изучали, но знание его строго Adept(100 знак., 25.02.2024 21:11)
- Я переносил своеобразную свою оптимизированную годами 24битную математику с асма на 32 бита С для 8битного AVR, разница модуля вычислений больше, чем в 2 раза вышла . Но итоговая прога процентов на 30 больше, и в итоге вышло сделать один текст проги под 3 проца, ХРЕН я бы в разумные сроки на асме такое сотворил. Обоссать и оставить асм только для очень редких супероптимизаций. - Andreas(25.02.2024 19:17)
- В стандарте есть 64-битные целые. С ними у ARM всё шоколадно -
сложение транслируется в пару add, adc. У avr через вызов
библиотечной функции с прогоном аргументов через стек. Внутри
функции всё нормально. Предложения в стандарт по целым любой
разрядности есть, Но когда примут неизвестно. В сети есть класс из
этого предложения. Работать с ним удобно, так же как с базовыми
типами, но с оптимальностью без поддержки компилятора не очень. С
другой стороны, вычислить 100! VladislavS.(31 знак., 25.02.2024 03:16)
- У avr через вызов библиотечной функции с прогоном аргументов
через стек. На дыбу того кто это придумал. У авра 32 РОН-а , для сложения двух
64-х достаточно четырёх команд enc(125 знак., 25.02.2024 21:14)
- Мнение человека не способного 64 на 8 поделить особенно ценно.
Можно подумать, что 16 регистров незадействованные только и ждут
64-битных сложений. Сохранить/восстановить их не надо? - VladislavS.(25.02.2024 22:45)
- Да ладно, четыре - восемь. Ошибся, бывает. Очевиден смысл процедуры
сохранения/восстановления регистров при входе/выходе из прерывания
а зачем это нужно делать перед/после арифметической операции? - enc(25.02.2024 23:04)
- Потому что программа состоит не только из этого архиважного
действия - сложить 64-битные числа на восьмибитном контроллере. - VladislavS.(25.02.2024 23:14)
- А ещё умножить, разделить со знаком и без и для всей этой хрени
нужны РОН-ы , а для всего остального - ОЗУ. Не так ли? - enc(25.02.2024 23:29)
- и вот тут реально удобен Z8Encore. Где могу назначить в любом месте адресного пространства в 4К нужные мне 16 РОН для каждой задачи отдельно. Хоть 20 раз по 16. :-) - Лaгyнoв(26.02.2024 08:44)
- Нет никакой необходимости держать всё число сразу в регистрах.
Сегодня вам 64 бита надо, завтра 256. Где регистры брать будете? - VladislavS.(25.02.2024 23:40)
- Ты же о 64-битных целых заговорил. У avr через вызов библиотечной функции с прогоном аргументов
через стек. (VladislavS). Применительно к авру его 32-х регистров хватает для арифметики с
любой целочисленкой до 64 бит включительно. enc(113 знак., 25.02.2024 23:56)
- Да хоть в облаке, всё равно сложеие побайтово производится. Достаточно пары регистров. - VladislavS.(26.02.2024 07:17)
- Ты же о 64-битных целых заговорил. У avr через вызов библиотечной функции с прогоном аргументов
через стек. (VladislavS). Применительно к авру его 32-х регистров хватает для арифметики с
любой целочисленкой до 64 бит включительно. enc(113 знак., 25.02.2024 23:56)
- А ещё умножить, разделить со знаком и без и для всей этой хрени
нужны РОН-ы , а для всего остального - ОЗУ. Не так ли? - enc(25.02.2024 23:29)
- Потому что программа состоит не только из этого архиважного
действия - сложить 64-битные числа на восьмибитном контроллере. - VladislavS.(25.02.2024 23:14)
- Да ладно, четыре - восемь. Ошибся, бывает. Очевиден смысл процедуры
сохранения/восстановления регистров при входе/выходе из прерывания
а зачем это нужно делать перед/после арифметической операции? - enc(25.02.2024 23:04)
- Глупое эмоциональное мнение. Примерно как в отношении ИАР и 51го "ха, не умеет с битами работать, сранное Г стандарту
придерживается зачем-то". И наоборот "ваш Кейл - Г, т.к. он стандарту не соответствует, это совсем не
СИ" - POV(25.02.2024 21:19)
- Ну да, глупее не бывает - прогон аргументов через стек, к четырём
тактам плюс сотня на тривиальную арифметику. Насмешил, не путай
опыт с мнением. - enc(25.02.2024 21:37)
- Это стандартное решение. Никто не говорит что оно подходит для
данной архитектуры. - POV(25.02.2024 21:40)
- Ещё раз - на дыбу такие стандарты. - enc(25.02.2024 21:45)
- Это стандартное решение. Никто не говорит что оно подходит для
данной архитектуры. - POV(25.02.2024 21:40)
- Ну да, глупее не бывает - прогон аргументов через стек, к четырём
тактам плюс сотня на тривиальную арифметику. Насмешил, не путай
опыт с мнением. - enc(25.02.2024 21:37)
- Мнение человека не способного 64 на 8 поделить особенно ценно.
Можно подумать, что 16 регистров незадействованные только и ждут
64-битных сложений. Сохранить/восстановить их не надо? - VladislavS.(25.02.2024 22:45)
- Можно и свой класс слепить с любой разрядностью переопределив для
класса +- * /, проблема что арифметические операции придется
кодировать на асме ибо С инструментов для такого нет. - Boвa(25.02.2024 11:44)
- Чё, правда? VladislavS.(1 знак., 25.02.2024 13:31, картинка)
- Костыль с if() пришлось прикрутить из-за невозможности посмотреть бит переноса. - Boвa(25.02.2024 22:27)
- Инструментов нет? Жаль, что в бедуины записывают без простого
экзамена на целочисленное сложение... SciFi(1 знак., 25.02.2024 11:49, ссылка)
- Рубрика костыли и велосипеды - Boвa(25.02.2024 22:29)
- Мы стали забывать... RxTx(1 знак., 25.02.2024 23:23, картинка)
- Ну надо же. Инструменты нашлись! - SciFi(25.02.2024 22:37)
- Рубрика костыли и велосипеды - Boвa(25.02.2024 22:29)
- Чё, правда? VladislavS.(1 знак., 25.02.2024 13:31, картинка)
- У avr через вызов библиотечной функции с прогоном аргументов
через стек. На дыбу того кто это придумал. У авра 32 РОН-а , для сложения двух
64-х достаточно четырёх команд enc(125 знак., 25.02.2024 21:14)
- Дык на любом ассемблере так :) Интересно, а компилер
умножение/деление на степень двойки сдвигом умеет ?? :) - Adept(25.02.2024 01:27)
- Нет, не на любом. MIPS знаменит отсутствием флага переноса. Ну и
RISC-V тоже. SciFi(1 знак., 25.02.2024 10:29, ссылка)
- И как же ж оно там работает? Или эти крестьяне не занимаются
арифметикой, а только тексты обрабатывают (там реально перенос не
нужен)? - Kpoк(25.02.2024 10:47)
- Вы когда на ЯВУ программы пишете, часто флаг переноса используете?
И как же оно у вас работает? :) - VladislavS.(25.02.2024 13:59)
- Как Вы могли подумать обо мне такое, чтоб я на ваших ЯВУ программы
писал??? А на моём сопроцессоре 80387 аккумулятор имеет 80 бит в
длину. Ему флаг переноса не нужен. И всё-таки я не услышал ответа,
как оно работает. А как делают кольцевой сдвиг? - Kpoк(25.02.2024 16:13)
- Странно, тут всем на микроконтроллерах 256 бит подавай, а вам 80
хватает? А кольцевой сдвиг очень просто VladislavS.(2 знак., 25.02.2024 16:55, картинка, картинка)
- Не понимаю я по-вашему нихира. Но неужели эти 4 команды проще, чем
вытащить один битик наружу? - Kpoк(25.02.2024 17:21)
- Что характерно, плюсовик по-вашему и для ARM, и для RISC-V, и для
AVR понимает. Может вылезти из танчика уже? - VladislavS.(25.02.2024 17:37)
- Из Нирваны, как отмечено ниже. - Kpoк(25.02.2024 17:42)
- Рад, что вы достигли нирваны, если такая мелкая фигня - это всё,
что вас беспокоит :-) - SciFi(25.02.2024 17:25)
- Не всё. Но не вываливать же это в непрофильную конфу. - Kpoк(25.02.2024 17:42)
- А как же и перед кем тогда выёбываться? :) Смотрите я умею, а вы не
умеете, бе-бе-бе? :) - RxTx(25.02.2024 18:36)
- Здесь собрались самодостаточные состоявшиеся мущщины, верно? Зачем
им заниматься такой фигнёй? - SciFi(25.02.2024 18:42)
- Очевидно это доставляет им удовольствие... - RxTx(25.02.2024 18:53)
- Здесь собрались самодостаточные состоявшиеся мущщины, верно? Зачем
им заниматься такой фигнёй? - SciFi(25.02.2024 18:42)
- А как же и перед кем тогда выёбываться? :) Смотрите я умею, а вы не
умеете, бе-бе-бе? :) - RxTx(25.02.2024 18:36)
- Не всё. Но не вываливать же это в непрофильную конфу. - Kpoк(25.02.2024 17:42)
- Что характерно, плюсовик по-вашему и для ARM, и для RISC-V, и для
AVR понимает. Может вылезти из танчика уже? - VladislavS.(25.02.2024 17:37)
- Не понимаю я по-вашему нихира. Но неужели эти 4 команды проще, чем
вытащить один битик наружу? - Kpoк(25.02.2024 17:21)
- Странно, тут всем на микроконтроллерах 256 бит подавай, а вам 80
хватает? А кольцевой сдвиг очень просто VladislavS.(2 знак., 25.02.2024 16:55, картинка, картинка)
- Как Вы могли подумать обо мне такое, чтоб я на ваших ЯВУ программы
писал??? А на моём сопроцессоре 80387 аккумулятор имеет 80 бит в
длину. Ему флаг переноса не нужен. И всё-таки я не услышал ответа,
как оно работает. А как делают кольцевой сдвиг? - Kpoк(25.02.2024 16:13)
- Вы когда на ЯВУ программы пишете, часто флаг переноса используете?
И как же оно у вас работает? :) - VladislavS.(25.02.2024 13:59)
- И как же ж оно там работает? Или эти крестьяне не занимаются
арифметикой, а только тексты обрабатывают (там реально перенос не
нужен)? - Kpoк(25.02.2024 10:47)
- Легко, мой хороший. Если быстрей сдвигами, то компилятор непременно
так и слелает. И не только степени двойки, много других
оптимизаций¸ замены делений умножениями и др. - VladislavS.(25.02.2024 03:10)
- А не "нужное" деление или умножение компилятор выбросит или "тупо"
выполнит? - ILYAUL(25.02.2024 10:14)
- Ну вы как вчера родились. VladislavS.(1 знак., 25.02.2024 11:55, картинка)
- А не "нужное" деление или умножение компилятор выбросит или "тупо"
выполнит? - ILYAUL(25.02.2024 10:14)
- Нет, не на любом. MIPS знаменит отсутствием флага переноса. Ну и
RISC-V тоже. SciFi(1 знак., 25.02.2024 10:29, ссылка)
- Тут ниже понеслось в дебри доказательств на С "возможно всё!" но
смысл был другой. На ASM компактнее по памяти и быстрее по тактам. RxTx(253 знак., 25.02.2024 18:29)
- Как раз таки читать и контролировать что делает компилятор это
совершенно обязательно. Иначе оптимально писать не научишься. - VladislavS.(23.02.2024 16:02)
- Одно время пропагандировали отказ от оптимизации кода
программистом, как от порочной практики. SciFi апологет этой идеи.
Типа компилер сам все сделает лучше. Возвращаемся к началу времен
;) - Codavr(23.02.2024 23:09)
- Есть вещи, к которым возвращаться не нужно. Например избыточные
промежуточные переменные. Их можно убрать? Можно. Но компилятор это
и без вас сделает. Между тем, читабельность с промежуточными
переменными выше. Особенно в части множественных выходов из цикла с
переменной-флагом вместо гоуту, что уже кагбэ не особо очевидно,
да? - Cкpипaч(24.02.2024 00:15)
- Что подразумевается под словами научиться оптимально писать
контролируя, что делает компилятор? Хочу все знать. Уверен, что нет
тут никого, кто доподлинно знает все методы которыми пользуется тот
же оптимизатор IAR и наверняка там есть ноухау известные только
узкому кругу лиц. - Codavr(24.02.2024 02:14)
- > Уверен, что нет тут никого... Методы опттимизации дерева с трехадресным кодом предмет
академических публикаций. Методы бэкенда, самой основной проблемой
из которых является register allocation problem RxTx(1394 знак., 24.02.2024 16:55)
- Ну то есть чего компилятор нагенерит именно от этого ноухау и
зависит. Не так ли? Я рад что нашелся человек знающий все эти
ноухау. Или не все ;) - Codavr(25.02.2024 23:22)
- Не матерись! :))) - RxTx(25.02.2024 23:56)
- Ну то есть чего компилятор нагенерит именно от этого ноухау и
зависит. Не так ли? Я рад что нашелся человек знающий все эти
ноухау. Или не все ;) - Codavr(25.02.2024 23:22)
- В документации IAR кое что есть. VladislavS.(27 знак., 24.02.2024 10:32, картинка, картинка)
- Это не я сказал. Но в общем, я бы под "контролируя" понял осознание
программистом в какие в принципе конструкции выливается то, что он
пишет. Утрируя, на уровне как выполняется данное конкретное
присвоение? Как пересылка байта из регистра в регистр или как
создание в куче мегабайтных объектов, с инициализацией их по сети и
только потом пересылкой одного байта? - Cкpипaч(24.02.2024 10:00)
- Что-то типа. С опытом у программиста появляются "волшебные очки", которыми он сквозь код видит. VladislavS.(322 знак., 24.02.2024 10:47)
- > Уверен, что нет тут никого... Методы опттимизации дерева с трехадресным кодом предмет
академических публикаций. Методы бэкенда, самой основной проблемой
из которых является register allocation problem RxTx(1394 знак., 24.02.2024 16:55)
- Что подразумевается под словами научиться оптимально писать
контролируя, что делает компилятор? Хочу все знать. Уверен, что нет
тут никого, кто доподлинно знает все методы которыми пользуется тот
же оптимизатор IAR и наверняка там есть ноухау известные только
узкому кругу лиц. - Codavr(24.02.2024 02:14)
- Нет, код должен быть написан так чтобы компилятор всё сделал. - VladislavS.(24.02.2024 00:09)
- Кто- то чего-то не договаривает. - Codavr(24.02.2024 02:06)
- Недоговаривают все. 1) Программизд лепит код на основе чужих
библиотек которые были предназначены для чего-то другого. 2)
Компилатор делает код как умеет на основе того что ему написали и
не переспрашивает. 3) Програмизд не умеет в асемблер и разбираться
в нагеренном говнокоде ему лень. 4) Поэтому если "переписать на
питоне" код будет работать немного быстрее, нужно всего лишь
поставить i7. - Boвa(24.02.2024 07:10)
- Если "переписать на Питоне", код будет работать через две недели.
Это достаточно быстро. - Cкpипaч(24.02.2024 09:56)
- При этом одну неделю займет скачивание необходимых библиотек. - Boвa(25.02.2024 11:45)
- Точнее не скачивание, а компиляция из исходников. А может быть уже скомпиленная по другую версию питона, а под твою - фиг. Я почти неделю и потратил как-то, чтобы запустить чужой скрипт тестовый, подбирал версию библиотек и питона. - Andreas(25.02.2024 14:02)
- Хуже другое - если под Питон не будет подходящей библиотеки, то для
99% питонистов задача нерешаемая. Тупик... и начинается
красноглазие - целых стек технологий, разнообразные скрипты и
прочее и прочее. Зоопарк айтишного тщеславия. - POV(25.02.2024 11:49)
- Двояко. С одной - зоопарк, все именно так. С другой - вопрос сильно напоминает про рукопашный бой в армии (два придурка проебали автоматы, ножи и т.п.). Мы же практики, существуют ли практические задачи, под которые нет готовых стеков? И даст ли "внутренняя красота" написанного в одно рыло от нуля до нуля практический результат? - Cкpипaч(25.02.2024 12:07)
- При этом одну неделю займет скачивание необходимых библиотек. - Boвa(25.02.2024 11:45)
- :))) - Codavr(24.02.2024 09:45)
- Если "переписать на Питоне", код будет работать через две недели.
Это достаточно быстро. - Cкpипaч(24.02.2024 09:56)
- Недоговаривают все. 1) Программизд лепит код на основе чужих
библиотек которые были предназначены для чего-то другого. 2)
Компилатор делает код как умеет на основе того что ему написали и
не переспрашивает. 3) Програмизд не умеет в асемблер и разбираться
в нагеренном говнокоде ему лень. 4) Поэтому если "переписать на
питоне" код будет работать немного быстрее, нужно всего лишь
поставить i7. - Boвa(24.02.2024 07:10)
- Кто- то чего-то не договаривает. - Codavr(24.02.2024 02:06)
- Есть вещи, к которым возвращаться не нужно. Например избыточные
промежуточные переменные. Их можно убрать? Можно. Но компилятор это
и без вас сделает. Между тем, читабельность с промежуточными
переменными выше. Особенно в части множественных выходов из цикла с
переменной-флагом вместо гоуту, что уже кагбэ не особо очевидно,
да? - Cкpипaч(24.02.2024 00:15)
- Одно время пропагандировали отказ от оптимизации кода
программистом, как от порочной практики. SciFi апологет этой идеи.
Типа компилер сам все сделает лучше. Возвращаемся к началу времен
;) - Codavr(23.02.2024 23:09)
- Сегодня приснился пример Compiler vs ASM сложения многобитных
чисел. На ARM ассемблере это просто серия add-with-carry ADC... - RxTx(24.02.2024 16:29)