Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/221: Рейтинг темы: голосов - 221, средняя оценка - 4.90
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
1

Определение эффективности программного кода.

04.03.2014, 00:15. Просмотров 39814. Ответов 199
Метки нет (Все метки)

Всем привет, собственно вопрос в заголовке, есть ли какие-нибудь методы, которые позволят определить на сколько та или иная функция или вся программа целиком, написана эффективно т.е. соответствует минимальному количеству занимаемой памяти программ и тактов процессора, необходимых для выполнение программы, которой в свою очередь предъявляется некоторый список требований?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2014, 00:15
Ответы с готовыми решениями:

Организация тестирования программного кода для МК
Привет народ. Я работаю в фирме производящей счётчики электроэнергии в отделе...

Определение времени работы кода для ATmega128
Здравствуйте. Подскажите как можно узнать время работы кода для контроллера...

Разработка программного модуля
Если содержимое ячейки внутреннего ОЗУ (DSEG) с адре-сом 40h больше #A0h,...

Разработка программного модуля
Ребят прошу вас помощи, нужно разработать программный модуль:

Разработка аппаратно-программного комплекса
дали курсовую работу... Но незнаю счего все начать.. помогите.. Тематика...

199
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
04.03.2014, 00:42 2
Да, это называется профилированием.

http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 0%BA%D0%B0)
0
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
04.03.2014, 01:12 3
абсолютного критерия эффективного кода нет. Есть "хорошие правила" как писать эффективный код и если взять программу то почти любую можно хоть чуть чуть но улучшить как с точки зрения оптимизации логики так и с точки зрения применения "хороших правил", а после оптимизации можно сделать сравнительный объективный анализ занимаемой памяти, размера кода и производительности "до" и "после"

насчет "хороших правил" можете тут почитать http://chipenable.ru/index.php/programm ... -code.html
0
mrKyrytt
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 767
04.03.2014, 07:14 4
Код выполняет поставленные задачи - эффективный, не выполняет - не эффективный :)
0
TioMoom
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 44
04.03.2014, 09:08 5
Проблема в том что есть эффективность по времени и эффективность по памяти (а еще и удобство сопровождения :) = чтение и изменение кода) и обычно они взаимо исключают друг друга.
Код который устраивает по всем критериям называется оптимальным :) вот надо как раз стараться получать оптимальные решения (в общем случае).
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
04.03.2014, 09:19 6
И ещё в 99% случаев оптимизировать весь код нет необходимости - достаточно узкие места. А в остальных - чтоб была хорошая читаемость и без явных ляпов типа slowsort и алгоритма маляра Шлемиэля.
Ну и все неочевидные оптимизации комментировать.
0
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
05.03.2014, 22:04 7
Сейчас пытаюсь писать на ассемблере и получил очень не хорошую ситуацию связанную с читаемостью кода, есть программа около 500 строк каждая строка, до недавнего времени, у меня была с комментарием, но особой читаемости это не дало отдельные действия программы были расписаны, но полного представления о программе и алгоритме ее выполнения не видно, может есть какие-нибудь рекомендации по поводу читаемости?
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
05.03.2014, 23:02 8
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
05.03.2014, 23:48 9
Вы пытаетесь писать на ассемблере, не зная других языков, или переходите с языка высокого уровня?
Если второе, то прикиньте, нельзя ли ограничиться переписыванием на асм 5-10% кода. Редко когда надо больше.
0
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
06.03.2014, 20:42 10
Цитата Сообщение от okotimiv
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.
Я пытаюсь начать писать правильно, я могу написать какой нибудь алгоритм без особых затруднений, но оценить его в плане эффективности еще не в состояние, плюс ко всему хочу понять процесс написания программы с чего начать, как рассчитать что мне нужно и что получится в конце. А по поводу читаемости я для себя на асемблере решил, выделять комментариями блоки программы выполняющие определенную функция, раньше писал комментарий для каждой строки.
0
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
06.03.2014, 20:47 11
Цитата Сообщение от oomomstir
Вы пытаетесь писать на ассемблере, не зная других языков, или переходите с языка высокого уровня?
Если второе, то прикиньте, нельзя ли ограничиться переписыванием на асм 5-10% кода. Редко когда надо больше.
На ассемблере пишу не зная других языков, но есть очень большое желание перейти на си, и в конечном итого на с++, но пока "Учу мат.часть" так сказать). очень заинтересовала Ваша фраза 5-10 процентов, какие обычно куски кода переписываются?
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
06.03.2014, 21:38 12
А вот как раз это и есть основная задача профайлинга - выявить такие куски :-)
Обычно - самый внутренний (часто повторяющийся) цикл. Постараться вынести из него всё, что можно (полезно прочитать про инвариант цикла).
В общем, выискиваются маленькие куски кода, на которые уходит много времени.
Как пример - http://russian.joelonsoftware.com/Artic ... asics.html

Освоить си - правильное решение, тем паче, не надо изучать все его возможности. Куда проще ассемблера получается :-).
0
ot135vb
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.03.2014, 21:44 13
Чтобы программа на ассемблере хорошо читалась и был понятен алгоритм,
помимо комментариев, не мешает перед началом написания тщательно продумать весь алгоритм. Зарисовать всё в виде прямоугольников, ромбиков, стрелочек и т.д. На каждой стрелке,указывающей переход поставить имя метки. А уж затем начинать писать программу.
Конечно, первый этап для многих не интересен. Хочется сразу писать,писать и писать программу до полного самоистязания..
0
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
06.03.2014, 22:06 14
Цитата Сообщение от oomomstir
А вот как раз это и есть основная задача профайлинга - выявить такие куски :-)
Обычно - самый внутренний (часто повторяющийся) цикл. Постараться вынести из него всё, что можно (полезно прочитать про инвариант цикла).
В общем, выискиваются маленькие куски кода, на которые уходит много времени.
Как пример - http://russian.joelonsoftware.com/Artic ... asics.html

Освоить си - правильное решение, тем паче, не надо изучать все его возможности. Куда проще ассемблера получается :-).
Возможно, но ассемблер это ассемблер там код прозрачный, выполняется то что написал программист:-), а си как я понял эта работа с стандартными библиотеками, которые не известно как работает. Но все же без си никуда)
0
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
06.03.2014, 22:16 15
Цитата Сообщение от ot135vb
Чтобы программа на ассемблере хорошо читалась и был понятен алгоритм,
помимо комментариев, не мешает перед началом написания тщательно продумать весь алгоритм. Зарисовать всё в виде прямоугольников, ромбиков, стрелочек и т.д. На каждой стрелке,указывающей переход поставить имя метки. А уж затем начинать писать программу.
Конечно, первый этап для многих не интересен. Хочется сразу писать,писать и писать программу до полного самоистязания..
Я вас прекрасно понимаю ибо столкнулся сам с такой ерундой, сейчас пытаюсь научиться грамотно проставлять стрелки, треугольники и прямоугольники. Но опять же продумать все наверно невозможно, иногда приходиться менять алгоритм налету
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
06.03.2014, 22:29 16
Не-не-не, в стандартные библиотеки поначалу не суйтесь особо. Помигать диодом или там таймер настроить на avr - ничего особо не надо, всё как на асме, только короче и не надо думать о распределении регистров.
Главное - приучиться разбивать код на функции так, чтобы кусок кода, который надо понимать одновременно, можно было сразу увидеть (а детали были в отдельных функциях).

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

Кстати, если функции небольшие - то хватает комментариев с назначением функции, смыслом параметров (если неочевиден из названия) и результата. В общем, чтобы в код функции потом не смотреть.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
06.03.2014, 23:37 17
Блин, ребята, на дворе 2014 год. Изучать ассемблер для того чтобы перейти с него на С - это уже просто за гранью добра и зла :) Сие мероприятие потеряло актуальность уже лет 15 назад...

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

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

И по мере того, как вы будете осваивать программирование, к вам будет приходить осознание весьма важной вещи - не столь важно понимать, что конкретно делает программа, гораздо важнее понимать что делает программист.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
07.03.2014, 01:10 18
Цитата Сообщение от okotimiv
Программа на ассемблере на самом деле почти ничем не отличается от программы на С, работает ровно на том же уровне, с теми же сущностями.
Вы это скажите разработчикам ядра Kolibri OS. А один из языков используемых в этом проекте C--
Проект данной оси, кстати, вошёл в программу финансировния студенческого GSOC 2014

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

P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.
Cкажу также "крамольную" мысль. Можно эффективно создавать программы без синтаксической "шелухи" С подобных языков c упором на семантику что Вы и сами поняли создавая программы на ассемблере. Но более лёгкий и эффективный язык для семантического выражения программ не отягащённого синтаксисом.
Барабанная дробь ... Форт (Forth) :)
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
07.03.2014, 01:39 19
Цитата Сообщение от KPK
P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.
Заплакал и ушёл переосмысливать свои 18 лет программерского стажа...
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
07.03.2014, 01:43 20
Цитата Сообщение от oomomstir
Цитата Сообщение от KPK
P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер.
Заплакал и ушёл переосмысливать свои 18 лет программерского стажа...
Если перейти на более высокий уровень сопровождения кода то HiAsm подобное направление.

P.S. Думать и учиться никогда не поздно :)
0
07.03.2014, 01:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 01:43

Экспериментальное определение эффективности сортировки
Здравствуйте, у меня возникла такая проблема, мне нужно определить, сколько в...

Оценка эффективности кода
Нужно сравнить эффективность двух алгоритмов. Первое что пришло в голову -...

Повышение эффективности кода: использование указателя на функцию
Решил всё-таки наконец добить тему с "Динамическим приложением, использующим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru