Реферат: Машина с виртуальным мультипроцессированием: новая архитектура параллельных вычислений общего назначения Ефимов А. И



Машина с виртуальным мультипроцессированием: новая архитектура параллельных вычислений общего назначения

Ефимов А.И.


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


^ Параллельные вычисления общего назначения

В 60-70-х годах параллельные вычисления использовались в основном в специализированных суперкомпьютерах, предназначенных для векторной обработки [1]. Однако уже в 90-е годы признанным лидером в области архитектуры суперкомпьютеров Бартоном Смитом [2] была выдвинута очень актуальная задача создания суперкомпьютера общего назначения [3]. По его мнению, такой суперкомпьютер должен исполнять приложения с большим числом часто переключающихся нитей более эффективно, чем существующие кластерные машины на основе широко распространенных микропроцессоров [3]. Соответственно, появление подобных суперкомпьютеров должно обеспечить большой приток финансовых и людских ресурсов и тем самым, согласно [4], возродить интерес индустрии к дальнейшему развитию архитектуры компьютеров.


В последнее время вследствие увеличения производительности и уменьшения стоимости микропроцессоров область применения параллельных вычислений очень расширилась. Ведущие производители массовых микропроцессоров Intel и AMD уже выпускают многоядерные и многонитевые кристаллы как основную продукцию. Фирма Sun представила сверхпроизводительный восьмиядерный микропроцессор, способный исполнять до 64 нитей одновременно [5]. Как отмечает в ключевом докладе на международной конференции по суперкомпьютерам ISC'07 Бартон Смит [6], в настоящее время параллельные процессоры стали очень широко применяться даже в бытовой технике - в персональных компьютерах, ноутбуках и смартфонах. Поэтому перед компьютерной индустрией встал серьезный вызов необходимости разработки новой концепции и архитектуры параллельных вычислений, которые должны существенно упростить параллельное программирование систем произвольного размера и сложности.


Представляется, что изложенная в настоящей работе архитектура является достаточно адекватным ответом на этот вызов. На эту архитектуру получен патент Российской федерации [7] и была подана PCT-заявка, которая опубликована на сайте WIPO [8].


^ Реализация параллельных вычисления в существующих архитектурах


По видимому, самое радикальное упрощение программирования безотносительно к уровню языка кодирования алгоритмов связано с реализацией концепции виртуальной памяти в первом суперкомпьютере Atlas, разработанном еще в 1961 году [9]. Простота программирования для машин с виртуальной памятью заключается в возможности писать программы заботясь не том, чтобы их код и данные не превышали размер физической памяти машины, а только о том, чтобы они не превышали размер определяемого архитектурой процессора виртуального адресного пространства, размер которого на несколько порядков больше размера физической памяти. Например, простейшая программа сортировки массива методом пузырька является очень простой, если массив полностью умещается в памяти, но ее сложность возрастает на порядки, если массив не помещается в физической памяти, а виртуальная память в машине не поддерживается.


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


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


Рассмотрим сущность техники аппаратно-программного управления основными объектами в операционных системах [10,11] - программами, процессами и нитями. Программа является первичным объектом, представляющим собой результат трансляции исходных текстов на некотором языке программирования в объектные модули с последующим объединением в исполнимый файл - файл кода. Файл кода состоит из архитектурных команд, состав, формат и семантика исполнения которых полностью определяют программно-доступную архитектуру компьютера. Можно считать, что в процессорах любой архитектурах команды исполняются блоками функциональной логики (БФЛ) с использованием операционных регистров, физические адреса которых размещаются в полях операндов команд. Вся совокупность операционных регистров, с которыми работают все БФЛ процессора, далее называется блоком операционных регистров (БОР).


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


Программа начальной загрузки инициирует процедуру раскрутки, которая завершается запуском файла кода операционной системы (ОС). Код ОС порождает вторичные объекты - процессы и нити. Порождение нового процесса заключается в создании в физической памяти контекста процесса - древовидной структуры таблиц описания виртуальной памяти процесса в формате, который задан в спецификации УУП компьютера. Адреса корней всех деревьев контекста собраны в так называемую таблицу контекстов, адрес начала которой помещается в соответствующий регистр УУП. Каждый контекст имеет свой номер, который для простоты изложения будем называть идентификатором процесса.


Первым процессом, который создается в динамике работы ОС, является единственный процесс-ядро. Этот процесс имеет идентификатор 0 и является привилегированным – в нем могут исполняться все команды, обеспечивающие управление полным набором программно-доступных ресурсов ЭВМ. В динамике функционирования ОС для представления работ пользователя создает множество процессов и нитей пользователя. Эти процессы являются непривилегированными – в них может исполняться только сокращенный набор команд, обеспечивающих прямую работу только с частью ресурсов - подмножеством операционных регистров и виртуальной памятью данного процесса. Действия с прочими ресурсами компьютера, например с устройствами ввода-вывода, реализуются косвенно под контролем операционной системы посредством системных вызовов, синтаксических оформленных как обычные процедурные вызовы.


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


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

Если ОС является многопроцессной, она для каждого процесса строит дескриптор процесса, содержащий необходимую и достаточную информацию для загрузки контекста процесса на регистры УУВП. В частности, дескриптор процесса содержит блок операционных регистров. Принято считать [1,10] совокупность дескриптора нити и дескриптора процесса виртуальным процессором, главным свойством которого является способность приостанавливать и возобновлять продвижение последовательных вычислений под управлением ОС. Соответственно, функция ОС по продвижению вычислений множества виртуальных процессоров используя множество физических процессоров, называется мультипрограммированием [10].


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


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


Операционная система поддерживает взаимодействие программных нитей между собой, а также поддерживает обмен информацией между программными нитями и аппаратурой ввода-вывода. Взаимодействие программных нитей между собой строится на основе семафоров или их аналогов, например, мутексов ОС Linux и Solaris [11,12], обеспечивающих синхронизированное прохождение нитями особых участков кода – так называемых критических интервалов, внутри которых должна находиться не более чем одна нить. Основная неэффективность такого взаимодействия связана с тем, что при попытке входа нити в критический интервал по закрытому семафору, означающему его занятость другой нитью, запускается процедура ядра ОС, переводящая нить в состояние неактивного ожидания.


Такой перевод из состояния активности в состояние ожидания сводится к программной переписи дескриптора нити из операционных регистров процессора в память. При этом на операционные регистры процессора загружается дескриптор новой нити, которая начинает свою новую фазу активности. Такое переключение может происходить между нитями разных процессов, и фактически является переключением виртуального процессора на физическом процессоре, представляемого парой дескрипторов процесса и нити. Более детально техника синхронизации на основе семафоров описана ниже в разделе 5 в контексте описания средств синхронизации в предлагаемой архитектуре.


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


Из-за переключения контекста “пользователь-ядро” при системном вызове могут возникнуть дополнительные накладные расходы из-за переписи в контекст ядра параметров, которые передаются по указателю на область памяти в контексте пользователя так и при обратной передаче результата [11,12]. Очевидно, что для устранения таких накладных расходов код ядра должен иметь прямой доступ к памяти контекстов всех пользовательских процессов по адресной паре вида (PId,VA), где PId - идентификатор процесса, а VA - виртуальный адрес в контексте процесса.


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


Очевидно, что чем интенсивнее переключение нитей и работа с внешними устройствами, тем менее эффективно используются ресурсы процессора. Это приводит к тому, что основной показатель эффективности компьютера - отношение производительность/стоимость, измеряемый в настоящее время на вычислительных задачах, будет значительно снижаться при выполнении на компьютере параллельных вычислений общего назначения из-за большого объема накладных расходов при исполнении сервисов операционной системы. Можно количественно учесть такое снижение, распространив общетехнический показатель качества любых машин - коэффициент полезного действия Е (Efficiency) на архитектуру компьютеров и определить его следующей простой формулой:


E = (C-c)/C = 1- c/C,


где C (Coast) – общая стоимость оборудования, используемого при выполнении некоторого набора работ;

c – стоимость оборудования, которое использовалась при выполнении вычислений, определяемых как накладные расходы.


Точный расчет значения E, вообще говоря, достаточно сложная задача, которая может быть решена за счет введения дополнительного оборудования, аналогичного применяемому для динамического анализа размеров рабочих множеств кэш-памяти [13]. Однако простейший вариант оценки E в применении к процессору может выглядеть следующим образом


E = 1- t/T,


где T - общее время выполнения некоторого набора работ;

t - время работы кода операционной системы.


Значения T и t могут быть очень просто подсчитаны существующими операционными системами.


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


^ Машина с виртуальным мультипроцессированием


Сущность предложенной архитектуры, которая названа машиной с виртуальным мультипроцессированием - Virtual Multy Processing Machine (VMPM), заключается в тонко гранулированном распределенном представлении нитей и распределенной декомпозиции процессора, которые в совокупности естественным образом и очень эффективно позволили реализовать прямое аппаратное мультипрограммирование со следующими свойствами:


1. Аппаратное мультипрограммное приоритетное исполнение большого множества нитей N на таком объеме оборудования операционных регистров и блоков функциональной логики, который достаточного не более чем для n<

2. Специальная, тонко гранулированная декомпозиция блоков функциональной логики (БФЛ) процессора и соответствующее распределенное представление блока операционных регистров (БОР), обеспечивающие в совокупности полностью аппаратный перевод нитей между состояниями активности и ожидания.


3. Аппаратное вытеснение частей БОР по уровням виртуальной памяти длительно неактивных нитей и их обратная загрузка при переходе в состояние активности в соответствии с приоритетами нитей-хозяев и метрикой старения.


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


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


6. Аппаратные планирование времен наступления событий и приоритетный запуск на выполнение связанных с событиями нитей.


Термин машина с виртуальным мультипроцессированием подчеркивает тот факт, что предложенная архитектура является новым направлением виртуализации ЭВМ, по существу "ортогональным" к архитектуре виртуальной памяти, позволяющим сделать более простым и одновременно более эффективным параллельное программирование. Повышение удобства и эффективности состоит в том, что программистам предоставляется возможность использовать такое большое количество нитей, которое наиболее удобно отражает алгоритмическую сущность задачи в части состава и числа независимых последовательных активностей и при этом заботиться об эффективности их частого переключения не более, чем об эффективности доступа к массивам в виртуальной памяти очень большого объема.


Следует подчеркнуть глубокую аналогию предложенной схемы виртуализации активностей с виртуализацией памяти. Как отмечено в свойстве 1 выше, в ней виртуальное количество N нитей фактически исполняется на объеме оборудования, из которого может быть построено только n<виртуализованы блоки операционных регистров – образующие их подблоки регистров откачиваются и подкачиваются полностью аналогично элементам виртуальной памяти. Поэтому естественно ожидать, что в данной архитектуре при полностью аппаратной поддержке работы большого множества нитей будет автоматически формироваться множество активных нитей, которое естественно назвать рабочим множеством нитей. Это множество, в силу единообразия откачки-подкачки элементов БОР с откачкой-подкачкой блоков кода и данных по всем уровням виртуальной памяти, должно обладать свойством компактности, аналогичным свойству компактности рабочего множества страниц виртуальной памяти [10] в существующих архитектура. В соответствии с этим естественно ожидать, что предложенная архитектура VMPM будет обладать очень высокой эффективностью при исполнении параллельных вычислений общего назначения, как в суперкомпьютерах, так и недорогих микропроцессорах широкого применения.


В целом предложенная в данной работе архитектура VMPM существенно развивает направление повышение эффективности процессоров за счет виртуализации, начатое многонитевой архитектурой (Multi Threaded Architecture - MTA). Впервые эта архитектура была реализована еще в 60-е годы Сеймуром Креем в суперкомпьютере CDC 6600 [1] и впоследствии была существенно развита Бартоном Смитом в ряде широко использованных разработок [14-18]. Обзор основных разновидностей этой архитектуры и используемая терминология приведена в работе [19].


Как известно, в процессорах обычной архитектуры все блоки функциональной логики (БФЛ) всегда связаны с единственным блоком операционных регистров (БОР) и в совокупности представляют единственный физический процессор. В процессорах же многонитевой архитектуры [14-19] БФЛ в каждый момент времени БФЛ могут работать с несколькими БОР, образуя несколько виртуальных процессоров, параллельно продвигающих независимые нити вычислений. Соответственно, процессоры многонитевой архитектуры поддерживают полностью аппаратное управление только относительно небольшим количеством нитей, равным количеству БОР.


Преимущество архитектуры MTA перед обычной, однонитевой архитектурой процессоров общего назначения, состоит в том, что она обеспечивает очень высокую масштабируемость многопроцессорных систем. Например, новейший суперкомпьютер Cray XMT [18] с симметричным мультипроцессированием может содержать от 24 до 8000 MTA-процессоров с однородным доступом к 128 терабайт разделяемой памяти, причем в каждом из процессоров может исполняться 128 нитей. Такая масштабируемость достигается за счет отсутствия в процессорах локальных кэшей данных, поддержка когерентности которых является основным препятствием для наращивания размера мультипроцессорных систем на основе однонитевых процессоров. Вместо этого в MTA-компьютерах вводится общая память с большим общим для всех процессоров кэшем. Доступ к такой памяти согласно [17] занимает не более 70 тактов, и на это время выдавший запрос виртуальный процессор переходит в состояние ожидания. Соответственно параллельная работа 128 виртуальных процессоров позволяет нейтрализовать задержки из-за доступа в память. Это свойство архитектуры MTA согласно [3,19] называется толерантностью к архитектурным задержкам памяти.


Предложенная в данной работе архитектура VMPM за счет перевода длительно неактивных нитей в состояние ожидания и обратно в активное состояние специальной аппаратурой минимальной стоимости обладает свойством, которое можно назвать обобщенной толерантностью. Это свойство объединяет рассмотренную выше толерантностью к архитектурным задержкам памяти и толерантность к алгоритмическим задержкам непредсказуемой длительности, обусловленным логикой взаимодействия нитей друг с другом, устройствами ввода-вывода, а также страничными отказами виртуальной памяти. Следует отметить, что архитектура MTA обобщенной толерантностью не обладает - если нить в ней переходит в состояние ожидания по одной из рассмотренных выше алгоритмических причин, на стеке нити запускается процедура ядра ОС. Такая процедура программно выгружает дескриптор нити в память и загружает вместо него новый, монополизируя все устройства процессора, и тем самым нарушает введенный в предыдущем разделе принцип оптимальности – выполнение сервисных работ аппаратурой минимальной стоимости.


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



^ Общая схема организации компьютеров в архитектуре VMPM


Н
а рисунке 1 показана общая схема процессорного модуля (ПМ) (ядра в современной терминологии) в архитектуре VMPM. Особенностями процессорного модуля в архитектуре VMPM является замена существующей схемы выборки и исполнения команд двухуровневой схемой, а также распределенное, тонко гранулированное представление блоков функциональной логики (БФЛ) и блоков операционных регистров (БОР). В этой схеме первичную выборку архитектурных команд осуществляют мониторы нитей (МН), которые преобразуют последовательности команд в транзакции единой формы, содержащие собственно команды и отражающий частичный порядок их исполнения граф информационных зависимостей. Эти транзакции фактически представляют собой вторичные потоки команд, выдаваемые через процессорный коммутатор (ПКОМ) в исполнительные кластеры (ИКЛ). Процессорные модули объединяются в многопроцессорный комплекс через системный коммутатор (СКОМ).

В состав мониторов нитей и исполнительных кластеров могут входить собственные локальные устройства первого уровня – устройства памяти (L1ПАМ) и ввода-вывода (L1УВВ), управляемые общим контроллером (L1УУПАМВВ) с некогерентным кэшем первого уровня (L1КЭШ). Для взаимодействия нитей разных архитектур в состав ПМ могут входить общие устройства второго уровня - памяти L2ПАМ, ввода-вывода L2УВВ и их контроллера L2УУПАМВВ. Смысл введения общего контроллера для памяти и ввода-вывода будет ясен из изложенной в разделе 5 организации взаимодействия программных нитей с устройствами ввода-вывода.


Например, суперкомпьютер Cray XMT [18] в архитектуре VMPM должен иметь мониторы нитей типа Native Cray XMT и типа AMD Opteron. В первую очередь общие кластеры могут применяться для выполнения доступа к памяти, организации ввода-вывода, а также для исполнения команд арифметики с плавающей точкой. Совместное использование мониторами разных типов общих исполнительных кластеров является одним из примеров следования архитектуры VMPM определенному в конце раздела 2 принципу оптимальности.


Простейший микропроцессор в архитектуре VMPM может иметь единственные монитор нитей и исполнительный кластер, которые совместно используют L2УУПАМВВ, L2ПАМ и L2УВВ, а роль процессорного коммутатора может исполнять общая шина. Если не предполагается его использование в многопроцессорных конфигурациях, устройство L2УУПАМВВ может не поддерживать интерфейсы взаимодействия с системным коммутатором. При этом параллельное исполнение нитей будет выполняться множеством функциональных исполнительных устройств (ФИУ) единственного кластера.


Разные мониторы нитей и исполнительных кластеров могут через процессорный коммутатор взаимодействовать с устройством управления памятью и вводом-выводом L2УУПАМВВ. Это устройство обеспечивает работу с общими для процессорного модуля устройствами второго уровня – устройствами памяти (L2ПАМ) и ввода-вывода (L2УВВ), совместно использующие некогерентный по отношению к другим процессорным модулям кэш второго уровня. Устройство L2УУПАМВВ также поддерживает организацию процессорных модулей в многопроцессорную конфигурацию за счет взаимодействия по интерфейсам системного коммутатора (СКОМ) L3ПАМ и L3ВВ L3ПАМ и L3ВВ, обеспечивающим однородный доступ всех процессоров к общему полю памяти и ввода-вывода. Следует отметить, что за счет отказа в архитектуре VMPM от использования прерываний для организации ввода-вывода нет необходимости реализовать интерфейс межпроцессорных взаимодействий.


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


Основная логика работы VMPM-архитектуры едина как для процессорного модуля суперкомпьютера общего назначения, так и для простого микропроцессора. Она заключается в описываемом ниже взаимодействии мониторов нитей (МН) с исполнительными кластерами и отработке транзакций в исполнительных кластерах. В соответствии с этим для простоты изложения используется описание расширения достаточно простой и общеизвестной архитектуры SPARC V8 [20] средствами до SPARC V8 VMPM-архитектуры. На рисунке 2 приведена общая схема такого микропроцессора, содержащего монитор нитей, исполнительный кластер и устройство управления памятью и вводом-выводом.


Распределенное представление блока операционных регистров (БОР) для нее выглядит следующим образом. Часть БОР, образующая корень дескриптора нити, информация которого в соответствии с изложенным в разделе 2 необходима и достаточна для исполнения нити в контексте процесса-хозяина, содержит следующие регистры:


слово состояния программы PSR;

маску недоступных окон WIM;

регистр базы ловушек TBR;

счетчики текущей и следующей команды PC, nPC.


Размещаемые в дескрипторе нити дополнительные регистры VMPM-архитектуры содержат идентификатор нити (TID) и приоритет (Pr). Идентификатор нити TID содержит идентификатор контекста CTX, определяющий процесс-хозяин подмножества нитей и собственно идентификатор нити в рамках процесса tid. TID присутствует во всех частях распределенного представления БОР нити и логически объединяет части аналогично записям связанных таблиц в реляционной модели данных [21]. Это позволяет выполнять операции над распределенным представлением дескриптора нити – например, уничтожить нить или изменять ее приоритет.


Блоки архитектурных регистров разделяются на элементы, размещаемые в устройствах следующим образом. В кэше монитора нитей размещаются дескрипторы нитей (ДН), содержащие PSR, WIM, TBR, PC, nPC, идентификатор нити TID, приоритет Pr, а также буфер команд. В операционной регистровой памяти, с которой функциональные исполнительные устройства работают по физическим адресам, содержатся 3 вида элементов – полные наборы глобальных регистров %g и %y, регистров окон входных, выходных и локальных регистров, а также регистров плавающей точки.





На примере архитектуры SPARC V8 VMPM рассмотрим общую неоптимизированную форму транзакций, позволяющую представить частичный порядок параллельно-последовательного выполнения команд в соответствии логикой ускорения вычислений в суперскалярных процессорах, а также собственно команд в виртуализованной форме. Транзакция представляется набором связанных ссылками команд, имеющих следующий вид:


CTX.#i:[n, r].phbn (<архитектурная команда SPARC V8 >),


где CTX - идентификатор контекста, определяющий процесс-хозяин нити,

#i - виртуальный адрес команды в контексте CTX,

n - число команд, результатов которых ожидает данная команда,

r - виртуальный адрес команды, которая ожидает исполнения данной,

phbn – номер физического блока, в котором размещаются используемые в команде архитектурные регистры.


В фигурных скобках кодируется обычная архитектурная команда SPARC V8.


Рассмотрим набор команд транзакции, обеспечивающей параллельно-последовательное исполнение вычислений по формуле


x = (a+b) / (c-d).


Приняв от монитора нити транзакцию, секвенсор помещает в очередь к пулу ФИУ чтения-записи следующие команды:


CTX.#1:[0,6].phbn (ld [%fp + offset a], %l1)

CTX.#2:[0,6].phbn (ld [%fp + offset b], %l2)

CTX.#3:[0,7].phbn (ld [%fp + offset c], %l3)

CTX.#4:[0,7].phbn (ld [%fp + offset d], %l4)


В очередь ждущих секвенсор помещает следующие команды:


CTX.#5:[1,0].phbn (st %l0,[%fp + offset x])

CTX.#6:[2,8].phbn (add %l1,%l2,%l0)

CTX.#7:[2,8].phbn (sub %l3,%l4,%l4)

CTX.#8:[2,5].phbn (udiv %l0,%l4,%l0)


После исполнения команд #1 и #2 готовой станет команда #6, которую секвенсор переместит в очередь к пулу ФИУ сложения. Аналогично после исполнения команд #3 и #4 готовой станет #7 и так далее. Команда 5, имеющая нулевое поле ссылки на ожидающую команду, завершает транзакцию, и после ее исполнения секвенсор вернет результат выдавшему монитору нитей, который выдаст новую транзакцию. Количество параллельно исполняемых команд 1-4 определяется количеством независимых ФИУ чтения-записи – от одной до четырех. Аналогично, команды 6-7 могут быть исполнены параллельно. Единственное устройство деления (команда 8) может быть эффективно загружено относительно редкими командами деления нескольких нитей.


Кратко суть виртуализации команд заключается в следующем (см. рисунок 2). Адреса архитектурных регистров команды обычной архитектуры SPARC V8 AOp1-AOp3 монитором нитей преобразуются в адреса виртуальных регистров VOp1-VOp3. Эти адреса Vopx при передаче секвенсором команды во входную очередь ФИУ преобразуются с использованием кэша мапирования в физический адрес элемента PhBl блока операционных регистров и смещение регистра R в нем. Элементы БОР и команды при длительном отсутствии обращений к ним от секвенсора или исполнительных устройств перемещаются в более медленные уровни многоуровневой кэш-памяти. Откачанные блоки операндов БОР и команды при выполнении вновь перемещаются из кэш-памяти в элементы операционной регистровой памяти аналогично аппаратно-программной поддержке операционными системами при
еще рефераты
Еще работы по разное