English
version
Задать вопрос

Новости

20 октября 2016

Архитектура MIPS и многопоточностьСтатья в блоге Алекса Войки (Alex Voica, https://imgtec.com/blog/author/alexvoica/)

Алекс Войка, Лондон, Великобритания, 14 июля 2016 г. — В предыдущей статье я описывал базовые понятия о компьютерной виртуализации и о том, как архитектура MIPS эффективно реализует аппаратную виртуализацию. В данной статье мы рассмотрим, что такое многопоточность, и попытаемся понять, что это такое и почему это полезно.

Поток (thread) представляет собой последовательность инструкций. Многопоточность означает способность того или иного процессора (напр., CPU, GPU и т.д.) обрабатывать несколько потоков одновременно. Не вдаваясь слишком глубоко в то, что именно представляет собой понятие «поток», давайте полагать, что потоки – это задачи или операции.

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

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

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

Аппаратная многопоточность значительно повышает производительность конвейера

Далее термин «многопоточность» будем применять в значении аппаратной многопоточности, которую поддерживает архитектура MIPS посредством многопоточных расширений (MT ASE) и многопоточного модуля MIPS.

Встроенные процессоры приближаются к пределу своих возможностей. В последнее десятилетие разработчики систем на кристалле все больше рассчитывают на многоядерность для обеспечения масштабируемости производительности. Куда эта гонка привела нас? Массовые процессоры смартфонов ушли от двухъядерных конфигураций, работающих на частоте 1 ГГц в 2012 году, к десятиядерным версиям с частотой 2,5 ГГц в 2015 – то есть за три года число процессоров увеличилось в 5 раз. За это время технология производства тоже улучшилась, хотя и не так сильно, с 40 микрон в 2012 г. до 28 микрон или даже 14 микрон теперь. Однако, как правило, 28 микрон применяется для массовых процессоров, а 16 микрон и ниже в основном используется для рынка суперкомпьютеров предельной вычислительной мощности.

Это значит, что разработчики CPU нуждаются в других решениях для увеличения производительности, при этом сохраняя тенденцию уменьшения размеров кристалла.

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

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

Многопоточность наилучшим образом позволяет решить вопросы, упомянутые выше. Например, выбор двухпоточного одноядерного процессора сразу дает архитекторам системы 30-50% прибавку к производителности при минимальном увеличении размера. Кроме того, активизация потока – это мгновенный процесс, не требующий дополнительной логики управления питанием, которая необходима для многоядерных систем.

Многоканальность MIPS дает до 50% прироста производительности в приложениях LTE

Есть еще одна причина, почему многопоточность полезна для встроенных систем на кристалле: надежная работа в режиме реального времени. Архитекторы систем имеют возможность динамического распределения потоков между требующими ресурсов функциями ввода/вывода; например, поток попытается считать значение из системы ввода/вывода, перейдет в режим ожидания и возобновит работу, когда данные будут готовы. Это позволяет снизить непроизводительные издержки, связанные с обслуживанием прерываний.

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

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

С учетом вышеизложенного, напрашивается очевидный вывод, что многопоточность полезна для целого ряда сценариев. Разберемся, как же реализуется многопоточность в процессорах MIPS?

MIPS I6400 – это новейший процессор производства Imagination с аппаратно реализованной многопоточностью

Один из способов объяснить многопоточность – провести «экспресс-курс» по современным операционным системам. Когда поток не действует, счетчик команд должен сохранить адрес, с которого поток начнет свою работу, когда он начнет действовать. Кроме того, процессор должен отслеживать все сохраненные значения из регистров, видимых программатором; для программ, работающих в пользовательском режиме на процессоре MIPS CPU, это будут регистры общего назначения (GPRs) и умножитель-накопитель (MAC). Процессор также хранит идентификатор для каждого действующего потока, а также флаг для обозначения привилегий ядра (напр., исполнение системного вызова).

Операционная система, работающая на многопоточном процессоре, поддерживающем множественное адресное пространство, также будет требовать значение ASID, потому что оно используется аппаратными средствами при трансляции адресов.

Таким образом, любой поток в процессоре MIPS будет содержать копию счетчика команд и регистра общего назначения, уникальный идентификатор канала, режим ядра, и значение ASID; эти значения составляют контекст потока.

Процессоры MIPS традиционно поддерживают аппаратную многопоточность

Популярные операционные системы, способные обнаруживать и использовать многопоточные аппаратные средства, включают SMP Linux, Android или Windows. Компания Imagination тесно сотрудничает со своими партнерами по среде поддержки, чтобы все операционные системы, поддерживающие MIPS, гарантированно могли использовать все преимущества многопоточной технологии наших аппаратных средств. Например, ThreadX от Express Logic обладает оптимизированным контекстным переключением, реализованным наряду с нашими многопоточными расширениями MIPS для процессоров I-класса.

Поэтому — неважно, используете ли вы дистрибутивы на базе SMP Linux, наподобие Android, или операционную систему, управляющую обработкой данных в реальном времени, наподобие ThreadX — если она поддерживает MIPS, то она может поддерживать и многопоточность MIPS.

Оригинал этой статьи: https://imgtec.com/blog/the-mips-architecture-and-multithreading/

Теги
Мы в соцсетях