Введение

Процессор, переключающийся между потоками выполнения на каждом цикле. Барельный процессор – это процессор, переключающийся между потоками выполнения на каждом цикле. Эта техника проектирования процессоров также известна как "перемежающаяся" или "мелкозернистая" временная многопоточность. В отличие от одновременной многопоточности в современных суперскалярных архитектурах, она, как правило, не позволяет выполнять несколько инструкций за один цикл. Подобно прерывистой многозадачности, каждому потоку выполнения назначается свой собственный счётчик команд и другие аппаратные регистры (архитектурное состояние каждого потока). Барельный процессор может гарантировать, что каждый поток будет выполнять одну инструкцию каждые n циклов, в отличие от системы с прерывистой многозадачностью, которая обычно выполняет один поток в течение десятков миллионов циклов, в то время как все остальные потоки ждут своей очереди. Метод, называемый "замедлением C", может автоматически генерировать соответствующую конструкцию барельного процессора из конструкции однозадачного процессора. Барельный процессор с n уровнями, созданный таким образом, функционирует как n отдельных многопроцессорных копий исходного однозадачного процессора, каждая из которых работает примерно на 1/n от первоначальной скорости.

История

Одним из самых ранних примеров процессора с бочкой была система обработки ввода-вывода в суперкомпьютерах серии CDC 6000. Они выполняли одну инструкцию (или часть инструкции) от каждого из 10 различных виртуальных процессоров (называемых периферийными процессорами), прежде чем вернуться к первому процессору. Как указано в документации к серии CDC 6000: "Периферийные процессоры коллективно реализованы как процессор ствола. Каждый выполняет процедуры независимо от других. Они являются ранним предшественником мастеризации шины или прямого доступа к памяти". Одной из мотиваций для создания процессоров с бочкой было снижение стоимости аппаратного обеспечения. В случае с PPU CDC 6x00 цифровая логика процессора была значительно быстрее, чем основная память, поэтому вместо десяти отдельных процессоров использовались десять отдельных блоков основной памяти для PPU, при этом все они совместно использовали один набор логики процессора. Другой пример – Honeywell 800, который имел 8 групп регистров, позволяющих выполнять до 8 программ одновременно. После каждой инструкции процессор (в большинстве случаев) переключался на следующую активную программу в последовательности. Процессоры с бочкой также использовались в качестве крупномасштабных центральных процессоров. Tera MTA (1988) представлял собой крупномасштабный процессор с бочкой, имеющий 128 потоков на ядро. Архитектура MTA продолжала развиваться в последующих продуктах, таких как Cray Urika GD, первоначально представленный в 2012 году (под названием YarcData uRiKA) и предназначенный для задач анализа данных. Процессоры с бочкой также находят применение во встраиваемых системах, где они особенно полезны благодаря своей детерминированной производительности потоков в реальном времени. Ранним примером является версия "Dual CPU" четырехбитного COP400, представленная компанией National Semiconductor в 1981 году. Этот микроконтроллер в одном чипе содержит два, казалось бы, независимых процессора, совместно использующих инструкции, память и большинство устройств ввода-вывода. Фактически, двойные процессоры представляют собой одно двухпоточный процессор. Он работает путем дублирования определенных разделов процессора – тех, которые хранят архитектурное состояние, – но не дублируя основные вычислительные ресурсы, такие как АЛУ, шины и память. Отдельные архитектурные состояния устанавливаются с помощью дублированных регистров A (аккумуляторов), B (указателей), C (флагов переноса), N (указателей стека) и PC (счетчиков команд). Другой пример – XMOS XCore XS1 (2007), четырехступенчатый процессор с бочкой, имеющий восемь потоков на ядро. (Более новые процессоры от XMOS также имеют аналогичную архитектуру.) XS1 используется в устройствах Ethernet, USB, аудио и управления, а также в других приложениях, где критически важна производительность ввода-вывода. При программировании XS1 на языке 'XC' может быть реализован программно-управляемый прямой доступ к памяти. Процессоры с бочкой также использовались в специализированных устройствах, таких как сетевой процессор ввода-вывода Ubicom IP3023 с восемью потоками (2004). Некоторые 8-битные микроконтроллеры компании Padauk Technology оснащены процессорами с бочкой, поддерживающими до 8 потоков на ядро.

Преимущества

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

Недостатки

Есть несколько недостатков процессоров с бочкообразной архитектурой. Состояние каждой нити должно сохраняться на кристалле, как правило, в регистрах, чтобы избежать дорогостоящих переключений контекста с использованием внешней памяти. Это требует большего количества регистров по сравнению с обычными процессорами. Либо все нити должны совместно использовать один и тот же кэш, что снижает общую производительность системы, либо для каждой нити исполнения должен быть выделен отдельный блок кэша, что может значительно увеличить количество транзисторов и, следовательно, стоимость такого процессора. Однако в жестких встраиваемых системах реального времени, где часто используются процессоры с бочкообразной архитектурой, стоимость доступа к памяти обычно рассчитывается исходя из наихудшего сценария работы кэша, поэтому это не является существенной проблемой. Некоторые процессоры с бочкообразной архитектурой, такие как XMOS XS1, вообще не имеют кэша.