Отдельный кэш для шлюзов, для мостов, и для переменных. Снова цикл с параметром.
Запись от Hrethgir размещена 18.12.2023 в 22:16
Показов 2204
Комментарии 10
|
Для реализации своих программ, вероятно в процессоре реализую отдельный кэш шлюзов. Для шлюзов будет использоваться всего две команды проверка на вход и проверка на выход и числовой идентификатор шлюза. Для работы с кэшом шлюзов вероятно будет своя аппаратная часть процессора. Эту необходимость учитываю из этой схемы моих циклов [url]https://habr.com/ru/articles/769972/[/url] [IMG]https://habrastorage.org/r/w1560/getpro/habr/upload_files/c9d/9d8/ffd/c9d9d8ffde0d750948f151b0dde4b03f.png[/IMG] в псевдокоде примерно так [CODE]count:=myVariable; if Not (count = 0) Then begin label1: ...; ...; ...; dec(count);//or inc (count) if Not (count = 0) then goto label1; end;[/CODE]. Идентификатор один и тот-же. Второй кэш - это кэш выполняемого кода с другими командами. Код разелён на блоки, а два кэша связаны между собой мостами (bridge). Третий однозначно для переменных, но значение счётчика для шлюзов будет храниться в кэше для шлюзов. Данный процессор будет делаться под конкретный ЯП, и методу программирования. Общего с другими ЯП у него не будет, и называться он будет целевым, чтобы не смущать общественность. Но ... под различные задачи, самые различные. Правда знакомых алгоритмов там вряд-ли вами будет обнаружено, но вероятно будут, так как некоторые решения альтернатив не могут иметь, как ноумены в сравнении с феноменами. Проверка переменных на равнозначность планируется только аппаратная, без вычеслений (нет ничего сложного в реализации логической схемы, я не понимаю почему проверка на равенство происходит в процессорах через вычитание, а не аппаратно). Планируется три кэша в общем: кэш кода, переменных и шлюзов. Надобность в метках для циклов после этого отпадет, а над модификациями прийдётся подумать, стоит попробовать заменить ими обычные метки и указатели. По сути метка и указатель на неё - вариант модификации. И вот тут стоит подумать тщательно. В принципе ничто не мешает реализовать выбор блока кода на переходе по мосту из кэша шлюза в кэш кода, на конкретный блок. То-есть получается вообще сложно, но гибче - данные все разделены по типу уже аппаратно, циклы не являются исполняемым кодом, а являются аппартным (цикл с параметром реализуется на аппаратном уровне, уровне среды, а не на уровне кода) свойством среды (процессора). В терминологии полный разрез с традиционной, но постараюсь найти варианты переводов, синонимов, антонимов. Пока так, это не много, и в общем я на этом прекращаю активность до наличия отлаженного процессора, кроме активности в разделе по ПЛИС и FPGA. Для чего я это делаю? Для чего не знаю, знаю почему - потому что алгоритм Брезензема проиграл в текущем ТЗ генерации карт. [SIZE="6"]Правка 20.12.2023: 20:55.[/SIZE] достаточно было определить их формат хранения и функционирования, чтобы понять (где их данные будут храниться и как выводиться), что мосты будут так-же как и код - блоками, если надо, а если нет - не блоками. Мосты - основное средство модификации программы. Изначально задумывалось, что мост будет указывать на начало блока кода в кэше кода и на его окончание. Следовательно аппаратно под мосты нужно выделить две шины, чтобы мосты работали за один такт, с одной шины пойдёт на адрес в кэш на считку первой ячейки. Сам блок кода в кэше мостов активироваться будет по обычной адресации, но выходить данные будут первые, по отдельной шине, на начало в кэш кода, вторые сразу на регистр слежения за точкой останова. То-есть мосты имеют вдвое увеличенный кэш, две шины. Та что соединяет кэш мостов с регистром слежения, будет служить для ожидания сигнала от процессора - команды. Между кэшами будут какие-то микросредства, но не процессора. Последовательность установки контроля над выполнением программы такая будет вероятно [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=8404&stc=1&d=1703095662[/IMG] Непересекаемость и последовательность кэшей позволят, без ожидания выполнения команд в любом последующем кэше, взводить в готовность предыдущий и его аппаратные средства. И как только в регистр слежения за кэшом команд поступить сигнал о начале выполнения последней, в кэше мостов прочитается следующий мост в блоке мостов, а если и блок мостов был последний, то взведение кэша циклов произойдёт ещё раньше, по возможности за два шага до выполнения последней команды в кэше команд. Данная схема ещё пока не раскрывает как будет действовать модификация программы, над этим ещё стоит подумать. название это получит вероятно...луч (Ray), лучевой, лучевая система (beam system), потому что блоки глобального процессора максимально возможно пересекаться не будут и будут иметь возможность бесконечного действия, где каждый предыдущий блок опережает на шаг последующий. Всё это пока что не проработано, но в любое свободное время я буду над схемой работать, по возможности. Уточнение схемы [IMG]https://www.cyberforum.ru/blog_attachment.php?attachmentid=8433&stc=1&d=1703422025[/IMG] Цвета поменял, красный корректирующий, как на блок схеме циклов, зелёный - первоначальнй. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 10
Комментарии
-
То есть вы решили подстроить процессор под программу, а не наоборот?
Допустим у вас получится создать такой процессор. Дальше что? Ваши программы будут работать только на вашем процессоре, который есть только у вас. То есть для других людей они бесполезны.
Да, придется еще написать компилятор с ЯВУ в машинный код вашего проца. Сможете написать оптимизирующий не хуже чем GCC? Если нет, то все оптимизации в проце сведет на нет не оптимальная программа.Запись от locm размещена 19.12.2023 в 13:18
-
[QUOTE]То есть вы решили подстроить процессор под программу,[/QUOTE]
Не под программу, а под то, как я программирую.
[QUOTE]Да, придется еще написать компилятор с ЯВУ[/QUOTE]
компилятор да, только ЯВА тут причём? Вообще не при чём.
[QUOTE]Сможете написать оптимизирующий не хуже чем GCC?[/QUOTE]
оптимизирующий что? Оптимищирующий машинный код? Машинный код у меня вполне упрощается за счёт отделения по кэшу даже циклов, а ЯП собственно, по уровню будет привязан к этому разделению, следовательно и оптимизация сложная требоваться не будет. Это будет совсем другая вычислительная машина, практически, разве что электронная и пока на двоичной логике, а там видно будет.
[QUOTE]Если нет, то все оптимизации в проце сведет на нет не оптимальная программа.[/QUOTE]
в программировании вопросы веры меня волнуют меньше всего.
Для кого-то может не понятно, насколько код упрощается за счёт отделения циклов от кода, как это влияет на программирование вообще. Это вообще другое программирование. Нет необходимости в привычных метках, неудобных, запутывающих и вносящих кучу неудобств и ограничений. Тут всё будет выглядеть иначе, и вообще не важно какая логика реализуется, цикличность наблюдается везде и во всём, циклы переплетаются с событиями по определённым законам. Это во всей наблюдаемой вселенной. Это даже больше будет похоже не на процессор, а на аппаратную среду. А насколько удачно я её разовью - другой вопрос.
Как минимум - противопоставляющийся алгоритм Брезенхема проиграл в эффективности к текущему ТЗ по генерации карт трассировок.Запись от Hrethgir размещена 19.12.2023 в 20:28
-
[QUOTE]Для кого-то может не понятно, насколько код упрощается за счёт отделения циклов от кода, как это влияет на программирование вообще. Это вообще другое программирование. Нет необходимости в привычных метках, неудобных, запутывающих и вносящих кучу неудобств и ограничений. [/QUOTE]
Чтобы было понятнее - нужен перевод кода. Хорошо, я как раз над этим работаю в свободное время.Запись от Hrethgir размещена 19.12.2023 в 22:03
-
Но сначала о мостах. Циклы - гейты, шлюзы, мосты связывают гейты с блоками исполняемого кода. И вот тут главное - мост определяет ячейку выхода. Это следует из этого участка кода
[PASCAL]{%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} [/PASCAL]
Тут не получится избежать меток, если мост не будет содержать информации о выходе с блока кода.
Зато если мост содержит её - то всё легко и без меток, легко и естевенно.
детали о коде тут [url]https://habr.com/ru/articles/769972/[/url]
Информация о мостах должна содержаться ... точно не в кэше блоков кода... .
В ввиду модификаций она должна была-бы содержаться в кэше переменных... с учётом того что мосты могут изменяться в ходе модификаций, но ...
мосты - не переменные величины... архитектура не простая... модификации в кэше циклов лучше не проводить. Задачка. Четвёртый кэш совсем не хочется делать. Информацию о мостах можно хранить в кэше переменных, но после них. Это как вариант.
Зато становится очевидным, что увеличение количества кэшей может сократить емкость хранимой инофрмации необходимой для работы аппарата, при этом увеличивается число команд такого процессора... Тут нужно подумать.Запись от Hrethgir размещена 19.12.2023 в 22:15
-
Запись от Usaga размещена 20.12.2023 в 10:14
-
Не забывайте одобрять сообщения, иначе они не видны.
ЯВА не причем, но вы как программист обязаны знать что ЯВУ это Язык Высокого Уровня.
Запомните это на будущее.
Узнайте у Вики https://ru.wikipedia.org/wiki/... компилятор
https://habr.com/ru/companies/vk/articles/477062/
Оптимизация позволяет в том числе создавать машинный код наиболее оптимально использующий ресурсы архитектуры проца под который компилируется исходник.
Вот этот участоксведет на нет всю скорость выполнения на вашем проце.Pascal 1
StringGrid1.Cells[px^, py^] := IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
Или вы собираетесь аппаратно в проце реализовать заполнение таблицы с учетом что она реализована программно и проц о ней ничего не знает?!
Кстати, а как вы скомпилируете винду под ваш проц? Она же с закрытым кодом!Запись от locm размещена 20.12.2023 в 15:35
-
Ну во первых ничего в моём коде не сведёт оптимизацию. Оптимизация аппаратная по максимуму будет.
Думать о собственно было не о чем, на предмет мостов, достаточно было определить их формат хранения и функционирования, чтобы понять (где их данные будут храниться и как выводиться), что мосты будут так-же как и код - блоками, если надо, а если нет - не блоками. Мосты - основное средство модификации программы.
Изначально задумывалось, что мост будет указывать на начало блока кода в кэше кода и на его окончание. Следовательно аппаратно под мосты нужно выделить две шины, чтобы мосты работали за один такт, с одной шины пойдёт на адрес в кэш на считку первой ячейки. Сам блок кода в кэше мостов активироваться будет по обычной адресации, но выходить данные будут первые, по отдельной шине, на начало в кэш кода, вторые сразу на регистр слежения за точкой останова.
То-есть мосты имеют вдвое увеличенный кэш, две шины. Та что соединяет кэш мостов с регистром слежения, будет служить для ожидания сигнала от процессора - команды.
В публикации правка, скрин схемы. Описание в публикации после изображения.
[QUOTE=Usaga;bt33836]А нельзя программировать как все? Чтобы не нужно было тратить время и ресурсы на изобретение собственных процессоров? Или цель не результат (программа), а что-то другое?[/QUOTE]
[QUOTE]Для чего я это делаю? Для чего не знаю, знаю почему - потому что алгоритм Брезензема проиграл в текущем ТЗ генерации карт.[/QUOTE]
Вы-же не задумываетесь, когда вам холодно - зачем вы одеваете тёплую одежду. Не зачем вы одеваете тёплую одежду, а почему : потому что есть причина - холод. Так и тут.
И если я алгоритм сравнивал с трактором, то процессор такой с взводимой системой назвать можно будет ... молотилкой (трактор - комбайн), но название это получит вероятно...луч (Ray), лучевой, лучевая система (beam system), потому что блоки глобального процессора максимально возможно пересекаться не будут и будут иметь возможность бесконечного действия, где каждый предыдущий блок опережает на шаг последующий.Запись от Hrethgir размещена 20.12.2023 в 20:51
-
Если продолжать аналогии, то твой подход - при холоде начать проектировать фабрику пошива одежды, вместо того, чтобы заштопать фуфайку или выбрать одёжу потеплее. Трудозатраты, на которые ты нацелился, чудовищно несоответствуют проблеме решаемой.
Если алгоритм плохо работает, то его оптимизировать надо, а не процессор изобретать...Запись от Usaga размещена 21.12.2023 в 07:13
-
[QUOTE=Usaga;bt33845]Если продолжать аналогии, то твой подход - при холоде начать проектировать фабрику пошива одежды,[/QUOTE]
-
не точно, точно:
сшить одежду с своего материала, пусть даже это будет шкура мамонта - мне не важно.
[QUOTE]Если алгоритм плохо работает[/QUOTE]
[B][I]Мой алгоритм отлично [U][COLOR="Red"]не работает[/COLOR][/U][/I][/B]: достигает тот-же результат по ТЗ что и алгоритм Брезенхема мне навязываемый, при выполненном объёме работ по расчётам в разницу [B][I]x*y - (x+y)[/I][/B], а результат количественно - одинаковый, равен [B][I]x*y[/I][/B].
Удачи.
Обычные процессоры очевидно под другие алгоритмы, которые выполняют столько работы, сколько вряд-ли когда требовалось вообще для достигнутых результатов. Суетяги - одним словом. Мне зябковато в вашем мире бесполезной суеты (в мире вашего программирования, жить можно, но одежку нужно с своего материала иметь).Запись от Hrethgir размещена 21.12.2023 в 21:11
-
Вроде как можно в другую фазу переходить. Если последняя схема более менее пригодна, то можно пытаться перевести код генератора.
В ходе перевода обнаружатся недоработки и ошибки общей схемы.Запись от Hrethgir размещена 22.12.2023 в 21:09


