Многоядерные процессы и программирование

Автор работы: Пользователь скрыл имя, 13 Мая 2014 в 15:43, реферат

Краткое описание

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

Содержание

Введение 3
1. Структура многоядерных вычислительных комплексов 4
1.1. Структура процессора 4
1.2. Структура многоядерных процессоров 4
1.3. Недостатки многоядерных процессоров 6
2. Распараллеливание процессов 10
Физический параллелизм 10
Программирование физически параллельных систем 11
Преимущества «мелкозернистого» логического параллелизма 12
Логический и физический параллелизм 14
3. Программное обеспеченье многоядерных вычислительных комплексов 15
3.1. Расчёт увеличения производительности за счет распараллеливания процессов. 15
3.2. Особенности перехода к параллельным вычислениям 16
3.3. Инструментальные средства многоядерных систем 17
Компиляторы 17
Программные отладчики 17
Аппаратные отладчики 19
Поддержка на уровне ОС 20
4. Перспективы развития многоядерных систем 24
ТЕНДЕНЦИИ РАЗВИТИЯ: ЧТО ОБЕЩАЕТ НАМ БУДУЩЕЕ? 25
ЭКСПЕРИМЕНТАЛЬНЫЕ МНОГОЯДЕРНЫЕ ЧИПЫ 26
МОБИЛЬНЫЕ ЧЕТЫРЕХЪЯДЕРНЫЕ ПРОЦЕССОРЫ 26
Заключение 27
Список использованной литературы 28

Прикрепленные файлы: 1 файл

Многоядерные процессы и программирование.docx

— 72.95 Кб (Скачать документ)

Оглавление

 

 

 

 

Введение

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

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

 

 

  1. Структура многоядерных вычислительных комплексов

    1. Структура процессора

 

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

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

 

    1. Структура многоядерных процессоров

 

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

Требования к вычислительной мощности центрального микропроцессора постоянно росли и продолжают расти. Долгое время повышение производительности традиционных одноядерных процессоров в основном происходило за счет последовательного увеличения тактовой частоты, около 80% производительности процессора определяла именно тактовая частота, с одновременным увеличением количества транзисторов на одном кристалле. Поскольку технологический процесс почти вплотную приблизился к размерам атома: сегодня процессоры выпускаются по 45-нм технологии, а размеры атома кремния – приблизительно 0,543 нм, появляется ряд фундаментальных физических барьеров:

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

• во-вторых, преимущества более высокой тактовой частоты частично сводятся на нет из-за задержек при обращении к памяти, так как время доступа к памяти не соответствует возрастающим тактовым частотам;

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

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

 Так в компании Intel родилась Hyper-Threading Technology (HTT) – технология сверхпоточной обработки данных, которая позволяет процессору выполнять в одноядерном процессоре параллельно до четырех программных потоков одновременно. Hyper-threading значительно повышает эффективность выполнения ресурсоемких приложений (например, связанных с аудио- и видеоредактированием, 3D-моделированием), а также работу ОС в многозадачном режиме.

Процессор Pentium 4 с включенным Hyper-threading имеет одно физическое ядро, которое разделено на два логических, поэтому операционная система определяет его, как два разных процессора (вместо одного).

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

Способность процессора выполнять одновременно несколько программных потоков называется параллелизмом на уровне потоков (TLP – thread-level parallelism). Необходимость в TLP зависит от конкретной ситуации, в некоторых случаях она просто бесполезна.

 

Преимущества многоядерных процессоров:

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

• увеличение скорости работы программ;

• процессы, требующие интенсивных вычислений, протекают намного быстрее;

• более эффективное использование требовательных к вычислительным ресурсам мультимедийных приложений (например, видеоредакторов);

• снижение энергопотребления.

 

Так же выявились проблемы при создании многоядерных процессоров:

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

 

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

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

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

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

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

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

Следует признать, что в настоящее время многоядерные процессоры используются крайне неэффективно. Кроме того, на практике N-ядерные процессоры не производят вычисления в N раз быстрее одноядерных: хотя прирост быстродействия и оказывается значительным, но при этом он во многом зависит от типа приложения. У программ, которые не рассчитаны на работу с многоядерными процессорами, быстродействие увеличивается всего на 5%. А вот оптимизированные под многоядерные процессоры программы работают гораздо быстрее. Простой пример: если один процессор может конвертировать видеофайл за два часа, то четыре процессора справятся с этой задачей всего за тридцать минут. Но данный пример из разряда «идеального» распараллеливания, и в действительности такое встречается крайне редко. Ярким примером обратного является мой следующий пример. При докупке ещё одной видеокарты, производительность, которая замерялась в программе 3D-max, не возросла в два раза как предполагалось. А лишь увеличилась на 37 процентов. Что и приводит нас к одной из важнейших проблем распараллеливания. Не всякая задача допускает физическое распараллеливание. Целые классы задач (например, быстрое Фурье-преобразование, обработка запроса к базе данных, быстрые алгоритмы сортировок и т.п.) не получают заметного выигрыша от распараллеливания либо не распараллеливаются в принципе. А так же, возникает проблема совместимости старых, написанных для однопроцессорных архитектур, библиотек. Если библиотеки физически не поддерживают параллельное исполнение, то распараллеливание алгоритма может привести к ошибке.

Лидеры процессоростроения, компании Intel и AMD, считают, что будущее за параллельными вычислениями и продолжают последовательно наращивать количество ядер в процессорах.

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

По сообщению пресс-службы AMD, на сегодня рынок 4-ядерных процессоров составляет не более 2% от общего объема. Очевидно, что для современного покупателя приобретение 4-ядерного процессора для домашних нужд пока почти не имеет смысла по многим причинам. Во-первых, на сегодня практически нет программ, способных эффективно использовать преимущества 4-х одновременно работающих потоков; во-вторых, производители ПК позиционируют 4-ядерные процессоры, как Hi-End-решения, добавляя к оснастке ПК самые современные видеокарты и объемные жесткие диски, – а это в конечном счете еще больше увеличивает стоимость и без того недешевых ПК. Эта же проблема коснулась и рынка мобильных телефонов. Не смотря на то, что уже сейчас можно купить телефон с восьмиядерным процессором, приложений которые смогли бы загрузить все восемь ядер нет. И если рассуждать логически, такая производительность необязательна в условиях современной жизни. И как уже было сказано ранее, чем больше ядер, тем больше потребление энергии, что приводит к быстрой разрядке мобильного телефона.

 Но разработчики из Intel говорят: «…в процессе развития количество ядер будет становиться всё больше и больше…».

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Распараллеливание процессов

 

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

Физический параллелизм

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

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

Информация о работе Многоядерные процессы и программирование