Перейти к содержанию
    

Применяется ли безтриггерный конвейер?

Добрый день!
Восполняя пробелы своего образования иногда натыкаюсь на тематические пробелы комьюнити - на темы, которые не принято обсуждать в приличном обществе.

Например, некоторое время назад я задавал ряд вопросов про работу конвейера STM32F1xx (Cortex-M3).
Глобально, меня интересовало, как детерминированно определить время исполнения любой команды в Cortex-M3.
Если формулировать вопрос более узко, то сейчас я пожалуй спросил бы, отражено ли где-нибудь в документации, как именно Cortex-M3 производит предварительную выборку команды в конвейер в случае ветвления. То есть каким правилом он руководствуется. Крайне маловероятно, чтобы это правило у микроконтроллеров в корпусах LQFP-48 предусматривало какую-то сложную эвристику.

Ответы оказалось возможным сгруппировать в три категории:
1) А зачем вам это всё знать?
2) Используйте регистр DWT для статистической оценки времени выполнения команд.
3) В XXI веке в приличном обществе не принято считать такты. Вот раньше Жигули заводились с крюка, а теперь вы ищите этот крюк в Мерседесе. Вы всё делаете не так, а надо делать так.

- По поводу комментариев, подобных первому, я изложил суть здесь.
- Использование статистических методов для определения результатов детерминированного процесса у меня вызывает ассоциации с бегом в мешке - можно, но зачем?
- По поводу крюка, Мерседеса и приличий я совсем недавно открыл для себя микроконтроллеры Sitara AM437x 2014 года от Texas Instruments. По сути эти микроконтроллеры являются Мерседесом с двумя крюками. В них помимо ядра Cortex-A присутствует пара сопроцессоров PRU0/PRU1. Сопроцессоры представляют из себя неконвейризированные(!) вычислительные ядра, работающие на частоте 200МГц и имеющие гарантированное и фиксированное время выполнения инструкций в 5 нс. А ещё есть статья Ensuring real-time predictability, рассказывающая об этой серии микроконтроллеров и намекающая, что подсчёт тактов в XXI веке вполне актуален.
 

Но теперь у меня появился новый неприличный вопрос.
Возможен ли конвейер без триггеров? Точнее так, конечно он возможен. Но есть ли такой класс задач, где подобное нетипичное решение имело бы какие-либо преимущества? И если да, то каковы особенности конструирования подобного устройства? Гуглинг по словам trigger-free pipeline и triggerless pipeline не выявил никаких процессоро-подобных изделий. Но возможно кто-нибудь сталкивался с подобным. Или сможет объяснить, почему подобная структура принципиально не применима ни в одной практической задаче. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, flammmable сказал:

Возможен ли конвейер без триггеров. Точнее так, конечно он возможен. Но есть ли такой класс задач, где подобное нетипичное решение имело бы какие-либо преимущества? Гуглинг по словам trigger-free pipeline и triggerless pipeline не выявил никаких процессоро-подобных изделий. Но возможно кто-нибудь сталкивался с подобным. Или сможет объяснить, почему применение подобной структуры принципиально неприменимо. 

Тут какая то путаница... Слово конвейер как раз и задаёт схему где между логикой вставляются триггеры.

Если от туда выкинуть триггеры то останется обычная логика. Но исчезнет конвейер.

Её применяли испокон веков и нет проблемы её использовать сейчас. Любой длины и сложности. Главное результат забирать вовремя 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/4/2024 at 5:11 PM, MegaVolt said:

Тут какая то путаница... Слово конвейер как раз и задаёт схему где между логикой вставляются триггеры.

Если от туда выкинуть триггеры то останется обычная логика. Но исчезнет конвейер.

Её применяли испокон веков и нет проблемы её использовать сейчас. Любой длины и сложности. Главное результат забирать вовремя 🙂

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/4/2024 at 5:14 PM, flammmable said:

Возможно ли такое неконвейризированное процессорное ядро, в котором время выполнения инструкции (точнее, время прохождения очередной инструкции от её выборки до исполнения) было бы больше периода тактового сигнала?

несколько тактовых сигналов.
Если я правильно понял вопрос - то в первых процессорах так оно и выполнялось - такт на выборку инструкции из ROM, затем - выборка (загрузка) операндов, такт (или больше) - на выполнение команды. А то и микропрограммы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 минут назад, flammmable сказал:

Возможен ли конвейер без триггеров? Точнее так, конечно он возможен.

Невозможен, поскольку простые логические элементы линейные схемы — требуется как минимум один нелинейный элемент Шмитта, на входе или на выходе, и увы, он триггер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, flammmable сказал:

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

Да без проблем. В чём сложность? Какое ни будь умножение будет явно длиннее одного такта. И результат будет готов сильно позже. Нет проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но проблем нету в ПЛИС. Если мы приходим к асикам и используем динамическую логику то может оказаться что она не будет работать на медленных частотах и придётся ставить триггеры чтобы каждый этап работал побыстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/4/2024 at 7:04 PM, MegaVolt said:

Да без проблем. В чём сложность? Какое ни будь умножение будет явно длиннее одного такта. И результат будет готов сильно позже. Нет проблемы.

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

В рассматриваемом случае динамическая и статическая памяти нам не интересны. В конвейризированном процессороподобном устройстве между стадиями конвейера будут стоять триггеры.
 

Но. Что если длинная и безтриггерная структура, реализующая операции fetch-decode-execute-save будет, так скажем, "запоминать" промежуточные результаты подобно тому, как это делали линии задержки? То есть триггеров нет, но полное исполнение инструкции занимает больше одного такта и в структуре идёт одновременная обработка разных стадий инструкции. И в той части, что функционально соответствует стадии execute есть вывод, заходящий в стадию fetch для сброса этого псевдоконвейера в случае не-угадывания направления ветвления.
 

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

Хочу проговорить, я не пытаюсь тут изобрести вечный двигатель. Но, как мне кажется, технически, такую структуру вполне возможно построить. А раз возможно построить, то в рамках борьбы с зашоренностью, мне хотелось бы узнать:
- делает ли так кто-нибудь?
- если да, то зачем? Какие преимущества и на каких задачах будет иметь подобное устройство?
- если нет, то есть ли какие-нибудь доводы против, кроме сложности работы с задержками?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Существует целая наука, которая развивалась как в СССР, так и у вероятных противников (самосинхронные схемы / asynchronous circuit (clockless or self-timed circuit)), как делать такие цепи. Там разные подходы, есть академические книжки, есть чтото в сети

https://en.wikipedia.org/wiki/C-element

В 90е было много проектов делать простенькие АРМы тех лет на этих схемах. Но, похоже, коммерческой пользы не вышло.

Я в своей деятельности применял только один раз, для космоса сделали плату, в которой надо было чтото загрузить в тактовый генератор, чтобы пошел такт. Ну и такой самосинхронный spi сделал, заменил ff на латчи, ну и путь управления g входом сделал длиннее, чем логика на d, повезло, что была отстойная актеловская плис, где такие манипуляции были возможны. Да, частота этого spi сильно зависила от питания (наверно и от температуры - сам не смотрел, но надеюсь, что тестировали в термокамере).
Mожно было какой то тактовый генератор на задержках сделать и обычный rtl, но руки чесались сделать чтото асинхронное

 

upd: https://www.semanticscholar.org/paper/AMULET1%3A-a-micropipelined-ARM-Furber-Day/f2d688d32f0b812d3a3aec97f8a4cef8cc92a9b9

upd2: https://workcraft.org/  - раньше не видел, но гугль рекомендует

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/8/2024 at 11:17 AM, yes said:

Существует целая наука, которая развивалась как в СССР, так и у вероятных противников (самосинхронные схемы / asynchronous circuit (clockless or self-timed circuit)), как делать такие цепи. Там разные подходы, есть академические книжки, есть чтото в сети

https://en.wikipedia.org/wiki/C-element

В 90е было много проектов делать простенькие АРМы тех лет на этих схемах. Но, похоже, коммерческой пользы не вышло.

Я в своей деятельности применял только один раз, для космоса сделали плату, в которой надо было чтото загрузить в тактовый генератор, чтобы пошел такт. Ну и такой самосинхронный spi сделал, заменил ff на латчи, ну и путь управления g входом сделал длиннее, чем логика на d, повезло, что была отстойная актеловская плис, где такие манипуляции были возможны. Да, частота этого spi сильно зависила от питания (наверно и от температуры - сам не смотрел, но надеюсь, что тестировали в термокамере).
Mожно было какой то тактовый генератор на задержках сделать и обычный rtl, но руки чесались сделать чтото асинхронное

 

upd: https://www.semanticscholar.org/paper/AMULET1%3A-a-micropipelined-ARM-Furber-Day/f2d688d32f0b812d3a3aec97f8a4cef8cc92a9b9

upd2: https://workcraft.org/  - раньше не видел, но гугль рекомендует

 

Оо! Вот за этот ответ и ссылки большое спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цифровая электроника и в частности ПЛИС работает по тактам что само собой подразумевает "защелку" данных по фронту такта (упс - триггер). Даже варианты ядер которые могут работать за такт все равно требуют "защелку" данных, не говоря уже про сигнал "валид" (он то же по тактам) где в промежутках на шине данных может твориться любой треш. Уход от тактов и триггеров ведет в глубокую старину аналоговых вычислительных машин - стальной сундук с триодами-пентодами прекрасно обходился без триггеров и решал диф уравнения 20-х и более порядков в реальном времени. Хотя и в АВМ исследуется реакция RLC-цепочек на импульс...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...