Файл: Состав и свойства вычислительных систем. Информационное и математическое обеспечение вычислительных систем (Процессор ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.04.2023

Просмотров: 401

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

При разработке таких систем важно добиться масштабируемости, то есть она будет продолжать исправно работать при добавлении все новых и новых процессоров[5, с. 638].

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

Можно использовать использовать аппаратное обеспечение мультикомпыотера и операционную систему, которая будет моделировать общую память, предоставляя единое виртуальное адресное пространство, разбитое на страницы. При таком подходе получается распределенная общая память (Distributed Shared Memory, DSM), в которой каждая страница расположена в одном из модулей памяти, а каждая машина содержит собственную виртуальную память и собственные таблицы страниц. Если процессор выполняя команду обращается к странице, которой у него нет, происходит системное исключение. После этого операционная система находит нужную страницу и обращается к соответствующему процессору, чтобы тот выгрузил страницу из памяти и послал ее через внутреннюю коммуникационную сеть, по которой процессоры обмениваются сообщениями. Когда страница попадает процессу-получателю, она отображается на память, и выполнение прерванной команды возобновляется. Получается ,что операционная система просто получает недостающие страницы не с диска, а из памяти. При этом у пользователя создается впечатление, что машина имеет единую общую память[5, с. 638].

Можно реализовать общую память программно пользовательской системой реального времени. При таком подходе абстракцию общей памяти создает язык программирования, и эта абстракция реализуется компилятором (то есть модель общей памяти может зависеть от используемого языка программирования). Например, модель Linda основана на абстракции общего пространства кортежей (записей данных, содержащих наборы полей). Процессы любой машины могут взять кортеж из общего пространства или отправить его в общее пространство. Поскольку доступ к этому пространству полностью контролируется программно (системой реального времени Linda), никакой специальной аппаратной поддержки или особой операционной системы не требуется[5, с. 638].


1.3 Классификация параллельных компьютерных систем

Вычислительные системы появились как параллельные системы. За годы их разработки появились разные виды архитектуры. Поэтому необходима какая-то их классификации. Одна из них была предложена М. Флинном в 1966 году. В основе классификации лежат понятия потоков команд и потоков данных. Поток команд соответствует счетчику команд. Система с п процессорами имеет п счетчиков команд и, следовательно, п потоков команд. Поток данных состоит из набора операндов[5, с. 640].

Потоки команд и данных в какой-то степени независимы, поэтому существует 4 комбинации таких потоков .

SISD (Single Instruction stream Single Data stream — один поток команд с одним потоком данных) — это классическая последовательная компьютерная архитектура фон Неймана. Компьютер фон Неймана имеет один поток команд и один поток данных и в каждый момент времени может выполнять только одно действие[5, с. 640].

У машины, относящихся к категории SIMD (Single Instruction-stream Multiple Data-stream — один поток команд с несколькими потоками данных), имеется один блок управления, выдающий по одной команде, но при этом есть несколько АЛУ, которые могут обрабатывать несколько наборов данных одновременно. Прототип SIMD-машин — процессор ILLIAC IV (см. рис. 2.6). Хотя SIMD-машины не относятся к числу широко распространенных, в некоторых обычных компьютерах для обработки мультимедийных данных используются SIMD-команды. SSE-команды в процессорах Pentium относятся к категории SIMD-команд. В любом случае существует одна область, где идеи, почерпнутые из «мира SIMD», выходят на первый план, — это потоковые процессоры. Потоковые процессоры специально разработаны для обработки мультимедийных данных и в будущем они могут играть важную роль[5, с. 640].

MISD (Multiple Instruction-stream Single Data-stream — несколько потоков команд с одним потоком данных) —существуют ли реально такие машины не известно, хотя некоторые относят к категории MISD машины с конвейерами.

Последняя категория — MIMD (Multiple Instruction-stream Multiple Data- stream — несколько потоков команд с несколькими потоками данных). Здесь несколько независимых процессоров работают как часть большой системы. В эту категорию попадают большинство параллельных процессоров. И мультипроцессоры, и мультикомпьютеры — это MIMD-машины[5, с. 640].

В свете современных технологий классификацию Флинна можно расширить. SIMD-машины разделить на две подгруппы. В первую подгруппу попадают многочисленные суперкомпьютеры и другие машины, которые оперируют векторами, выполняя одну и ту же операцию над каждым элементом вектора. Во вторую подгруппу попадают машины типа ILLIAC IV, в которых главный блок управления посылает команды нескольким независимым АЛУ.


Категория MIMD на мультипроцессоры (машины с общей памятью) и мультикомпьютеры (машины с обменом сообщениями). Существует три типа мультипроцессоров. Они отличаются друг от друга механизмом доступа к общей памяти и называются UMA (Uniform Memory Access — однородный доступ к памяти), NUMA (NonUniform Memory Access — неоднородный доступ к памяти) и СОМА (Cache Only Memory Access — доступ только к кэш-памяти). В UMA-машинах каждый процессор имеет одно и то же время доступа к любому модулю памяти или каждое слово может быть считано из памяти с той же скоростью, что и любое другое слово. Если это технически невозможно, самые быстрые обращения замедляются, чтобы соответствовать самым медленным, поэтому программист не заметит никакой разницы, что позволяет создать однородный доступ. Такая однородность делает производительность предсказуемой, а этот фактор очень важен для создания эффективных программ[5, с. 641].

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

Доступ к СОМА-машинам тоже оказывается неоднородным, но по другой причине. Подразумевается использования основной памяти каждого процессора в качестве кэш-памяти.

Во вторую основную категорию MIMD-машин попадают мультикомпьютеры, которые в отличие от мультипроцессоров не имеют общей памяти на архитектурном уровне. Другими словами, операционная система процессора, входящего в состав мультикомпьютера, не сможет получить доступ к памяти другого процессора. Процессору придется отправить сообщение и ждать ответа. Именно способность операционной системы считать слово из удаленного модуля памяти с помощью команды отличает мультипроцессоры от мультикомпьютеров. Так как мультикомпьютеры не имеют непосредственного доступа к удаленным модулям памяти, их иногда относят к категории NORMA (NO Remote Memory Access — отсутствие удаленного доступа к памяти) [5, с. 642].

Мультикомпьютеры тоже можно разделить на две дополнительные категории. К категории МРР (Massively Parallel Processor — процессор с массовым параллелизмом) относятся дорогостоящие суперкомпьютеры, которые состоят из большого количества процессоров, связанных высокоскоростной внутренней коммуникационной сетью. В качестве хорошо известного коммерческого примера можно назвать суперкомпьютер SP/3 компании IBM[5, с. 642].


Вторая категория мультикомпьютеров включает обычные персональные компьютеры или рабочие станции, которые связываются в соответствии с той или иной коммерческой коммуникационной технологией. Эти системы иногда называют сетями рабочих станций (Network Of Workstations, NOW), кластерами рабочих станций (Cluster Of Workstattions, COW), или просто кластерами (cluster) [5, с. 642].

1.3.1 UMA

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

Если шина занята, процессор просто ждет, когда она освободится. С этой схемой связана одна проблема. При наличии двух или трех процессоров доступ к шине регулировать не сложно, трудности возникают, когда процессоров 32 или 64. Производительность системы в этом случае полностью определяется пропускной способностью шины, и многим процессорам большую часть времени приходится простаивать[5, с. 647].

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

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

В следующей схеме каждый процессор имеет не только кэш, но и собственную локальную память, к которой он получает доступ через выделенную локальную шину. Чтобы оптимально задействовать эту конфигурацию, компилятор должен поместить в локальные модули памяти весь программный код, строки, константы и другие данные, предназначенные только для чтения, а также стеки и локальные переменные. Общая память потребуется только для хранения совместно используемых переменных. В большинстве случаев такое разумное распределение значительно снижает интенсивность трафика на шине и не требует активного содействия со стороны компилятора[5, с. 648].

1.3.2 Numa

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


Чтобы объединить в одном мультипроцессоре более 100 процессоров, нужно какое-то иное решение. Ранее предполагалось, что все модули памяти имеют одинаковое время доступа. Если не замыкаться на этой концепции, можно прийти к мультипроцессорам с неоднородным доступом к памяти (NonUniform Memory Access, NUMA). Как и UMA- мультипроцессоры, они предоставляют единое адресное пространство для всех процессоров, но, в отличие от UMA-машин, доступ к локальным модулям памяти происходит быстрее, чем к удаленным. Следовательно, все UMA-программы смогут без изменений работать на NUMA-машинах, но производительность будет хуже, чем на UMA-машине с той же тактовой частотой[5, с. 656].

NUMA-машины имеют три ключевые характеристики, которые в совокупности отличают их от других мультипроцессоров:

- существует единое адресное пространство, видимое всеми процессорами;

- доступ к удаленной памяти производится командами LOAD и STORE;

- доступ к удаленной памяти выполняется медленнее, чем доступ к локальной[5, с. 656].

Если время доступа к удаленной памяти не замаскировано кэшированием (кэш отсутствует), такая система называется NC-NUMA (No Caching NUMA — NUMA без кэширования). Если присутствуют согласованные кэши, то система называется CC-NUMA (Coherent Cache NUMA — NUMA с согласованными кэшами). Программисты часто называют такую систему аппаратной распределенной общей памятью, поскольку она, по сути, аналогична распределенной общей памяти (DSM), реализованной программно, однако поддерживается аппаратно с использованием страниц маленького размера[5, с. 656].

Согласованность памяти в NC-NUMA-машине гарантирована, поскольку в ней отсутствует кэш-память. Каждое слово памяти может находиться только в одном месте, поэтому нет никакой опасности появления копии с устаревшими данными — здесь вообще нет копий. То, в каком именно модуле памяти находится та или иная страница, имеет большое значение, поскольку от этого зависит производительность. Для максимального увеличения производительности в NC-NUMA-машинах была реализована следующая сложная схема программной поддержки перемещения страниц[5, с. 657].

Обычно каждые несколько секунд запускался специальный «сторожевой» процесс (демон), называемый страничным сканером. Его задача — следить за статистикой использования страниц и перемещать их таким образом, чтобы росла производительность. Если страница оказывалась в «неправильном» месте, страничный сканер выгружал ее из памяти, поэтому следующее обращение к ней вызывало ошибку отсутствия страницы. Когда происходит ошибка отсутствия страницы, принимается решение о том, куда эту страницу поместить (возможно, не в тот модуль памяти, в котором она была раньше). Для предотвращения пробуксовки существовало правило, согласно которому страница после размещения должна оставаться на месте в течение времени АТ. Предлагалось множество других алгоритмов, но ни один из них так и не стал безусловно лучшим[5, с. 657].