реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Во сколько раз больше будет код если писать на с/с++, а не на ассембелере?, Например для ARM9
I2S
сообщение Oct 22 2006, 16:04
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 22-10-06
Пользователь №: 21 559



Люди! Кто прикидывал во сколько раз больше получается код если писать прогу на сях, а не ассемблере? Мне хотя бы грубо.
Go to the top of the page
 
+Quote Post
makc
сообщение Oct 22 2006, 17:19
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Цитата(I2S @ Oct 22 2006, 20:04) *
Люди! Кто прикидывал во сколько раз больше получается код если писать прогу на сях, а не ассемблере? Мне хотя бы грубо.


Вам не приходило в голову, что одну и ту же функцию можно реализовать по-разному? При этом у каждого компилятора C/C++ есть варианты оптимизации, в зависимости от того, что Вам нужно - скорость или размер.
Кроме того, опытный разработчик может написать эффективную и компактную реализации на С того алгоритма, который неопытный разработчик сделает большой и медленной на ассемблере.
Итог - уточните Ваш вопрос.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Oct 23 2006, 06:33
Сообщение #3


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Хехе, начинается... Под аРМ даже прикидывать не хочется. Если просто смотреть на код IAR и realview, то мне кажется, что я смог бы написать лишь на 5-10 % короче, причем скорее 5, чем 10.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Oct 23 2006, 08:39
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Опять же от проекта зависит. Сколько кода непосредсвенно Вашего (на асм-е), сколько чужого (библиотеки), сколько констант (тех-же строковых порой пол проекта)?

Ну а дальше всё уже упирается в способности компилятора, которые порой проявляют "чудеса изобретательности. Понятно что эти чудеса можно и самому писать, но трудоёмкость отличается в разы.
Go to the top of the page
 
+Quote Post
gormih
сообщение Oct 23 2006, 20:05
Сообщение #5


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(I2S @ Oct 22 2006, 20:04) *
Люди! Кто прикидывал во сколько раз больше получается код если писать прогу на сях, а не ассемблере? Мне хотя бы грубо.



В общем случае я ответил бы так:
В идеале - ни на сколько smile.gif
Однако все зависит от многих факторов.
Я видел программистов, которые на ассемблере пишут код хуже, чем тот же алгоритм написать на си - но это частные случаи.
В основном же все зависит от того, на сколько опытный программист ... на сколько глубоко он понимает принципы работы компилятора си, каким хотя бы примерно (структурно) будет код на ассемблере после компиляции си проекта.
Однако, многое еще зависит и от компилятора. Применительно к AVR мне лично очень сильно не понравился winavr - код громоздкий и неуклюжий... Сейчас пока остановился на codevision ввиду того, что с ассемблерными вставками трудоемкость создания кода наряду с его конечной производительностью очень сильно впечатляет. IAR честно скажу не пробовал. Все компиляторы обладают своим уровнем оптимизации... но ни один из них конечно не заменит чистого ассемблера - но это еще раз повторяю, применительно к AVR. А вот если например взять старое доброе ядро 8051, то тут дело обстоит совсем иначе... Здесь например очень порадовал компилятор Keil uVision - оптимизация и лаконичность кода просто поражает, и не думаю, что под данное ядро стоит писать на языке ассемблера вовсе (при условии, коненчо, что не будешь "гнать пургу" на си).
При всем при этом хочу заметить, что на настоящий момент применение ассемблера для создания целого проекта практически нецелесообразно. (бывают конечно частные случаи, но довольно редко)
Трудоемкость - выше, читабельность исходника при негустых коментариях и непонятных названиях переменных практически нулевая smile.gif А выигрыш - ну максимум 10 % в размере/скорости работы ПО при самом хорошем компиляторе.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
KA_ru
сообщение Nov 6 2006, 11:00
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 424
Регистрация: 4-10-04
Из: Berlin
Пользователь №: 775



хотел бы я посмотреть на ассемблерный проект в 100К строчек.
про переносимость можно просто забыть.
Go to the top of the page
 
+Quote Post
mse
сообщение Nov 6 2006, 11:10
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(KA_ru @ Nov 6 2006, 14:00) *
хотел бы я посмотреть на ассемблерный проект в 100К строчек.
про переносимость можно просто забыть.

Ассемблерный проет в 100к строк это очень круто. ;О) Если имеются в виду строки кода.
20К строк, как правило, это управление весьма непростым прибором с навороченой логикой работы и неимоверным кол-вом математики.
А что касаемо переносимости, да всё прекрасно переносится.
Цитата
А выигрыш - ну максимум 10 % в размере/скорости работы ПО при самом хорошем компиляторе.

Нискажите. Например в арифметике может отличаться в разы. Деление, например, в общем. И деление на константу, в частности. Наиболее ярко разница может проявиться на малоразрядных контроллерах. А если это критическая секция, то... ;О)
Go to the top of the page
 
+Quote Post
gormih
сообщение Nov 6 2006, 11:11
Сообщение #8


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Цитата(KA_ru @ Nov 6 2006, 14:00) *
хотел бы я посмотреть на ассемблерный проект в 100К строчек.
про переносимость можно просто забыть.


blink.gif
1) Никто и не предлагает писать 100 к на ассемблере
2) Переносимость си с ядра на ядро тоже не является легким делом, не будем лукавить. У всех ядер свои архитектурные особенности, свои компиляторы со своими багами, и если все это учитывать - про переносимость в большинстве случаев тоже можно забыть glare.gif


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
DASM
сообщение Nov 6 2006, 13:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



mse не слушайте , он все время жжот
Go to the top of the page
 
+Quote Post
VslavX
сообщение Nov 6 2006, 13:35
Сообщение #10


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(gormih @ Nov 6 2006, 13:11) *
1) Никто и не предлагает писать 100 к на ассемблере
2) Переносимость си с ядра на ядро тоже не является легким делом, не будем лукавить. У всех ядер свои архитектурные особенности, свои компиляторы со своими багами, и если все это учитывать - про переносимость в большинстве случаев тоже можно забыть glare.gif

"Тяжело только первую тысячу лет" © Шекли
В-общем-то, один из наших проектов - 100K+ сишных строк мигрировал так: x186->AVR->MSP430->MBM90->ARM7.
Сложным был только первый порт (до двух недель ковырялись), а все остальные - за день-два. То есть - один раз себя дисциплинируешь, а дальше оно само катится.
Что до subj - имхо, ARM имеет очень "враждебный" по отношению к человеку ассемблер. Писать на нем нудно и долго. И не всегда эффективно. У меня был пример - процедура вычисления кода Хемминга для сектора NAND - сначала я этот кусочек написал на ассемблере, потом - на C. И надо признать, что GCC компилятор у меня в тот раз выиграл. И не потому, что я плохо знал архитектуру ARM smile.gif Просто компилятор - он же "железный" - рассматривает все возможные оптимизации и выбирает лучший вариант. А программисту обычно лень подумать несколько раз над одной и той же проблемой. В итоге, в моем случае C-компилятор хитро поскрещивал арифметические операции со сдвигами и уловными флагами и получил код в полтора раза быстрее и короче чем мой "ручной". Мне оставалось только "убить сибя ап стену" smile.gif
Go to the top of the page
 
+Quote Post
msn
сообщение Nov 6 2006, 14:01
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 126
Регистрация: 1-01-06
Из: Украина, Киев
Пользователь №: 12 759



Как писали выше все ОЧЕНЬ сильно зависит от мастерства программиста.
Например, неделю назад писал функцию автокалибровки (C8051F06x, есть 9 каналов по 8 под диапазонов на каждом, калибровка по 12^2 отсчетам) из оболочки передается структура с кол-вом калибруемых поддиапазонов, индексами поддиапазонов и количеством напряжений на поддиапазон, например -5, -2, +2 и +5. За полчаса на Си (Keil uVision 3 котрая оптимизировалась под 8051 ~10 лет) написал ф-н. Все бы хорошо но она занимает 3 К (Flash вполне хватает 64K), но для одной функции (~50 строчек) без делений и умножений (только суммирование и сдвиги) это чересчур. Начал оптимизировать на Си – уменьшилась до 2.3 K, но код стал настолько запутанным что смысл Си как языка верхнего уровня почти пропал. Переписал на ASM ~ 0.7K но уже 300 строчек. Так что получился выигрыш > 4 раз, но времени ушло в раз 6-8 больше. На ARM может лучше компилятор работает, но выигрыш в на 5-10% на asm уж очень мало, либо программа пишется в лоб без всякой оптимизации. На asm программу можно так оптимизировать под конкретное ядро что ни один компилятор не сможет тягаться. Но на мой взгляд на Asm имеет смысл только для узких мест (максимальное быстродействие или если памятью совсем напряг) остальное или хотя каркас на Си.

Сообщение отредактировал msn - Nov 6 2006, 14:25
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Nov 6 2006, 14:48
Сообщение #12


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(DASM @ Nov 6 2006, 16:17) *
mse не слушайте , он все время жжот

bb-offtopic.gif Похоже, праздник удался biggrin.gif



--------------------
شامل
Go to the top of the page
 
+Quote Post
VslavX
сообщение Nov 6 2006, 16:38
Сообщение #13


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(msn @ Nov 6 2006, 16:01) *
Как писали выше все ОЧЕНЬ сильно зависит от мастерства программиста.
Например, неделю назад писал функцию автокалибровки (C8051F06x, есть 9 каналов по 8 под


Одно дело - асм 51-го:
[метка:] мнемоника
+ [операнд приемник]
+ [операнд источник]

Другое дело - асм ARM:
[метка:] мнемоника
+ [суффикс типа]
+ [условный суффикс]
+ [операнд приемник]
+ [первый операнд источник]
+ [второй операнд источник]
+ [код операции сдвига второго операнда]
+ [аргумент операции сдвига]

Видите сколько возможностей во втором случае? И далеко не всегда самый оптимальный путь сразу очевиден. Даже для опытного человека smile.gif
Go to the top of the page
 
+Quote Post
msn
сообщение Nov 6 2006, 17:42
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 126
Регистрация: 1-01-06
Из: Украина, Киев
Пользователь №: 12 759



Цитата(VslavX @ Nov 6 2006, 18:38) *
Цитата(msn @ Nov 6 2006, 16:01) *

Как писали выше все ОЧЕНЬ сильно зависит от мастерства программиста.
Например, неделю назад писал функцию автокалибровки (C8051F06x, есть 9 каналов по 8 под


Одно дело - асм 51-го:
[метка:] мнемоника
+ [операнд приемник]
+ [операнд источник]

Другое дело - асм ARM:
[метка:] мнемоника
+ [суффикс типа]
+ [условный суффикс]
+ [операнд приемник]
+ [первый операнд источник]
+ [второй операнд источник]
+ [код операции сдвига второго операнда]
+ [аргумент операции сдвига]

Видите сколько возможностей во втором случае? И далеко не всегда самый оптимальный путь сразу очевиден. Даже для опытного человека smile.gif

Мне Asm ARM тоже не очень нравится. Но тут как я понял товарищ не от нечего делать спрашивает, наверное нужда заставляет. Я бы, например для ADSP тоже на Си все писал если бы проги не увеличивались в 4-5 раза! А ASM c его многофункциональными командами, модификаторами тоже не подарок.
Пример привел для 8051, потому что были записаны объемы функций для Си и Asm.

Сообщение отредактировал msn - Nov 6 2006, 17:45
Go to the top of the page
 
+Quote Post
Alex03
сообщение Nov 7 2006, 04:21
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(mse @ Nov 6 2006, 16:10) *
Нискажите. Например в арифметике может отличаться в разы. Деление, например, в общем. И деление на константу, в частности. Наиболее ярко разница может проявиться на малоразрядных контроллерах. А если это критическая секция, то... ;О)


А вот тут не факт что вы лучше напишете.
Деление на константу многие компиляторы умеют не хуже человека на асм-е.
Притом в случае с С-ями можно определить эту константу простым define-ом, и
менять хоть сто раз, при перекомпиляции компиллер всё что надо сделает.
А вот в случае с АСМ-овой реализацией надо код переписывать каждый раз.

Хотя согласен что человек всегда может сделать лучше, компактней, быстрее, но дольше.
В конце концов можно ж и от Си идти, скомпилял Си-шный прототип, поглядел что получилось, попробовал оптимизировать. smile.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 00:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01501 секунд с 7
ELECTRONIX ©2004-2016