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

Отдельный кэш для шлюзов, для мостов, и для переменных. Снова цикл с параметром.

Запись от 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]
Цвета поменял, красный корректирующий, как на блок схеме циклов, зелёный - первоначальнй.
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot from 2023-12-20 21-06-35.png
Просмотров: 440
Размер:	14.4 Кб
ID:	8404   Нажмите на изображение для увеличения
Название: Screenshot from 2023-12-24 15-46-46.png
Просмотров: 898
Размер:	56.5 Кб
ID:	8433  
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 10
Комментарии
  1. Старый комментарий
    То есть вы решили подстроить процессор под программу, а не наоборот?
    Допустим у вас получится создать такой процессор. Дальше что? Ваши программы будут работать только на вашем процессоре, который есть только у вас. То есть для других людей они бесполезны.
    Да, придется еще написать компилятор с ЯВУ в машинный код вашего проца. Сможете написать оптимизирующий не хуже чем GCC? Если нет, то все оптимизации в проце сведет на нет не оптимальная программа.
    Запись от locm размещена 19.12.2023 в 13:18 locm вне форума
  2. Старый комментарий
    [QUOTE]То есть вы решили подстроить процессор под программу,[/QUOTE]
    Не под программу, а под то, как я программирую.
    [QUOTE]Да, придется еще написать компилятор с ЯВУ[/QUOTE]
    компилятор да, только ЯВА тут причём? Вообще не при чём.
    [QUOTE]Сможете написать оптимизирующий не хуже чем GCC?[/QUOTE]
    оптимизирующий что? Оптимищирующий машинный код? Машинный код у меня вполне упрощается за счёт отделения по кэшу даже циклов, а ЯП собственно, по уровню будет привязан к этому разделению, следовательно и оптимизация сложная требоваться не будет. Это будет совсем другая вычислительная машина, практически, разве что электронная и пока на двоичной логике, а там видно будет.
    [QUOTE]Если нет, то все оптимизации в проце сведет на нет не оптимальная программа.[/QUOTE]
    в программировании вопросы веры меня волнуют меньше всего.

    Для кого-то может не понятно, насколько код упрощается за счёт отделения циклов от кода, как это влияет на программирование вообще. Это вообще другое программирование. Нет необходимости в привычных метках, неудобных, запутывающих и вносящих кучу неудобств и ограничений. Тут всё будет выглядеть иначе, и вообще не важно какая логика реализуется, цикличность наблюдается везде и во всём, циклы переплетаются с событиями по определённым законам. Это во всей наблюдаемой вселенной. Это даже больше будет похоже не на процессор, а на аппаратную среду. А насколько удачно я её разовью - другой вопрос.
    Как минимум - противопоставляющийся алгоритм Брезенхема проиграл в эффективности к текущему ТЗ по генерации карт трассировок.
    Запись от Hrethgir размещена 19.12.2023 в 20:28 Hrethgir вне форума
  3. Старый комментарий
    [QUOTE]Для кого-то может не понятно, насколько код упрощается за счёт отделения циклов от кода, как это влияет на программирование вообще. Это вообще другое программирование. Нет необходимости в привычных метках, неудобных, запутывающих и вносящих кучу неудобств и ограничений. [/QUOTE]
    Чтобы было понятнее - нужен перевод кода. Хорошо, я как раз над этим работаю в свободное время.
    Запись от Hrethgir размещена 19.12.2023 в 22:03 Hrethgir вне форума
  4. Старый комментарий
    Но сначала о мостах. Циклы - гейты, шлюзы, мосты связывают гейты с блоками исполняемого кода. И вот тут главное - мост определяет ячейку выхода. Это следует из этого участка кода
    [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 Hrethgir вне форума
  5. Старый комментарий
    Аватар для Usaga
    Не под программу, а под то, как я программирую.
    А нельзя программировать как все? Чтобы не нужно было тратить время и ресурсы на изобретение собственных процессоров? Или цель не результат (программа), а что-то другое?
    Запись от Usaga размещена 20.12.2023 в 10:14 Usaga вне форума
  6. Старый комментарий
    Не забывайте одобрять сообщения, иначе они не видны.

    компилятор да, только ЯВА тут причём? Вообще не при чём.
    ЯВА не причем, но вы как программист обязаны знать что ЯВУ это Язык Высокого Уровня.
    Запомните это на будущее.

    оптимизирующий что? Оптимищирующий машинный код?
    Узнайте у Вики 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 locm вне форума
  7. Старый комментарий
    Ну во первых ничего в моём коде не сведёт оптимизацию. Оптимизация аппаратная по максимуму будет.
    Думать о собственно было не о чем, на предмет мостов, достаточно было определить их формат хранения и функционирования, чтобы понять (где их данные будут храниться и как выводиться), что мосты будут так-же как и код - блоками, если надо, а если нет - не блоками. Мосты - основное средство модификации программы.
    Изначально задумывалось, что мост будет указывать на начало блока кода в кэше кода и на его окончание. Следовательно аппаратно под мосты нужно выделить две шины, чтобы мосты работали за один такт, с одной шины пойдёт на адрес в кэш на считку первой ячейки. Сам блок кода в кэше мостов активироваться будет по обычной адресации, но выходить данные будут первые, по отдельной шине, на начало в кэш кода, вторые сразу на регистр слежения за точкой останова.
    То-есть мосты имеют вдвое увеличенный кэш, две шины. Та что соединяет кэш мостов с регистром слежения, будет служить для ожидания сигнала от процессора - команды.
    В публикации правка, скрин схемы. Описание в публикации после изображения.
    [QUOTE=Usaga;bt33836]А нельзя программировать как все? Чтобы не нужно было тратить время и ресурсы на изобретение собственных процессоров? Или цель не результат (программа), а что-то другое?[/QUOTE]
    [QUOTE]Для чего я это делаю? Для чего не знаю, знаю почему - потому что алгоритм Брезензема проиграл в текущем ТЗ генерации карт.[/QUOTE]
    Вы-же не задумываетесь, когда вам холодно - зачем вы одеваете тёплую одежду. Не зачем вы одеваете тёплую одежду, а почему : потому что есть причина - холод. Так и тут.


    И если я алгоритм сравнивал с трактором, то процессор такой с взводимой системой назвать можно будет ... молотилкой (трактор - комбайн), но название это получит вероятно...луч (Ray), лучевой, лучевая система (beam system), потому что блоки глобального процессора максимально возможно пересекаться не будут и будут иметь возможность бесконечного действия, где каждый предыдущий блок опережает на шаг последующий.
    Запись от Hrethgir размещена 20.12.2023 в 20:51 Hrethgir вне форума
  8. Старый комментарий
    Аватар для Usaga
    Вы-же не задумываетесь, когда вам холодно - зачем вы одеваете тёплую одежду. Не зачем вы одеваете тёплую одежду, а почему : потому что есть причина - холод. Так и тут.
    Если продолжать аналогии, то твой подход - при холоде начать проектировать фабрику пошива одежды, вместо того, чтобы заштопать фуфайку или выбрать одёжу потеплее. Трудозатраты, на которые ты нацелился, чудовищно несоответствуют проблеме решаемой.

    Если алгоритм плохо работает, то его оптимизировать надо, а не процессор изобретать...
    Запись от Usaga размещена 21.12.2023 в 07:13 Usaga вне форума
  9. Старый комментарий
    [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 вне форума
  10. Старый комментарий
    Вроде как можно в другую фазу переходить. Если последняя схема более менее пригодна, то можно пытаться перевести код генератора.
    В ходе перевода обнаружатся недоработки и ошибки общей схемы.
    Запись от Hrethgir размещена 22.12.2023 в 21:09 Hrethgir вне форума
 
Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru