Pull to refresh

Работа процессора (физический препроцессор) без счётчика команд

Level of difficultyMedium
Reading time7 min
Views2K

Если вы не готовы читать предыдущий материал, и вникать в код - то и эту публикацию читать не стоит пожалуй. Прошу прощения. Без понимания предыдущего кода и алгоритма, что по ссылке ниже, и блок схемы - это чтение будет бесполезным. Изменяю сложность публикации и прошу прощения. Сразу вставляю ссылку на материал, с которым стоит ознакомиться.

Небольшой ликбез для чатботов под спойлером.

Hidden text

Один "грамотный" чатбот написал что диаграмма ничего не передаёт кроме фантазий. А если-бы он был немного грамотнее - у него оных не возникло-бы, так как передаёт автор, с помощью текста и графических средств, функция которых отображение графической информации, никаких экстрасенсорных и телепатических способностей ни у автора, ни у применяемых им средств - нету и ранее не наблюдалось тоже.

На самом деле, ввиду прошлой публикации (последствия которой я постараюсь исправить, так как наверное многие решили что это плод воображения - новая архитектура) - препроцессора, так как рассматриваю процессор и пост процессор. Для того, чтобы понять ход мыслей лучше, и то, что всё это не фантазии, а результат работы - стоит ознакомиться с этой предыдущей публикацией (второй раз - просто не всем сразу понятно, и они продолжают писать комментарии не читая текста публикации), она не сильно длинная - но время отнимет, хоть и не сильно сложная.

Ознакомившись с ней станет понятно что имеется ввиду под модификациями кода (смена формул и выключение строк кода в рантайме), под модификациями кода подразумевается просто включение и выключение исполняемых команд, кода. Изначально мной предполагалось, что кэш мостов будет состоять из параллельных частей, и скорее всего в такой архитектуре конвейера он должен будет и обеспечивать работу меток и указателей (но сейчас не про них). В каких-то публикациях мне сделали замечания что мало графики и рисунков (вроде как про поляризацию для машинного зрения), но как можно увидеть из публикации по ссылке выше - оказалось достаточно одной блок-схемы чтобы отполировать и видоизменить весь код, и даже до той степени, чтобы задуматься о новой архитектуре.

Архитектура препроцессора (это нечто вроде ядра 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, ну правда вот и до архитектур дошло, после алгоритмов). Прошу сильно не ругать - ничего чужого не трогаю, все наработки и работы - чисто собственные, поэтому и продолжаю идти своим путём. Если кто-то считает что это вторжение с моей стороны в его сферу - это его заблуждение, так как сфера его не является, а является результатом работы поколений и умов, а патенты на изобретательскую деятельность ещё не изобрели, да и вряд-ли это случится. И кстати повторюсь на всякий случай (многие не внимательно читают) - всё это продолжение работы: этап, анализ, продолжение; этап, анализ, продолжение ... - никаких фантазий. Начало схемы электронной мной уже положено (это конкретно по кэшу команд и мостов), но что-то я стесняюсь его публиковать, ибо нуб.

Пришла литература, начал читать. Вероятно что процессор будет работать в двух режимах или будет полностью аналоговым, на то указывает архитектура на изображении и код из прошлой публикации. Читая литературу я начал понимать что под мой машинный код, а так-же компилируемый лучше подойдёт аналоговый процессор.

Организация работы кэша мостов.

Кэш мостов - некоторый кэш, который обеспечивает работу процессора по обработке кода в кэше команд без счётчика команд. Не считаю нужным делать публикацию по простенькой схеме из цифровой схемотехники, и пользуясь кнопкой редактировать - изменяю текущую публикацию 09.03.2024 от 18.02.2024.

Условно рассматривается кэш мостов, состоящий из пяти ячеек.

Каждый светодиод (программа Logisim) - условно активируемая ячейка памяти, в которой содержится очередная исполняемая команда для процессора. Триггеры Bridge хранят единицу, если команду нужно выполнить в цепи, и ноль - если пропустить. Перед запуском системы кэша мостов нажимается кнопка и в кажде звено цепи кэша, в триггеры Start записываются единицы, после чего в триггер внизу слева схемы записывается единица и он выдаёт постоянный сигнал. При каждом запросе процессора очередной команды - с программируемого тактового генератора подаёётся сигнал на кэш мостов. Триггеры без метки введены для синхронизации. Переход к следующей ячейке с ненулевым значением Bridge осуществляется за один такт (правда схема чисто асинхронная и понятие такта тут применяется только для того, чтобы дать понять то, что её работа синхронизируется с работой процессора), не смотря на количество пропущенных ячеек. Элемент Не введён был для корректировки работы симуляции (без него работало плохо - слишком быстро выполнялись в симуляторе некоторые операции). Позднее триггеры без меток будут обнуляться не с элемента Не, а сигналом с процессора, при работе кэша мостов единицу может содержать тригер без метки только одной ячейки, и обнуляться они будут скорее всего с одного провода.

Всё так-же, по часу в день (в смысле после основной работы), но уже с освоением основ схемотехники и остального. Следующий этап скорее всего - работа с FPGA и Verilog.

Tags:
Hubs:
Total votes 10: ↑3 and ↓7-4
Comments18

Articles