Форум программистов, компьютерный форум, киберфорум
Hrethgir
Войти
Регистрация
Восстановить пароль

Модификации выполняемого кода в кэше целевого процессора - ближайший ориентир проектирования.­­­­­­­­­

Запись от Hrethgir размещена 15.12.2023 в 21:21
Показов 1627 Комментарии 2

Процессор планируется свой, на FPGA. [URL="https://habr.com/ru/articles/769972/"]В последнем, на этот момент, опыте[/URL], были применены циклы с параметром, но весь фокус не на этом, фокус в том, что по сути на итерациях внешних циклов внутренние выполняли несколько иные функции. Код пришлось растянуть, продублировав часть, для генерации последней строки.
Первое что приходит в голову - не усложнять на ранних этапах, а следовать простым путём, всё тем-же через циклы, так как это должно повлиять на архитектуру, так как в естественной среде любая сложная сущность состоит из множества более простых. Следовательно добавляю [B][I]count0[/I][/B], пусть даже в синтаксисе pascal это выглядит богомерзко, но pascal уже выполняет роль псевдокода, для проекта под новый процессор, поэтому пусть выглядит так, как выглядит.
И как-бы тогда можно было сократить генератор в своём процессоре:

[PASCAL] count0:=1;
if Not (count1 = 0) Then begin
marking0://///////////////////////////////////////////////////////////////////////////////////////////добавил цикл, пусть это выглядит неприглядно, суть не в этом
count1:=yRazmerY;////кроме последней строки
if Not (count1 = 0) Then begin //2
marking1:
p := @p1;
x := xRazmerX;
TracerY := y - steps1;
formula1:= stepFrequent * y + znak *trunc(y / (SummSteps));
if TracerY < 0 then
begin
TracerX := RazmerX - formula1;
if TracerX < 0 then TracerX := 0;
TracerY := 0;
end else TracerX := 0;
BremainderstepsFrequentCicles:=remainderstepsFrequentCicles;//3
BstepsSetapInLine:=stepsSetapInLine;
Balternation:=alternation;
BstepsFrequentCicles:=stepsBig;
BstepFrequent:=stepFrequent;///3
count2:=remainderCicles;//4
if Not (count2 = 0) Then begin
marking2:

count3:=BremainderstepsFrequentCicles;//5
if Not (count3 = 0) Then begin
marking3:

count4:=BstepsSetapInLine;//6
if Not (count4 = 0) Then begin
marking4:
Bstep:=BstepFrequent;//7///7
count5:=Balternation;//8
if Not (count5 = 0) Then begin
marking5:
count6:=BstepsFrequentCicles;//9
if Not (count6 = 0) Then
begin
marking6:

count7:=Bstep;//10
//count7
if Not (count7 = 0) Then begin
marking7:
{%REGION 'Engine'}
asm
JMP p
end;
p1:
StringGrid1.Cells[px^, py^] := IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
//запись правого столбца
p := @p3;
goto p4;
p2:
y1:=y+1;
//автоматическое забивание координат в местах скоса трассы
p := @p3;
goto p5;
p3:
y1:=y;
p5:
x1:=x-xInc;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат трассы на прямых участках
p4:
x:=x+xInc;
{%ENDREGION}
dec(count7);
if Not (count7 = 0) then goto marking7;
end;///10
p := @p2; /////после выполнения строки 110 эта строка должна замениться блоком кода, что следует за этим листингом

dec(count6);
if Not (count6 = 0) then goto marking6;
end;//11
Bstep:=stepRare;//12
BstepsFrequentCicles:=1;
dec(count5);
if Not (count5 = 0) then goto marking5;
end;//13
BstepFrequent:=stepFrequent;//14
BstepsFrequentCicles:=stepsBig;
dec(count4);
if Not (count4 = 0) then goto marking4;
end;//15
BremainderstepsFrequentCicles:=1;//16
BstepsSetapInLine:=1;
Balternation:=1;
BstepsFrequentCicles:=remainderstepsFrequent;///16
dec(count3);
if Not (count3 = 0) then goto marking3;
end;//17
if BremainderstepsFrequentCicles = 0 then begin
BstepsSetapInLine:=1;
Balternation:=1;
end;
BstepFrequent:=remainder;//18
BremainderstepsFrequentCicles:=1;
BstepsFrequentCicles:=1;

dec(count2);
if Not (count2 = 0) then goto marking2;
end;//19

Inc(y);
dec(count1);
if Not (count1 = 0) then goto marking1;
end; //20
modification1://////////////////////////////////////////////////////активация модификации
if Not (count0 = 0) then goto marking0;
end; //21
[/PASCAL]
,
второй листинг с с активируемым длоком кода

[PASCAL] //трассировку начальной ячейки каждого шага последней обрабатываемой строки кроме правого столбца
if steps = 0 then steps := SummSteps;
if RazmerX > RazmerY then begin
Dec(steps1);
TracerX := x - ( znak*sign(trunc((1+sign(y-trunc(y/(stepsBig+1))*(stepsBig+1)-steps)/2))) + formula1)+1;
if TracerX<1 then begin
TracerY := y - steps1;
TracerX := 0;
if TracerY < 0 then TracerY := 0;
end;
end else begin
Dec(steps1);
TracerY := y - steps1;
TracerX := 0;
end;
p := @p6;
Dec(steps);//////// [/PASCAL]
.
И что думается на этот счёт в первую очередь, что при использовании циклов модификации в теле цикла можно использовать "разрешено" (allowed) и "запрещено" (forbidden), последнее является альтернативой [B][I]break[/I][/B], но при этом цикл не обрывается (я вообще скептически относился к этой комманде, так как к циклу с параметром она не имеет смысла применения вообще, а все остальные я постараюсь обойти, и как можно лучше это сделать в новом ЯП, если конечно эта задача будет иметь решение).
Тогда в теле любого цикла можно будет создавать сколько угодно разрешённых и зарпещённых областей, разделяя их хоть вложенными циклами, хоть метками, чем угодно.
Например
[CODE]
начало цикла 0
разрешение первое;
запрет первый;
вложенный цикл;
разрешение второе;
запрет второй;
конец цикла 0;
[/CODE]
На самом деле это очень мощный инструмент, если процессор разрешает модификацию выполняемого кода (по сути в запрет первый можно поместить разрешение второе, а при большем наличии выполнять и более сложные модификации). Это будет требовать тщательного журналирования всех важных событий модификаций. Кэшей при этом лучше наверное вести 2 параллельно, один под итерации циклов, второй под запреты и разрешения, третий уже под переменные и обрабатываемые данные.
В общем модифицирующийся в рантайме код - это мой выбор как минимум для написания всяких движков и генераторов, на целевом (пока так назову свой процессор) процессоре. Так как это попытка упрощения моделирования естественной среды, то возможно это мной применится и для различных симуляторов, и в чём угодно далее.
Пусть пока остаётся много не продуманных деталей, но так или иначе их нужно обозначать как цели пока неопределённой дистанции.
То-есть нужно иметь отдельный кэш модификаций, и отдельно под циклы. Пока так. Вопрос размещения циклов в области разрешения и запретов - пока под вопросом, так как выглядит сложновато для реализации (чтобы делать сущности взаимозаменяемыми - необходима новая первая , гораздо сложнее любых последующих).
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Правильнее даже сказать теневые области кода кода и...сенсорные наверное...ближе к области, и более естественно.
    Запись от Hrethgir размещена 15.12.2023 в 22:41 Hrethgir вне форума
  2. Старый комментарий
    Ответил.
    [url]https://www.cyberforum.ru/post17154091.html[/url]
    Запись от Hrethgir размещена 17.12.2023 в 22:09 Hrethgir вне форума
 
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru