ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้
-
- Про масштаб эффекта расширения XW на примере моего проекта на
CH59x: il-2(691 знак., 11.03.2025 06:48)
- Цифры - страшная сила, особенно в умелых руках. Если не 150к таблиц
в коде, то разница впечатляет мизерностью. - Andreas(11.03.2025 09:31)
- Вообще-то да. Сейчас глянул навскидку map-файл. Из всего этого кода
около 10Кб - это мои исходники. Все остальное - библиотека BLE. Так
что правильнее наверное смотреть контраст на фоне 10кБ. 200 байт на
фоне 10Кб - это уже 2% :-) Не много, но и не так уж мало. - il-2(11.03.2025 09:50)
- Сейчас часто критично не объем памяти, а быстродействие. Возможно
там быстродействие выросло больше, не смотря на скромное уменьшение
объема - AlexBi(11.03.2025 11:23)
- Быстродействие - это расшивание узкого места. Там можно и асм, если
оч. надо. А если у вас какое-то другое быстродействие, то оно
неправильное. - SciFi(11.03.2025 11:25)
- Быстродействие именно это, только оно может появляться без
привлечения АСМа. У вас не было такого что без включенной
оптимизации в компиляторе оно не работает, т.е. не успевает? АСМ -
крайняя мера, лучше обходиться без него. - AlexBi(11.03.2025 12:59)
- Было разок за годы, причем при изменении в другом месте переставало работать. Да еще и при переходе на другую версию компилера может перестать работать.Или начнет. Напрягся, переписал кусочек команд на 50 на асм и забыл про весь этот неустойчивый гимор. - Andreas(11.03.2025 13:06)
- Когда-то давно было, нужно было обработчик прерывания допилить. Ну,
допилил. Уж там точно вот эти XW инструкции никак не помогли бы. - SciFi(11.03.2025 13:05)
- Разве плохо, когда кто-то за тебя все сделал и добавил в компилер
поддержку? И прога даром и бесплатно стала чуть короче. - Andreas(11.03.2025 13:10)
- Подъехали дополнительные сведения. На сайте Renesas можно скачать тулчейн LLVM+clang для RISC-V. Там LLVM 19.1.7, он умеет -march=rv32ec_xwchc. Проверил - действительно умеет. И никаких китайских форков. - SciFi(15.03.2025 22:26)
- Я только за. Но здесь "поддержка" в китайском форке GCC, и там есть ряд оговорок. А так да. С другой стороны, это я зажрался, наверное. Для того же стм8 если бы был хоть какой-то форк GCC с более-менее вменяемой генерацией кода, оторвали бы с руками :-) - SciFi(11.03.2025 13:13)
- Разве плохо, когда кто-то за тебя все сделал и добавил в компилер
поддержку? И прога даром и бесплатно стала чуть короче. - Andreas(11.03.2025 13:10)
- Быстродействие именно это, только оно может появляться без
привлечения АСМа. У вас не было такого что без включенной
оптимизации в компиляторе оно не работает, т.е. не успевает? АСМ -
крайняя мера, лучше обходиться без него. - AlexBi(11.03.2025 12:59)
- Быстродействие - это расшивание узкого места. Там можно и асм, если
оч. надо. А если у вас какое-то другое быстродействие, то оно
неправильное. - SciFi(11.03.2025 11:25)
- Это зависит от того, мы покупаем или продаём :-) - SciFi(11.03.2025 09:56)
- вот да , недавно переделывал под больший экран, прошивка чуть 50к
превысили и я начал нервничать и думать об оптимизации. А потом
вспомнил, что проц с 128к оказался дешевле и в итоге им закупились. - Andreas(11.03.2025 10:31)
- Продался за копейку! А мог бы покрасноглазить денёк-другой :-) - SciFi(11.03.2025 10:34)
- вот да , недавно переделывал под больший экран, прошивка чуть 50к
превысили и я начал нервничать и думать об оптимизации. А потом
вспомнил, что проц с 128к оказался дешевле и в итоге им закупились. - Andreas(11.03.2025 10:31)
- Сейчас часто критично не объем памяти, а быстродействие. Возможно
там быстродействие выросло больше, не смотря на скромное уменьшение
объема - AlexBi(11.03.2025 11:23)
- Вообще-то да. Сейчас глянул навскидку map-файл. Из всего этого кода
около 10Кб - это мои исходники. Все остальное - библиотека BLE. Так
что правильнее наверное смотреть контраст на фоне 10кБ. 200 байт на
фоне 10Кб - это уже 2% :-) Не много, но и не так уж мало. - il-2(11.03.2025 09:50)
- А разговоров-то было! - SciFi(11.03.2025 08:05)
- Цифры - страшная сила, особенно в умелых руках. Если не 150к таблиц
в коде, то разница впечатляет мизерностью. - Andreas(11.03.2025 09:31)
- xw - расширение - неоднозначно, с одной стороны чтение и запись
портов 8 или 16 бит упаковывается команда, с другой стороны -
использование типов uint16_t и uint8_t приводит к дополнительным
командам в коде по наложению маски! Zikon(339 знак., 10.03.2025 10:14)
- Насколько мне известно, стандартный GCC не ругается, когда ему в
параметрах архитектуры добавляешь xw. Вроде бы, это расширение уже
включили в ванильную ветку. - Nikolay_Po(10.03.2025 18:39)
- расширение xw - содержит 8 команд, 4 команды взяты у Huawei, а 4
команды, что со стеком добавили сами. Стандартное расширение Zcb
имеет 4 команды, что без стека, но OPкод совсем другой и более
обрезанные по части смещения. А gcc всё что можно, то и будет
поддерживать! - Zikon(10.03.2025 19:44)
- А где почитать что за инструкции? - Andreas(10.03.2025 19:53)
- В RM на ядро " XW: 16-bit compression instruction for
self-extending byte and half-word operations. Note: To further
improve code density, extend the XW subset by adding the following
compression directives c.lbu/c.lhu/c.sb/c.sh/c.lbusp/ c.lhusp/c.sbsp/c.shsp, use based on the MRS compiler or the toolchain it provides." - petrd(10.03.2025 20:04)
- Как связаны LLVM с GCC? Nikolay_Po(179 знак., 11.03.2025 16:10, ссылка)
- Это я видел, но что это за инструкции? - Andreas(10.03.2025 20:06)
- Товарищи китайцы такие затейники (инфа из LLVM): SciFi(2 знак., 10.03.2025 20:40, ссылка, картинка)
- Вот тут petrd(145 знак., 10.03.2025 20:11, ссылка)
- В RM на ядро " XW: 16-bit compression instruction for
self-extending byte and half-word operations. Note: To further
improve code density, extend the XW subset by adding the following
compression directives c.lbu/c.lhu/c.sb/c.sh/c.lbusp/ c.lhusp/c.sbsp/c.shsp, use based on the MRS compiler or the toolchain it provides." - petrd(10.03.2025 20:04)
- А где почитать что за инструкции? - Andreas(10.03.2025 19:53)
- расширение xw - содержит 8 команд, 4 команды взяты у Huawei, а 4
команды, что со стеком добавили сами. Стандартное расширение Zcb
имеет 4 команды, что без стека, но OPкод совсем другой и более
обрезанные по части смещения. А gcc всё что можно, то и будет
поддерживать! - Zikon(10.03.2025 19:44)
- Нет там аппаратного стека, там есть аппаратный механизм сохранения
10 регистров в пользовательский стек, по времени это так же как и
программное сохранение. - petrd(10.03.2025 11:35)
- Тогда непонятно ограничение 2 уровнями, если в общий стек пихают,
какая разница сколько уровней? - Andreas(10.03.2025 12:08)
- Ограничили вложенность прерываний! Только у ch32v30x (QK_V4F) аппаратный стек 3 уровня и вложенность до 8, после 3-х пишет в память - Zikon(10.03.2025 15:20)
- Это про вытеснение. - petrd(10.03.2025 12:11)
- А вот и не факт. Во 1-х в манулах на ядра QingKe явно описывается
HPE как аппаратный стек. Конечно, реализация может не
соответствовать описанию - китайцы большие затейники в этом плане.
Однако есть еще кое-какие интересные биты в регистрах CSR, которые
указывают на аппаратную реализацию HPE: il-2(613 знак., 10.03.2025 14:41)
- Факт. Речь шла про V003, а значит ядро V2. V3 и V4 не трогаю,
говорю только про V2. petrd(703 знак., 10.03.2025 15:27)
- Ну вот, кое что проясняется. il-2(471 знак., 10.03.2025 15:55)
- СH32V003. Все прерывания в моем коде имеют атрибут
__attribute__((interrupt("WCH-Interrupt-fast"))). petrd(163 знак., 10.03.2025 16:32, картинка)
- А вот сработало первое прерывание и MPOP = 1. petrd(1 знак., 10.03.2025 16:43, картинка)
- СH32V003. Все прерывания в моем коде имеют атрибут
__attribute__((interrupt("WCH-Interrupt-fast"))). petrd(163 знак., 10.03.2025 16:32, картинка)
- Ну вот, кое что проясняется. il-2(471 знак., 10.03.2025 15:55)
- Аппаратный стек - это такой, который сохраняет все регистры за 1
такт. Если для сохранения нужно по 1 такту на регистр, то толку с
того "аппаратного стека"? - =AlexD=(10.03.2025 14:55)
- Вот из мануала на QK_V4 ( здесь 3 уровня - это для V4F , для
остальных V4 - будет 2) ( V3 - тоже аппаратный стек есть 2 -
уровня) ( V2 - нет аппаратного стека ) Zikon(1 знак., 10.03.2025 15:13, картинка)
- Картинка не отвечает на вопрос о латентности. - =AlexD=(10.03.2025 15:26)
- Вот из мануала на QK_V4 ( здесь 3 уровня - это для V4F , для
остальных V4 - будет 2) ( V3 - тоже аппаратный стек есть 2 -
уровня) ( V2 - нет аппаратного стека ) Zikon(1 знак., 10.03.2025 15:13, картинка)
- Факт. Речь шла про V003, а значит ядро V2. V3 и V4 не трогаю,
говорю только про V2. petrd(703 знак., 10.03.2025 15:27)
- А вот и не факт. Во 1-х в манулах на ядра QingKe явно описывается
HPE как аппаратный стек. Конечно, реализация может не
соответствовать описанию - китайцы большие затейники в этом плане.
Однако есть еще кое-какие интересные биты в регистрах CSR, которые
указывают на аппаратную реализацию HPE: il-2(613 знак., 10.03.2025 14:41)
- Hardware Prologue/Epilogue (HPE) - я неправильно Hardware - понял? - Zikon(10.03.2025 11:51)
- ну и как он за 1 такт сохранит 10 регистров в памяти ? Да и разница
по времени всё-таки есть! - Zikon(10.03.2025 11:46)
- Немного ошибся в v003 - нет теневых регистров, в старших qkV4 - есть теневой аппаратный стек до 3-х уровней с сохранением 16-ти регистров, а в v003 действительно идет сохранение в стек и происходит быстро, потому что не надо декодировать комманды. Надо на x033 или v203 - проверить. - Zikon(10.03.2025 12:20)
- Никак он за 1 такт не сохранит. 2 такта на сохранение регистра * 10 +... Klen раньше уже исследовал petrd(1 знак., 10.03.2025 12:12, ссылка)
- У вас на клаве восклицательный знак залип :-) Вот кто-то не поленился и измерил при помощи осциллографа >>> SciFi(1 знак., 10.03.2025 11:50, ссылка)
- Тогда непонятно ограничение 2 уровнями, если в общий стек пихают,
какая разница сколько уровней? - Andreas(10.03.2025 12:08)
- Насколько мне известно, стандартный GCC не ругается, когда ему в
параметрах архитектуры добавляешь xw. Вроде бы, это расширение уже
включили в ванильную ветку. - Nikolay_Po(10.03.2025 18:39)
- Про масштаб эффекта расширения XW на примере моего проекта на
CH59x: il-2(691 знак., 11.03.2025 06:48)