Easyelectronics.ru

Электроника для всех
Текущее время: 19 окт 2021, 07:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 200 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 00:02 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
Всем привет, собственно вопрос в заголовке, есть ли какие-нибудь методы, которые позволят определить на сколько та или иная функция или вся программа целиком, написана эффективно т.е. соответствует минимальному количеству занимаемой памяти программ и тактов процессора, необходимых для выполнение программы, которой в свою очередь предъявляется некоторый список требований?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 00:29 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6175
Откуда: Москва
Да, это называется профилированием.

http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 0%BA%D0%B0)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 00:59 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5442
абсолютного критерия эффективного кода нет. Есть "хорошие правила" как писать эффективный код и если взять программу то почти любую можно хоть чуть чуть но улучшить как с точки зрения оптимизации логики так и с точки зрения применения "хороших правил", а после оптимизации можно сделать сравнительный объективный анализ занимаемой памяти, размера кода и производительности "до" и "после"

насчет "хороших правил" можете тут почитать http://chipenable.ru/index.php/programm ... -code.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 07:01 
Старожил
Аватара пользователя

Зарегистрирован: 20 апр 2010, 17:59
Сообщения: 1208
Откуда: Челябинск
Код выполняет поставленные задачи - эффективный, не выполняет - не эффективный :)

_________________
Everybody lies


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 08:55 
Заглядывает иногда

Зарегистрирован: 23 янв 2014, 17:24
Сообщения: 44
Проблема в том что есть эффективность по времени и эффективность по памяти (а еще и удобство сопровождения :) = чтение и изменение кода) и обычно они взаимо исключают друг друга.
Код который устраивает по всем критериям называется оптимальным :) вот надо как раз стараться получать оптимальные решения (в общем случае).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 05 мар 2014, 09:06 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
И ещё в 99% случаев оптимизировать весь код нет необходимости - достаточно узкие места. А в остальных - чтоб была хорошая читаемость и без явных ляпов типа slowsort и алгоритма маляра Шлемиэля.
Ну и все неочевидные оптимизации комментировать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 06 мар 2014, 21:51 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
Сейчас пытаюсь писать на ассемблере и получил очень не хорошую ситуацию связанную с читаемостью кода, есть программа около 500 строк каждая строка, до недавнего времени, у меня была с комментарием, но особой читаемости это не дало отдельные действия программы были расписаны, но полного представления о программе и алгоритме ее выполнения не видно, может есть какие-нибудь рекомендации по поводу читаемости?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 06 мар 2014, 22:49 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6175
Откуда: Москва
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 06 мар 2014, 23:35 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
Вы пытаетесь писать на ассемблере, не зная других языков, или переходите с языка высокого уровня?
Если второе, то прикиньте, нельзя ли ограничиться переписыванием на асм 5-10% кода. Редко когда надо больше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 20:29 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
akatenev писал(а):
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 20:34 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
aamonster писал(а):
Вы пытаетесь писать на ассемблере, не зная других языков, или переходите с языка высокого уровня?
Если второе, то прикиньте, нельзя ли ограничиться переписыванием на асм 5-10% кода. Редко когда надо больше.

На ассемблере пишу не зная других языков, но есть очень большое желание перейти на си, и в конечном итого на с++, но пока "Учу мат.часть" так сказать). очень заинтересовала Ваша фраза 5-10 процентов, какие обычно куски кода переписываются?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 21:25 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
А вот как раз это и есть основная задача профайлинга - выявить такие куски :-)
Обычно - самый внутренний (часто повторяющийся) цикл. Постараться вынести из него всё, что можно (полезно прочитать про инвариант цикла).
В общем, выискиваются маленькие куски кода, на которые уходит много времени.
Как пример - http://russian.joelonsoftware.com/Artic ... asics.html

Освоить си - правильное решение, тем паче, не надо изучать все его возможности. Куда проще ассемблера получается :-).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 21:31 
Заглядывает иногда

Зарегистрирован: 10 июн 2012, 17:20
Сообщения: 39
Чтобы программа на ассемблере хорошо читалась и был понятен алгоритм,
помимо комментариев, не мешает перед началом написания тщательно продумать весь алгоритм. Зарисовать всё в виде прямоугольников, ромбиков, стрелочек и т.д. На каждой стрелке,указывающей переход поставить имя метки. А уж затем начинать писать программу.
Конечно, первый этап для многих не интересен. Хочется сразу писать,писать и писать программу до полного самоистязания..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 21:53 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
aamonster писал(а):
А вот как раз это и есть основная задача профайлинга - выявить такие куски :-)
Обычно - самый внутренний (часто повторяющийся) цикл. Постараться вынести из него всё, что можно (полезно прочитать про инвариант цикла).
В общем, выискиваются маленькие куски кода, на которые уходит много времени.
Как пример - http://russian.joelonsoftware.com/Artic ... asics.html

Освоить си - правильное решение, тем паче, не надо изучать все его возможности. Куда проще ассемблера получается :-).


Возможно, но ассемблер это ассемблер там код прозрачный, выполняется то что написал программист:-), а си как я понял эта работа с стандартными библиотеками, которые не известно как работает. Но все же без си никуда)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 22:03 
Только пришел

Зарегистрирован: 31 окт 2012, 22:39
Сообщения: 27
al135vb писал(а):
Чтобы программа на ассемблере хорошо читалась и был понятен алгоритм,
помимо комментариев, не мешает перед началом написания тщательно продумать весь алгоритм. Зарисовать всё в виде прямоугольников, ромбиков, стрелочек и т.д. На каждой стрелке,указывающей переход поставить имя метки. А уж затем начинать писать программу.
Конечно, первый этап для многих не интересен. Хочется сразу писать,писать и писать программу до полного самоистязания..


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 22:16 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
Не-не-не, в стандартные библиотеки поначалу не суйтесь особо. Помигать диодом или там таймер настроить на avr - ничего особо не надо, всё как на асме, только короче и не надо думать о распределении регистров.
Главное - приучиться разбивать код на функции так, чтобы кусок кода, который надо понимать одновременно, можно было сразу увидеть (а детали были в отдельных функциях).

Блок-схемы, кстати, лично я с детства не понимаю. Ну то есть они по мне заточены под ассемблер или бейсик 80-х с мешаниной goto. А если программа вся по блокам (функции, циклы, if-then-else) - то просто записи с отступами хватает, при этом на листочке куда больше помещается. Но если вам удобнее квадратики - это тоже Ok.

Кстати, если функции небольшие - то хватает комментариев с назначением функции, смыслом параметров (если неочевиден из названия) и результата. В общем, чтобы в код функции потом не смотреть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 07 мар 2014, 23:24 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6175
Откуда: Москва
Блин, ребята, на дворе 2014 год. Изучать ассемблер для того чтобы перейти с него на С - это уже просто за гранью добра и зла :) Сие мероприятие потеряло актуальность уже лет 15 назад...

Владимир, срочно бросайте заниматься ерундой, и начинайте осваивать программирование. Ассемблер в том объеме, в котором он вам когда-либо пригодится, вы уже освоили, судя по тому что столкнулись с проблемой читаемости большой программы.

А если реально хотите разобраться, как все работает, то вам не ассемблер нужен, а гораздо более низкоуровневые вещи. Программа на ассемблере на самом деле почти ничем не отличается от программы на С, работает ровно на том же уровне, с теми же сущностями.

И по мере того, как вы будете осваивать программирование, к вам будет приходить осознание весьма важной вещи - не столь важно понимать, что конкретно делает программа, гораздо важнее понимать что делает программист.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 00:57 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 1514
akatenev писал(а):
Программа на ассемблере на самом деле почти ничем не отличается от программы на С, работает ровно на том же уровне, с теми же сущностями.

Вы это скажите разработчикам ядра Kolibri OS. А один из языков используемых в этом проекте C--
Проект данной оси, кстати, вошёл в программу финансировния студенческого GSOC 2014

akatenev писал(а):
И по мере того, как вы будете осваивать программирование, к вам будет приходить осознание весьма важной вещи - не столь важно понимать, что конкретно делает программа, гораздо важнее понимать что делает программист.

Ага, но без понимания как работает процессор на низком уровне и разницы в "высокоуровневом" и "низкоуровневым" программированием так и будешь заложником чужого мнения. Ассемблер - это язык конкретного разработанного процессора, в отличии от "абстрактного" мультиплатфоренного C и адекватность задействования
возможностей архитектуры (системы команд и др.) в компиляторе сильно ограничена.

P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.
Cкажу также "крамольную" мысль. Можно эффективно создавать программы без синтаксической "шелухи" С подобных языков c упором на семантику что Вы и сами поняли создавая программы на ассемблере. Но более лёгкий и эффективный язык для семантического выражения программ не отягащённого синтаксисом.
Барабанная дробь ... Форт (Forth) :)


Последний раз редактировалось KPG 08 мар 2014, 01:27, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 01:26 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
KPG писал(а):
P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.

Заплакал и ушёл переосмысливать свои 18 лет программерского стажа...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 01:30 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 1514
aamonster писал(а):
KPG писал(а):
P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.

Заплакал и ушёл переосмысливать свои 18 лет программерского стажа...

Если перейти на более высокий уровень сопровождения кода то HiAsm подобное направление.

P.S. Думать и учиться никогда не поздно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 02:07 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2010, 22:46
Сообщения: 6175
Откуда: Москва
KPG писал(а):
Вы это скажите разработчикам ядра Kolibri OS. А один из языков используемых в этом проекте C--
Проект данной оси, кстати, вошёл в программу финансировния студенческого GSOC 2014

Хорошее занятие. Для студентов. Больше этим особенно никто не интересуется, потому что люди решают несуществующую проблему. Времена, когда рабочее время программистов стоило меньше машинного времени, давно миновали.

Что касается Владимира, то для него гораздо важнее получить навык эффективного программирования, чем освоить ассемблер (которым он просто не будет пользоваться, во всяком случае если собирается решать реальные задачи).

Для понимания принципов работы процессора нужно изучать системотехнику, а не ассемблер. Ассемблер в этом смысле мало чем отличается от С.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 02:26 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2981
Откуда: Санкт-Петербург
KPG, нельзя на ночь такое упоминать.
Это ж даже непонятно как в VCS класть, не говоря уж о читабельности (занимаемое место по сравнению с псевдокодом) и провоцированием превращения программы в клубок спагетти.

Пойду лучше квартус поизучаю. Или, напротив, хаскель.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 04:09 
Старожил
Аватара пользователя

Зарегистрирован: 20 мар 2012, 15:22
Сообщения: 660
Откуда: Прибалтика
...вот зацепились :) ..извечный безсмысленный спор ;) ...человек спросил как ему лучше структруировать код, а вы ему сразу - пиши на Си и всё будет путём :)
Меня тоже такой вопрос интересует, потому что пишу на асм. Ну вот интересно мне всё по тактам распихивать и компактно делать и иметь тотальный контроль над всем в мк. А проблема при этом действительно имеется когда код разрастается - разобратся, что натворил, допустем через пол года уже занимает время. Было бы классно, чтоб была какая прога допустим, что вкинул в неё свой код, а она разрисовала графически по меткам, что от чего пляшет, куда прыгает и т.д. Ну чтот вроде дисасемблера ток ещё в графике и учитывая названия твоих меток, подпрограмм и т.д. Ну как то так :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 04:41 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
на счет боязни стандартных (да и любых вообще) библиотек: НЕ НУЖНО знать как они работают внутри, нужно знать их ПОВЕДЕНИЕ. это описано в доках. если что-то в доке не описано - нельзя на это рассчитывать. если же вы заточились на неописанную особенность библиотеки - вы ухудшили "правильность" программы, за что непременно ответите потерянным временем в дальнейшем:)

Pajatel писал(а):
А проблема при этом действительно имеется когда код разрастается - разобратся, что натворил, допустем через пол года уже занимает время.
это так и есть, и ничего глобально с этим не сделать. даже комментарии, даже подробные, не сильно помогут, если кода много. можно лишь попытаться немного улучшить ситуацию, разбив все на конечные небольшие части и описав их. должно получиться что-то типа основной программы с кучей вызовов подпрограмм. тогда будет виден алгоритм. сами подпрограммы смотрятся только тогда, когда в них надо вникать (их поведение должно быть описано, т.е. что на входе, что на выходе, что меняет). но и здесь должен быть компромисс:) можно так наразделять, заколебешься потом ползать по коду и выискивать что куда (не говоря о накладных расходах на вызовы).

подобная проблема возникает в любых языках, т.к. на любом можно писать большие программы. но тогда здесь уже начинает играть роль удобный синтаксис. когда, например, добавление элементов в массив делается через херпоймикакие функции/библиотеки/набор заклинаний - это плохо. на другом языке это будет просто что-то типа myarray.add(blabla). это сокращает исходный код, улучшая читабельность (поддерживаемость) исходника.

а так, если ваша задача - считать такты, экономить байты и прочее - забудьте о понятном коде! можно досокращаться до того, что будет все быстро и коротко, только непонятно вообще, хак на хаке и хаком погоняет. факт. ну и про больший риск ошибок в асм коде не надо говорить, да?

п.с. форт в топку сразу!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Определение эффективности программного кода.
СообщениеДобавлено: 08 мар 2014, 05:11 
Старожил
Аватара пользователя

Зарегистрирован: 20 мар 2012, 15:22
Сообщения: 660
Откуда: Прибалтика
Ink писал(а):
ну и про больший риск ошибок в асм коде не надо говорить, да?

...ну когда чёт придуманное пишешь, как бы проблем у меня не возникает - обычно начинает работать сразу и без запинок. Для меня допустим очь много времени занимает придумать как оно должно работать... а воплотить алгоритм в код это быстро. И когда месяц допустим выщитываешь этот самый алгоритм, то потом само написание по времени как бы особой разницы не имеет, что я потрачу допустим день на асм или 2 часа на Си. Другое дело, как и писал выше, что когда надо чёт к уже готовому и написанному ранее(и подзабытому уже) допилить какую новую фишку, вот тут да - можно и день потртить чтобы разобраться - а как же я, дурья башка тут то замутил всё это.... :))


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 200 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB