|
Самомодифицирующийся код в экосистеме Cortex-M., есть ли право на жизнь? |
|
|
|
 |
Ответов
|
Jun 29 2018, 13:08
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Интересная тема для меня, тема СМК. Ни разу не применял, однако небольшие размышления в этой части заставили признать, что в практике программирование были моменты, где удобно было бы иметь самомодификацию. Приведу пример, где бы я использовал СМК (опять же, в реальной практике была уйма таких задач). Пусть есть некий цикл, но внутри этого цикла подряд идут условно выполняемые команды: Код while(условие) { if(условие 1) инструкция 1;
if(условие 2) инструкция 2;
if(условие 3) инструкция 3;
...
if(условие N) инструкция N; } Так вот, условие 1, условие 2, условие 3, ..., условие N являются флаговыми переменными и определяются где-то выше по коду. В итоге ассемблерный код будет содержать условные операции выполнения и переходы, если инструкции не представляются в машинных кодах до 4 реальных инструкций для Cortex-M. Это долго, на это тратятся такты процессора, сбрасывается конвейер инструкций... в общем, одни минусы. В приложениях с хитрой математикой или логикой, которую надо быстро просчитать, было бы удобно использовать СМК в следующем виде: 1. Просчитать все условные флаги. 2. На основании этих флагов сформировать СМК-последовательность инструкций без условных инструкций. 3. Отдать эту последовательность на выполнение. В итоге существенно сократится объем ассемблерных инструкций, с учетом того, что некоторые условные инструкции идут по 2-3 такта, а после модификации останутся только "нужные" инструкции. Останется только условие продолжения цикла и нужные команды, без этих паршивых проверок. Я ж, надеюсь, никому святую тайну не открыл?  Повторюсь, это лишь мои хотелки, было много ситуаций где хотелось бы сейчас это реализовать, но оно работает да и зачем туда лезть, тем более там, где во времени я сильно не ограничен...
|
|
|
|
|
Jun 29 2018, 16:18
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(RadiatoR @ Jun 29 2018, 16:23)  Так тут будет тот же if()...if()...if()... Нет, не будет. Цитата(adnega @ Jun 29 2018, 19:03)  Простите, а пункты 1 и 2 не требуют тактов разве? Возможно, Вы и коллега выше не совсем поняли что я имею в виду. Смотрите. Рассмотрим первый случай - когда в цикле непосредственные команды проверки условия Код while(условие) { if(условие 1) инструкция 1; if(условие 2) инструкция 2; if(условие 3) инструкция 3; } Как видно, будут всегда выполняться инструкции, реализующие условия проверки внутри if(...). Если применить СМК, и вычислить условия в if(...)-ах до цикла, то в ОЗУ построится, допустим, следующий код (примем, что условия 1 и 3 истинны) Код while(условие) { инструкция 1; инструкция 3; } Или же, если все условия истинны, то Код while(условие) { инструкция 1; инструкция 2; инструкция 3; } Или же, если первое условие истинно, то Код while(условие) { инструкция 1; } Как видно, в любом случае нет больше в цикле инструкций проверки условий в if(...)-ах (а они же ведь по сути Bxx в ассемблерном представлении) (да и куда лучше вовсе не проверять заранее ложные условия по списку), а выполняются только нужные инструкции сразу, как будто условных конструкций и нет. А п. 1 и 2, конечно, требуют тактов, только для моего случая п. 1. требуется выполнить только 1 раз для всех итераций цикла, на этапе составления списка инструкций СМК. Надеюсь, моя мысль будет так понятнее.
Сообщение отредактировал Arlleex - Jun 29 2018, 16:23
|
|
|
|
|
Jun 29 2018, 16:35
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(Arlleex @ Jun 29 2018, 19:18)  Надеюсь, моя мысль будет так понятнее. Условия в рантайме меняются или нет? Если нет, то компилятор сам выкинет заведомо ложные и исполнит заведомо истинные условия. А если они меняются в рантайме, то и ваш генератор СМК должен все эти условия проверить, сгенерить год и исполнить его. По моему, даже если вы выиграете на исполнении СМК, то скорее всего проиграете на подготовке СМК.
|
|
|
|
|
Jun 29 2018, 16:56
|

Местный
  
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264

|
Цитата(adnega @ Jun 29 2018, 19:35)  Условия в рантайме меняются или нет? Конечно меняются. Это обычные переменные, которые взводятся/сбрасываются где-то выше по коду или вовсе в других его частях. Цитата(adnega @ Jun 29 2018, 19:35)  А если они меняются в рантайме, то и ваш генератор СМК должен все эти условия проверить, сгенерить год и исполнить его. Так выигрыш то огромен, если список таких условных ветвей достаточно большой. Даже из 10 условных команд, в случае, если эти команды нужно выполнить все (худший случай с точки зрения затраченного времени выполнения), понадобится 20 тактов (при условии, что все команды однотактные и условно выполняемая инструкция одна) без СМК. А применив СМК - цикл сократится до 10 тактов (без накладных расходов на проверку условия цикла). В лучшем случае, если только 1 условие верно, нужно выполнить только 1 инструкцию вместо 20 (10 связок "команда сравнения - команда самого условно выполняемого действия") выигрыш в 20 раз! Это ли не здорово? Цитата(adnega @ Jun 29 2018, 19:35)  По моему, даже если вы выиграете на исполнении СМК, то скорее всего проиграете на подготовке СМК. Достаточно написать перед этим интересующие участки на ассемблере, скомпилировать их и видеть в бинарнике готовые инструкции в виде машинных слов. Easy же  Цитата Потрясающе!!!! Вы угадали прямо в точку! Именно такой алгоритм я и хочу переделать на СМК! Потрясающая проницательность! Я просто телепат
Сообщение отредактировал Arlleex - Jun 29 2018, 17:22
|
|
|
|
Сообщений в этой теме
jcxz Самомодифицирующийся код в экосистеме Cortex-M. Jun 28 2018, 22:54 aaarrr Цитата(jcxz @ Jun 29 2018, 01:54) И вот я... Jun 28 2018, 23:01 AVI-crak Цитата(jcxz @ Jun 29 2018, 04:54) Просто ... Jun 28 2018, 23:23 aaarrr Цитата(AVI-crak @ Jun 29 2018, 02:23... Jun 28 2018, 23:31  AVI-crak Не предполагает.
Любая перетасовка программного ко... Jun 29 2018, 00:11 Николай Семёнович Цитата(AVI-crak @ Jun 29 2018, 02:23... Jun 29 2018, 03:22 jcxz Цитата(AVI-crak @ Jun 29 2018, 02:23... Jun 29 2018, 04:20 aaarrr Давайте сначала:
Цитата(AVI-crak @ Jun ... Jun 29 2018, 00:32 AVI-crak Цитата(aaarrr @ Jun 29 2018, 06:32) О как... Jun 29 2018, 04:47  jcxz Цитата(AVI-crak @ Jun 29 2018, 07:36... Jun 29 2018, 04:51   AVI-crak Цитата(jcxz @ Jun 29 2018, 10:51) Вы о чё... Jul 1 2018, 15:22    VladislavS Цитата(AVI-crak @ Jul 1 2018, 18:22)... Jul 1 2018, 16:25     jcxz Цитата(VladislavS @ Jul 1 2018, 19:25) Пр... Jul 2 2018, 16:12      AVI-crak Цитата(jcxz @ Jul 2 2018, 22:12) Конечно ... Jul 2 2018, 20:46       Arlleex Цитата(AVI-crak @ Jul 3 2018, 00:46)... Jul 3 2018, 04:44        AVI-crak Цитата(Arlleex @ Jul 3 2018, 10:44) А отк... Jul 3 2018, 18:38  aaarrr Цитата(AVI-crak @ Jun 29 2018, 07:47... Jun 29 2018, 07:24 halfdoom Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы... Jun 29 2018, 03:29 AlexandrY Цитата(jcxz @ Jun 29 2018, 01:54) PS: И п... Jun 29 2018, 05:47 jcxz Цитата(AlexandrY @ Jun 29 2018, 08:47) Ил... Jun 29 2018, 06:56  AlexandrY Цитата(jcxz @ Jun 29 2018, 09:56) Я уже в... Jun 29 2018, 07:00   jcxz Цитата(AlexandrY @ Jun 29 2018, 10:00) То... Jun 29 2018, 07:03    AlexandrY Цитата(jcxz @ Jun 29 2018, 10:03) Ну хоро... Jun 29 2018, 07:05   Николай Семёнович Цитата(AlexandrY @ Jun 29 2018, 10:00) То... Jun 29 2018, 16:00    jcxz Цитата(Николай Семёнович @ Jun 29 2018, 19... Jun 29 2018, 17:11     Arlleex Цитата(jcxz @ Jun 29 2018, 20:11) Блин, к... Jun 29 2018, 17:18      jcxz Цитата(Arlleex @ Jun 29 2018, 20:18) О ре... Jun 29 2018, 17:23       Arlleex Цитата(jcxz @ Jun 29 2018, 20:23) Всего в... Jun 29 2018, 17:36       adnega RE: Самомодифицирующийся код в экосистеме Cortex-M. Jun 29 2018, 21:21        jcxz Цитата(adnega @ Jun 30 2018, 00:21) Прове... Jun 30 2018, 00:22         adnega Цитата(jcxz @ Jun 30 2018, 03:22) мммм...... Jun 30 2018, 06:41          jcxz Цитата(adnega @ Jun 30 2018, 09:41) А что... Jun 30 2018, 07:21           adnega Цитата(jcxz @ Jun 30 2018, 10:21) Да я уж... Jun 30 2018, 08:59            AlexandrY Цитата(adnega @ Jun 30 2018, 11:59) Кста,... Jun 30 2018, 10:09            jcxz Цитата(adnega @ Jun 30 2018, 11:59) Покаж... Jun 30 2018, 11:56             adnega Цитата(jcxz @ Jun 30 2018, 14:56) Да, как... Jun 30 2018, 12:12              jcxz Цитата(adnega @ Jun 30 2018, 15:12) Может... Jun 30 2018, 13:30               AlexandrY Цитата(jcxz @ Jun 30 2018, 16:30) Ну-ну. ... Jun 30 2018, 13:39                jcxz Цитата(AlexandrY @ Jun 30 2018, 16:39) И ... Jun 30 2018, 13:56                 AlexandrY Цитата(jcxz @ Jun 30 2018, 16:56) В то вр... Jun 30 2018, 14:43                  jcxz Цитата(AlexandrY @ Jun 30 2018, 17:43) Та... Jun 30 2018, 19:41                   AlexandrY Цитата(jcxz @ Jun 30 2018, 22:41) Ваш пос... Jul 1 2018, 07:22             AlexandrY Цитата(jcxz @ Jun 30 2018, 14:56) Да прич... Jun 30 2018, 13:17 Serge V Iz Использовал хранимые в ОЗУ участки кода, которые з... Jun 29 2018, 07:35 jcxz Цитата(Serge V Iz @ Jun 29 2018, 10:35) И... Jun 29 2018, 08:43 AVR Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы... Jun 29 2018, 07:43 a123-flex Цитата(AVR @ Jun 29 2018, 10:43) Оптимиза... Jun 29 2018, 15:05 RadiatoR Вопрос к ТС - а каков предполагаемый размер генери... Jun 29 2018, 07:54 _4afc_ Мой опыт показывает что оптимизация по скорости са... Jun 29 2018, 08:23 jcxz Цитата(RadiatoR @ Jun 29 2018, 10:54) Во... Jun 29 2018, 09:08  _4afc_ Цитата(jcxz @ Jun 29 2018, 13:08) А тепер... Jun 29 2018, 09:53 VladislavS _4afc_, не стоит быть столь категоричным. Если гов... Jun 29 2018, 08:38 Kabdim Имхо сейчас время такое что проще взять более мощн... Jun 29 2018, 08:44 RadiatoR Цитата(Arlleex @ Jun 29 2018, 16:08) 2. Н... Jun 29 2018, 13:23 jcxz Цитата(Arlleex @ Jun 29 2018, 16:08) Прив... Jun 29 2018, 16:56  AlexandrY Цитата(jcxz @ Jun 29 2018, 19:56) ...
if ... Jun 29 2018, 17:44 kolobok0 Цитата(Arlleex @ Jun 29 2018, 16:08) Инте... Jun 29 2018, 17:46 a123-flex Цитата(jcxz @ Jun 29 2018, 01:54) Есть мы... Jun 29 2018, 13:27 twix Цитата(a123-flex @ Jun 29 2018, 14:2... Jun 29 2018, 14:35 Serge V Iz Кстати, а какие есть основания предполагать, что р... Jun 29 2018, 16:11 Arlleex Цитата(AlexandrY @ Jun 29 2018, 20:44) А ... Jun 29 2018, 18:19 AVI-crak Цитата(jcxz @ Jun 29 2018, 04:54) Есть мы... Jun 30 2018, 11:24 Arlleex jcxz, а зачем тут это? Вы сначала загружаете адрес... Jun 30 2018, 15:09 jcxz Цитата(Arlleex @ Jun 30 2018, 18:09) А вы... Jun 30 2018, 19:31  VladislavS Цитата(jcxz @ Jun 30 2018, 22:31) Здесь н... Jun 30 2018, 19:35  Arlleex Цитата(jcxz @ Jun 30 2018, 23:31) Поэтому... Jun 30 2018, 19:45   jcxz Цитата(Arlleex @ Jun 30 2018, 22:45) По т... Jun 30 2018, 19:54 VladislavS Недавно в другой теме проскакивал вот такой код. П... Jun 30 2018, 18:33 Arlleex Кстати, решил почитать внимательнее 3.3.2. Load/st... Jul 1 2018, 10:03 jcxz Цитата(Arlleex @ Jul 1 2018, 13:03) Что э... Jul 1 2018, 12:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|