Данная статья пишется с несколькими целями: изложить возможные методы повышения быстродействия стековых процессоров, собрать попутно небольшую библиографию, и закрепить на данный момент что мне известно в этой области. Статья или точнее пост, выйдет крайне сухим и лапидарным.
Статья очень обзорная, даже поверхностная и в ней я не буду углубляться в детали реализации, так как основной целью является сбор и публикация в одном месте тех сведений которые остаются малоизвестными широкой общественности, что бы можно было проводить работу вокруг уже стабильного текста. Малоизвестность их, связана и с недоступностью патентных баз, с тем что некоторые исследования либо недавние, либо только относительно недавно попали в открытый доступ и пылились в архивах.
Часть положений не имеет ссылок на литературу, в силу не полной разработанности темы. И еще потому, что это довольно общеизвестные факты, которые легко найти. А так же потому, что упор сделан на то что неизвестно широким массам общественности.
Широко распространено мнение, что стековые процессоры являются тупиковой ветвью развития, я считаю что это не так. Многие люди полагают, что в стековом процессоре нельзя реализовать те же решения, которые в регистровых процессорах являются основными причинами повышения производительности. Поэтому на сегодняшний момент, стековые, форт -процессоры, в основном используются во встраиваемых системах. Это обусловлено не только их принципиальной ограниченностью, но и основным полем деятельности их разработчиков. Я полагаю, что стековые процессоры могут быть не только процессорами реального времени, но и процессорами общего назначения, пригодными для десктопного и серверного использования.
Для того что бы построить собственный стековый процессор на сегодня достаточно отладочной платы с fpga на борту. Стековый софт-процессор обычно имеет почти в два раза меньший размер аналогичного по разрядности регистрового. Более меньший размер процессорного ядра положительно скажется на цене процессора при его изготовлении в виде сбис.
Способы и блоки для повышения производительности стековых процессоров.
Однопоточные:
Специфические для стековых процессоров.
Устранение излишних взаимообменов и копирований.
Введение регистров промежуточных значений(«кэширующих» регистров).
Предсказатель адресов возврата (return address predictor).
Многостековость.
Опционально - Совершенная ПОЛИЗ
Общие для регистровых и стековых процессоров:
Кэш (не сильно ускорит сам процессор, зато ускорит выполнение программы которая полностью в кэше).
Кэш стека.
конвейер, возможен глубокий конвейер использующий delay slots, двухстадийный fetch+decode-read+exec+write+mem ( SC32 stack processor).
Алгоритм Томасуло так же реализуем на стековой машине, и решает проблему ее постоянного обращения в память. (спекулятивное исполнение).
Параллелизм:
Многопоточность
Параллелизм
Библиография по пунктам:
Стековые машины с изменяемой адресностью команд. Н.П. Брусенцов
Стековые машины с изменяемой адресностью команд. Н.П. Брусенцов
Dual-Stack Return Address Predictor Caixia Sun, Minxuan Zhang.
По материалам сети интернет.
Стековые машины с изменяемой адресностью команд. Н.П. Брусенцов
По материалам сети интернет.
Development of a forth language directed processor using very large scale integrated circuitry. susan c. lee and john r. hayes
Development of a forth language directed processor using very large scale integrated circuitry. susan c. lee and john r. hayes
BOOST: Berkeley’s Out-of-Order Stack Thingy. Steve Sinha, Satrajit Chatterjee and Kaushik Ravindran
П. Н. Советов, И. Е. Тарасов Разработка многопоточного софт процессора со стековой архитектурой на основе совместной оптимизации программной модели и системной архитектуры.
авт.свид. № 556440 1976 г. В.М. Яковлев Устройство для управления параллельным выполнением команд в электронной вычислительной машине; авт.свид. № 2316853/24 Ю. Х. Сахин Устройство для управления параллельным выполнением команд в стековой электронной вычислительной машине.
Я полагаю, что отставание стековой машины по быстродействию относительно регистровой машины может быть и будет скомпенсировано, в известной степени, чрезвычайно компактным кодом стековой машины (меньше работы), а так же предположительно получить превосходство по быстродействию над регистровыми машинами за счет ПО написанного на конкатенативных, стековых языках программирования. То есть на языках типа Forth. Именно этот момент следует рассматривать, как некий способ повышения быстродействия стекового процессора.
Как мы видим в стековом процессоре можно использовать блоки которые повышают производительность, и которые сегодня используются в регистровых процессорах: кэши, конвееры, спекулятивное исполнение, существует свой аналог предсказателя переходов (предсказатель адресов возврата (return address predictor)), многопоточность, параллельная обработка, многоядерность, кластеры из ядер, и многопроцессорность, есть свои собственные способы увеличения производительности процессоров, недоступные регистровым машинам: многостековость, и предсказание адресов возвратов в стеке.
Таким образом стековые процессоры по прежнему остаются интересной, альтернативной линии развития процессорных архитектур.
В данном случае, стековые процессоры являются целью. Поэтому выбор регистровых архитектур не рассматривается. Там уже есть risc-v.
update 6.03.2022
update 12.08.2024
Глазковая оптимизация кода forth
https://fforum.winglion.ru/viewtopic.php?f=58&t=3185