Процессор (физический препроцессор) без счётчика команд
Тех кто ожидает наукоёмкости от чтения — сразу прошу не читать, тут нет ничего на что можно было-бы сослаться кроме собственнных работ, а значит и наукоёмкости публикации не содержит — прошу простить заранее за такую дерзость, и заметить что предупреждение мной всё же об этом было.
На самом деле, ввиду прошлой публикации (последствия которой я постараюсь исправить, так как наверное многие решили что это плод воображения — новая архитектура) — препроцессора, так как рассматриваю процессор и пост процессор. Для того, чтобы понять ход мыслей лучше, и то, что всё это не фантазии, а результат работы — стоит ознакомится с этой предыдущей публикацией, она не сильно длинная -, но время отнимет, хоть и не сильно сложная: https://habr.com/ru/articles/769972/ .
Ознакомившись с ней станет понятно что имеется ввиду под модификациями кода (смена формул и выключение строк кода в рантайме), под модификациями кода подразумевается просто включение и выключение исполняемых команд, кода. Изначально мной предполагалось, что кэш мостов будет состоять из параллельных частей, и скорее всего в такой архитектуре конвейера он должен будет и обеспечивать работу меток и указателей (но сейчас не про них). В каких-то публикациях мне сделали замечания что мало графики и рисунков (вроде как про поляризацию для машинного зрения), но как можно увидеть из публикации по ссылке выше — оказалось достаточно одной блок-схемы чтобы отполировать и видоизменить весь код, и даже до той степени, чтобы задуматься о новой архитектуре.
Архитектура препроцессора (это нечто вроде ядра GPU), и что для неё нужно.
Как мне представвляется нужны новые типы данных для работы такого конвейера, а именно обособить циклы в отдельный тип и создать для них свой Кеш. Острая необходимость этого видна из публикации по ссылке выше, кто не любит читать — прошу не ругать меня, так как пишу не про плоды воображения, а про результаты работ и выводы. Идея создания кэша мостов пришла при анализе того-же кода и при очевидной необходимости модификации кода в рантайме. Затем должны идти кэш команд и следом кэш переменных, перед АЛУ. Код выполняемый на препроцессоре должен компилироваться под него, и при загрузке в препроцессор распределяться по трём кэшам: команд, мостов и циклов. Всё это мной уже было обозримо и схема была при прошлой публикации о архитектуре вычислительной машины. И далее как мной обещалось — были проанализированы формулы (мне пришлось вспоминать, так как писал я их в попыхах и никаких заметок не делал), в них мной ничего интересного обнаружено не было, и всё работает и в таком виде: изначальную формулу закомментировал
// TracerX := x - ( znak*sign(trunc((1+sign(y-trunc(y/(stepsBig+1))*(stepsBig+1)-steps)/2))) + formula1)+1;
TracerX := x - formula1+1;
if (y mod SummSteps)-steps = 0 then TracerX:= TracerX-znak;
if (y mod SummSteps)-steps > 0 then TracerX:= TracerX-znak;
Но там ничего не интересно особо. Теперь к самому интересному — процессору без счётчика команд. Эта идея мне пришла сразу, как только от формул я вернулся к схеме конвейера. Представлю немного изменённую схему, так как она уже с элементами под описание конвейера без счётчика команд.
То-есть, на схематичном изображении представлены, от второго блока и выше, конвейер (ядро) препроцессора. Согласно прошлой публикации — роль аналога CPU будет выполнять постпроцессор. И препроцессор, и постпроцессор — в данной архитектуре являются физическими процессорами (в IT препроцессор — программный продукт).
Что тут изображено по порядку кэш циклов — на нём задерживаться не стоит, просто стоит отметить что циклы тут обособлены в некий тип и у них свой кэш. Это сделано не просто так, а для того, чтобы средства контроля, пока выполняется команда в следующих справа на лево кэшах, при возможности исполняли свою команду над кэшом цикла и переводили его в режим ожидания завершения работы со следующими кэшами, условно принцип — «прикоснись и иди дальше», или нечто вроде работы некоторого многозвенного автомата. Кэш мостов — это самая интересная часть, на мой взгляд, так как именно она открывает возможность реализации процессора без счётчика команд, впрочем на этот кэш и тип мной изначально возлагались большие надежды, так как с его помощью планировалось проводить в рантайме небольшие модификации кода, но идеи такой хорошей как сейчас тогда не было. Часть кэша мостов прикреплена к кэшу команд на схеме — зелёные ячейки, биты, содержащие или нули или единицы. Такого-же размера ячейки справа — биты выполнения кода. На схеме красная ячейка с единицей — представляет адрес кэша команд, с которого читается команда. Далее текстовое изложение усложняется, как это должно работать после чтения команда кэш команд должен перейти к следующему адресу, для этого по линии битов мостов пускается сигнал, и если в следующем адресе бит мостов содержит единицу, то она (наверное средством типа месфета, тут я полный нуб и мне многое предстоит изучить) аппаратно блокирует прохождение сигнала дальше по линии битов мостов, если ноль — то свободно пропускает, не активируя текущий его адрес для чтения (не записывая в него единицу), как только будет достигнут бит мостов с единицей — в него перезапишется бит выполнения в единицу, а в изначальном он выставится в ноль. Конечно в электронике, в отличии от алгоритмов и способов, я новичок, и скорых результатов и публикаций от меня не будет. Реализация, как новичку мне представляется не сложной — две дорожки с минимальными средствами типа месфета (это не точно, поскольку тут я полный нуб, но не совсем), конечно я не знаю насколько просто это исполнить на FPGA, ну и разумеется две битовые ячейки на каждый адрес кэша команд: бит выполнения и бит мостов. Модификации выполняемой программы планируется выполнять посредством команд установки состояния битов мостов. Тут уж извините за мою хромую терминологию — обещаю всё подтянуть к следующей, не скорой, публикации , с уже какими-то результатами. Изначально, от идеи «поляризации машинного зрения», мною решалась задача поиска наиболее быстрых способов, алгоритмов, это созранилось и при написании генератора карт (в рамках проекта), этого — же эффекта мной ожидается и от данной архитектуры — не нужно будет искать адрес в кэше команд, переход к следующему будет совершаться аппаратно и полностью автоматически. При желании можно сделать ядро многорежимным, или при необходимости, этот опыт кэша мостов (без счётчика команд) можно будет применить и к остальным кэшам процессора. Все кэшы, предполагается, будут доступны программисту для манипуляций над ними посредством команд.
Если у кого-то будет желание мне помочь в освоении новых знаний, для продолжении работы, то предоставлю информацию: ОС Ubunta 22.04, из полезных программ — Qucs Spice, её только вот-вот начинаю осваивать в краткий прайм-тайм между временем уходящим на основную работу и сном, минус какие-то обычные бытовые повседневные дела. Просто был человек, которому вроде не безынтересно, эта информация больше для него, ну плюс виртуал бокс, но это может +и вообще не понадобится. В рамках проекта не откажусь от любой помощи. Не знаю как вам, а мной надежда не была потеряна десятилетиями (именно решение задачи машинного зрения мной было обозначено как для своего пути для создания AI, ну правда вот и до архитектур дошло, после алгоритмов). Прошу сильно не ругать — ничего чужого не трогаю, все наработки и работы — чисто собственные, поэтому и продолжаю идти своим путём. Если кто-то считает что это втержение с моей стороны в его сферу — это его заблужение, так как сфера его не является, а является результатом работы поколений и умов, а патенты на изобретательскую деятельность ещё не изобрели, да и вряд-ли это случится. И кстати повторюсь на всякий случай (многие не внимательно читают) — всё это продолжение работы: этап, анализ, продолжение; этап, анализ, продолжение … — никаких фантазий. Начало схемы электронной мной уже положено (это конкретно по кэшу команд и мостов), но что-то я стесняюсь его публиковать, ибо нуб.
Спасибо за внимание, с надеждой на понимание.