Jump to content

    

CH32V307 Test

Recommended Posts

spirit_1

Решили попробовать частично перейти на китайские контроллеры CH32 взамен СТМ32

Для начала решил стравнить   производительность.

Был создан длинный цикл в коттором выполнялось несколько  операций -взятие из массива , умножение. деление сложение , возврат результата в массив

Все целочисленное

Сравнени происходило с стм32ф429 vs CH32V307

частоты обеих шин были 144 мгц(макс для китайца)

Первый тест показал отставание китайца раза в 2

Анализ кода выяввил что ассемблер использует  медленную операцию деленя у китайца. После оптимизации  настроек компилятора стал работать нормально

Общее отсавание китайца гдето 15-18% что думаю очень неплохо за  такие деньги

Код на асме при этом длиннее раза в 2 у китайца , но он RISC , думаю это нормально по сравнению в АРМ

Share this post


Link to post
Share on other sites

HardEgor
4 часа назад, spirit_1 сказал:

Сравнение происходило с стм32ф429 vs CH32V307

А правильно писать не умеете? Или это теперь  такая реклама? )

STM32F429 vs CH32V307

Share this post


Link to post
Share on other sites

Obam

Код на асме при этом длиннее раза в 2 у китайца , но он RISC , думаю это нормально по сравнению в АРМ


Дык STM32 тоже, как ни удивительно, RISC (-8Ж и MSP430 тоже (хоть и не в тему).

Share this post


Link to post
Share on other sites

adnega
1 час назад, Obam сказал:


Дык STM32 тоже, как ни удивительно, RISC (-8Ж и MSP430 тоже (хоть и не в тему).

У 32-битного STM32 есть 16-битные инструкции. Считается, что смесь 16/32-Thumb-2 на четверть плотнее 32-ARM, и на четверть производительнее 16-Thumb.

С RISC-V не знаком. Говорят, что в CH32V307 набор команд IMAFC, буковка C - означает, что инструкции могут быть короткими.

Видимо, ТС имел ввиду две разные RISC системы команд: RISC-V-IMAFC и Thumb-2, и почувствовал их различия.

ТС может, стоит компилятору как-то дать понять о всем наборе инструкций выбранного МК?

Share this post


Link to post
Share on other sites

makc
7 часов назад, adnega сказал:

С RISC-V не знаком. Говорят, что в CH32V307 набор команд IMAFC, буковка C - означает, что инструкции могут быть короткими.

Да, все верно, но только в сравнении плотности и скорости кода это ему мало помогает судя по моему личному опыту: RV32IMC проигрывает Thumb-2 по размеру прошивки приблизительно 25-30%, а по скорости, в зависимости от сложности алгоритма, может проиграть ещё больше. Так, например, реализация ЭЦП на эллиптических кривых из-за невозможности эффективной реализации умножения больших чисел проигрывает чуть ли в 1.5 - 2 раза (на сколько я помню).

Share this post


Link to post
Share on other sites

adnega

Вроде, за это RISC-V и критикуют, типа, перегнули уж в сторону упрощения. И поговаривают, что ARM не такой уж и RISC, а местами очень даже и CISC ;)

Насколько я понял, в RISC-V можно добавлять свои команды - может, появятся в будущем команды вида "сделай все хорошо".

Share this post


Link to post
Share on other sites

makc
4 часа назад, adnega сказал:

Вроде, за это RISC-V и критикуют, типа, перегнули уж в сторону упрощения.

На Хабре недавно писали, что такое упрощение даёт хорошие преимущества реализациям этой системы команд в процессорах. А вот для микроконтроллеров, у которых нет кешей, блоков предсказания ветвления и т.п. это по-видимому выходит боком.

4 часа назад, adnega сказал:

Насколько я понял, в RISC-V можно добавлять свои команды - может, появятся в будущем команды вида "сделай все хорошо".

Не совсем так: безусловно можно делать свои расширения, но это принципиально ничем не отличается от реализации своего блока ускорения какого-то алгоритма или чего-то в этом роде. Есть же МК с аппаратными блоками шифрования данных, расчета CRC и т.п. 

И совсем другое дело обеспечение стандартизации расширения системы команд в комитете RISC-V и реализация эффективной поддержки этого расширения в компиляторах. Поэтому процесс развития идёт неспешно, но идёт. А ведь потом ещё нужно дождаться реализации этих решений в железе...

В этом плане ARM и его Thumb2 выглядит практически идеально: они почти сразу попали если не в 10ку, то очень очень близко, что в значительной степени и обеспечивает им популярность.

PS: https://github.com/riscv/riscv-code-size-reduction

Share this post


Link to post
Share on other sites

adnega
28 минут назад, makc сказал:

А вот для микроконтроллеров

Я в подавляющем большинстве случаев использую ядро только с целью инициализации периферии.

Если и надо что-то посчитать, то это не загружает ядро значительно.

Есть, конечно, исключения, но это как обычно - заказчик хочет больше и больше.

28 минут назад, makc сказал:

Не совсем так: безусловно можно делать свои расширения, но это принципиально ничем не отличается от реализации своего блока ускорения какого-то алгоритма или чего-то в этом роде. Есть же МК с аппаратными блоками шифрования данных, расчета CRC и т.п.

Согласен. Я тоже в основном рассчитываю на периферию.

Принципиальное различие, по-моему, лишь в том, что инструкции работают с РОН, а периферийные блоки - это как бы память - считай тормоза. Т.е. систему команд эффективно расширять, если нужно что-то часто и сложно делать над данными в РОН, для всего остального - периферийный ускоритель.

Thumb-2 - это читерство - посмотрели какие команды чаще всего используются ЯВУ и их оптимизировали - отсюда и результат.

Жду отладку на CH32V307 - нужно самому пощупать. Пока пытаюсь читать по теме. Есть что-то годное?

Я нашел "Цифровая схемотехника и архитектура компьютера: RISC-V" Сара Л. Харрис, Дэвид Харрис, под редакцией А. Ю. Романова

Share this post


Link to post
Share on other sites

makc
20 минут назад, adnega сказал:

Thumb-2 - это читерство - посмотрели какие команды чаще всего используются ЯВУ и их оптимизировали - отсюда и результат.

Я бы не назвал это читерством, это скорее грамотный анализ предметной области и правильная реализация на его основе. Красивыми идеями сыт не будешь... Тут не шашечки нужны, нужно ехать.

22 минуты назад, adnega сказал:

Жду отладку на CH32V307 - нужно самому пощупать. Пока пытаюсь читать по теме. Есть что-то годное?

Из литературы ничего не подскажу, кроме стандарта на ISA и её расширения + описания конкретных реализаций. И ещё стоит посмотреть ассемблерные листинги имеющихся исходников, скомпилированных gcc под RV32IMC - это хорошо помогает понять, что это такое. И заодно оценить и другие узкие места этой архитектуры, в частности отсутствие аппаратного сохранения контекста в стеке при вызове обработчика прерывания, в отличие от привычного Cortex-M3/M4.

Share this post


Link to post
Share on other sites

Obam

У 32-битного STM32 есть 16-битные инструкции. Считается, что смесь 16/32-Thumb-2 на четверть плотнее 32-ARM, и на четверть производительнее 16-Thumb.


Спасибо, Сap (-8Ж

поговаривают, что ARM не такой уж и RISC, а местами очень даже и CISC ;)


По сравнению с MSP430 (одна стр, 27 команд - UAL QRC 5(?)стр, не считал) таки да, были бы операнды "память-память" - вполне себе.

В этом плане ARM и его Thumb2 выглядит практически идеально: они почти сразу попали если не в 10ку, то очень очень близко, что в значительной степени и обеспечивает им популярность


Если учесть, чтO от нормальной 32-разрядной архитектуры оставляла Thumb (R8-R12 практически балласт ну и тд) - выхода не было.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.