Технология многоядерности центрального процессора
Министерство образования и науки Российской Федерации
Федеральное госудаственное бюджетное образовательное учереждение
среднего профессионального образования
«КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Филиала в г. Горячий Ключ
КУРСОВАЯ РАБОТА
по дисциплине
Микропроцессорные системы
Технология многоядерности центрального процессора
Работу выполнил ______________________________
студент 21группы специальность 230113 КС и К
Руководитель ______________________________
Горячий Ключ 2013
Содержание
Введение
1 Структура многоядерных
вычислительных комплексов
- Структура процессора
4 - Структура многоядерных процессоров 5
- Основные проблемы создания многоядерных процессоров 7
- Преимущества многоядерных систем
8 - Недостатки многоядерных систем
8
2 История развития
3 Программное обеспеченье многоядерных ОС 13
3.1 Особенности перехода к параллельным
вычислениям
- Инструментальные средства разработки ПО 15
4 Перспективы развития
Заключение
Список литературы
Введение
На сегодняшний день процессоры стали частью нашей жизни. Они используются в электронных приборах практически во всех сферах человеческой жизни: в армии, медицине, образовании, коммерческой деятельности, быту и т.п. В быту процессоры применяются в телевизорах, телефонах, холодильниках и т.д. Развитие микропроцессоров увеличивает функциональные и вычислительные возможности электронных приборов. Уменьшающейся размер микропроцессоров позволяет встраивать их в более мелкие приборы (такие как телефоны и планшетные компьютеры и т.п), а увеличивающаяся вычислительна мощность процессора позволяет решать более сложные задачи. Для увеличения производительности процессоров используют многоядерные архитектуры.
В первой главе данной курсовой работы я описана структура процессора и почему необходимо развивать вычислительную мощность. Структура многоядерной архитектуры ее достоинства и недостатки.
Во второй главе курсовой работы описаны особенности реализации многоядерной архитектуры: параллельные вычисления, программное обеспечение. В подразделе «Программное обеспечение» я описываю инструментарий для разработки многопоточных приложений (компиляторы, программные и аппаратные отладчики) поддержку многопоточности на уровне ОС (операционной системы).
И в последней главе курсовой работы описаны новейшие классификации и перспективы развития многоядерных процессоров, по мнению крупнейших производителей процессоров.
1 Структура многоядерных вычислительных комплексов
1.1 Структура процессора
Процессор, центральное устройство вычислительной машины, выполняющее заданные программой преобразования информации и осуществляющее управление всем вычислительным процессом и взаимодействием устройств вычислительной машины . На рисунке 1 представлена структура процессора
Структура процессора (Рисунок 1).
многоядерный процессор архитектура приложение
В центре современного
центрального микропроцессора
технологии «флип-чип» (flip-chip, flip-chip bonding – перевернутое ядро, крепление методом перевернутого кристалла). Эта технология получила такое название потому, что обращенная наружу – видимая – часть ядра на самом деле является его «дном», – чтобы обеспечить прямой контакт с радиатором кулера для лучшей теплоотдачи. С обратной (невидимой) стороны находится сам «интерфейс» – соединение кристалла и упаковки. Соединение ядра процессора с упаковкой выполнено с помощью столбиковых выводов (Solder Bumps). Ядро расположено на текстолитовой основе, по которой проходят контактные дорожки к «ножкам» (контактным площадкам), залито термическим интерфейсом и закрыто защитной металлической крышкой.
1.2 Структура многоядерных процессоров
Многоядерный процессор
– это центральный
Первый (естественно, одноядерный!) микропроцессор Intel 4004 был представлен 15 ноября 1971 г. Корпорацией Intel. Он содержал 2300 транзисторов, работал на тактовой частоте 108 кГц и стоил $300.
Требования к вычислительной
мощности центрального микропроцессора
постоянно росли и продолжают
расти. Но если раньше производителям
процессоров приходилось
Долгое время повышение производительности традиционных одноядерных процессоров в основном происходило за счет последовательного увеличения тактовой частоты (около 80% производительности процессора определяла именно тактовая частота) с одновременным увеличением количества транзисторов на одном кристалле.
Однако дальнейшее повышение
тактовой частоты (при тактовой частоте
более 3,8 ГГц чипы попросту перегреваются!)
упирается в ряд
• во-первых, с уменьшением размеров кристалла и с повышением тактовой частоты возрастает ток утечки транзисторов. Это ведет к повышению потребляемой мощности и увеличению выброса тепла;
• во-вторых, преимущества более высокой тактовой частоты частично сводятся на нет из-за задержек при обращении к памяти, так как время доступа к памяти не соответствует возрастающим тактовым частотам;
• в-третьих, для некоторых
приложений традиционные последовательные
архитектуры становятся неэффективными
с возрастанием тактовой частоты
из-за так называемого «фон-
Применение многопроцессорных
систем также не получило широкого
распространения, так как требует
сложных и дорогостоящих
Так в компании Intel родилась Hyper-Threading Technology (HTT) – технология сверхпоточной обработки данных, которая позволяет процессору выполнять в одноядерном процессоре параллельно до четырех программных потоков одновременно[3]. Hyper-threading значительно повышает
эффективность выполнения ресурсоемких приложений (например, связанных с аудио- и видеоредактированием, 3D-моделированием), а также работу ОС в многозадачном режиме.
Процессор Pentium 4 с включенным Hyper-threading имеет одно физическое ядро, которое разделено на два логических, поэтому операционная система определяет его, как два разных процессора (вместо одного)[3].
Hyper-threading фактически стала трамплином к созданию процессоров с двумя физическими ядрами на одном кристалле. В 2-ядерном чипе параллельно работают два ядра (два процессора!), которые при меньшей тактовой частоте обеспечивают большую производительность, поскольку параллельно (одновременно!) выполняются два независимых потока инструкций.
Способность процессора выполнять одновременно несколько программных потоков называется параллелизмом на уровне потоков (TLP – thread-level parallelism). Необходимость в TLP зависит от конкретной ситуации (в некоторых случаях она просто бесполезна!).
1.3 Основные проблемы создания многоядерных процессоров
• каждое ядро процессора должно быть независимым, – с независимым энергопотреблением и управляемой мощностью;
• рынок программного обеспечения должен быть обеспечен программами, способными эффективно разбивать алгоритм ветвления команд на четное (для процессоров с четным количеством ядер) или на нечетное (для процессоров с нечетным количеством ядер) количество потоков;
1.4 Преимущества многоядерных процессоров
• возможность распределять работу программ, например, основных задач приложений и фоновых задач операционной системы, по нескольким ядрам;
• увеличение скорости работы программ;
• процессы, требующие интенсивных вычислений, протекают намного быстрее;
• более эффективное
• снижение энергопотребления;
• работа пользователя ПК становится более комфортной;
1.5 Недостатки многоядерных процессоров
Возросшая себестоимость производства многоядерных процессоров (по сравнению с одноядерными) заставляет чипмейкеров увеличивать их стоимость, а это отчасти сдерживает спрос. Так как с оперативной памятью одновременно работают сразу два и более ядра, необходимо «научить» их работать без конфликтов. Возросшее энергопотребление требует применения мощных схем питания. Требуется более мощная система охлаждения. Количество оптимизированного под многоядерность программного обеспечения ничтожно мало (большинство программ рассчитаны на работу в классическом одноядерном режиме, поэтому они просто не могут задействовать вычислительную мощь дополнительных ядер). Операционные системы, поддерживающие многоядерные процессоры (например, Windows XP SP2 и выше) используют вычислительные ресурсы дополнительных ядер для собственных системных нужд.
Следует признать, что в настоящее время многоядерные процессоры используются крайне неэффективно. Кроме того, на практике n-ядерные
процессоры не производят вычисления в n раз быстрее одноядерных: хотя прирост быстродействия и оказывается значительным, но при этом он во многом зависит от типа приложения. У программ, которые не рассчитаны на работу с многоядерными процессорами, быстродействие увеличивается всего на 5%. А вот оптимизированные под многоядерные процессоры программы работают быстрее уже на 50%.
Лидеры процессоростроения, компании Intel и AMD, считают, что будущее за параллельными вычислениями и продолжают последовательно наращивать количество ядер в процессорах.
Появление многоядерных процессоров
стимулирует появление
По сообщению пресс-службы
AMD, на сегодня рынок 4-ядерных процессоров
составляет не более 2% от общего объема.
Очевидно, что для современного покупателя
приобретение 4-ядерного процессора для
домашних нужд пока почти не имеет
смысла по многим причинам. Во-первых,
на сегодня практически нет
Разработчики Intel говорят: «…в процессе развития количество ядер будет становиться всё больше и больше…».
2 История развития
История развития центральных процессоров довольно интересна. Если проследить за ней с появления первых настольных компьютеров, то становится очевидно, что основным двигателем производительности было повышение тактовой частоты. Но всё в природе имеет придел. С увеличением частоты тепловыделение процессоров нелинейно растёт, что в конечном итоге приводит к слишком высоким значениям. Не помогает даже использование более тонких технических процессов при создании транзисторов.
Выход нашли в использовании нескольких ядер в одном кристалле, такой процессор «2 в 1». Их появление на рынке десктопов вызвало большие споры. Нужны ли нам многоядерные процессоры? Сейчас уже можно ответить с уверенностью: нужны. В ближайшие годы просто невозможно представить прогрессивного пути развития этой отрасли без использования нескольких ядер.
Так чем же лучше многоядерные процессоры? Многоядерность сродни использованию нескольких отдельных процессоров в одном компьютере. Только находятся они в одном кристалле и не полностью независимы (например, использование общей кэш-памяти). При использовании уже имеющегося программного обеспечения, созданного для работы только с одним ядром, это даёт определённый плюс. Так, можно запустить одновременно две ресурсоёмкие задачи без какого-либо дискомфорта. А вот ускорение одного процесса – задача для таких систем непосильная. Таким образом, мы получаем практически тот же самый одноядерный процессор с небольшим бонусом в виде возможности использования нескольких требовательных программ одновременно.
Выход из данной ситуации очевиден – разработка нового поколения ПО, способного задействовать несколько ядер одновременно. Этот процесс можно назвать распараллеливанием процессов. На деле всё оказалось довольно сложно.
Некоторые задачи довольно
легко распараллелить. К ним, например,
относится кодирование аудио
и видео. В его основе лежит
набор однотипных потоков, так что
заставить их выполняться одновременно
– довольно простая задача. Выигрыш
многоядерных процессоров в задачах
кодирования перед одноядерными
аналогами пропорционален количеству
этих самых ядер: два ядра – вдвое
быстрее, четыре – в четыре раза
и так далее. Но подавляющую часть
задач распараллелить намного сложнее.
В большинстве случаев
Несколько раз из уст представителей довольно серьёзных компьютерных компаний звучали радостные слова об удачной разработке многоядерных процессоров нового поколения, способных самостоятельно раскладывать один поток на несколько независимых. Но до сих пор не было продемонстрировано ни одного рабочего образца подобного чуда.
А пока действительные шаги на пути к повсеместному использованию многоядерных процессоров довольно незамысловаты и очевидны. Первым является само создание и совершенствование этих процессоров, снижение ценовых рамок. Так, в среднем сегменте обоих мировых компьютерных гигантов – Intel и AMD – можно найти достаточно широкое разнообразие двухъядерных процессоров. Уже в следующем году в класс mainstream переберутся решения с четырьмя ядрами. А вот второй шаг на пути к пользователю делают сами разработчики программного обеспечения. Многие современные игры уже обзавелись поддержкой двух ядер. Самым требовательным из них практически необходим двухъядерный процессор для обеспечения оптимальной производительности.
Если окинуть взглядом прилавки компьютерных магазинов и немного проанализировать, то общая картина отнюдь не столь плоха. Производителям процессоров удалось достичь довольно высокого уровня выхода годных кристаллов. На ценообразовании это отражается следующим образом: увеличение числа ядер вдвое зачастую не ведёт к двойному повышению стоимости. Хотя это вполне логично: производительность в среднем возрастает тоже далеко не в два раза.
Подводя первую часть статьи к завершению, стоит отметить, что сколь бы ни был тернист путь к многоядерности, альтернативы ему в обозримом будущем попросту нет. Нам, как обычным потребителям, остаётся только своевременно апгрейдить свой компьютер, из раза в раз увеличивая число встроенных процессорных ядер, выводя тем самым общую производительность на новый уровень.
3 Программное обеспечение многоядерных вычислительных комплексов
Расчёт увеличения производительности за счет распараллеливания процессов.
Для расчета увеличения производительности используют закон Амдала. Закон Амдала гласит, что прирост производительности (S) системы зависит от количества процессоров (N) и доли последовательных операций (c) в программе: S≤1/(с+(1-с)/N).Граничные значения c соответствуют полностью параллельным (c=0) и полностью последовательным (c=1) программам. Если лишь 1/10 часть программы выполняется последовательно, то в принципе невозможно ускорение в десять раз вне зависимости от числа используемых процессоров (ядер)[4]. Важное следствие закона Амдала состоит в том, что максимальный рост производительности (в N раз при N процессорах) недостижим. В противном случае последовательно исполняемая часть программы должна быть равна нулю, что невозможно. Еще одно следствие закона таково: чем меньше доля последовательно исполняемой части программы, тем больше прирост производительности (рис. 2).
Рис. 2 Следствия закона Амдала
Сегодня только небольшая
часть программного обеспечения
может выполняться на многоядерных
процессорах, что подтверждают результаты
тестов синтетических и
3.1 Особенности перехода к параллельным вычислениям
В ней выполнение считается последовательным, если в какой-то момент одно или более ядер не могут выполнять код одновременно с другими ядрами. Такая ситуация может возникнуть по разным причинам : блокировка при доступе к ресурсам, необходимость синхронизации процессов или потоков на ядрах, поддержка когерентности кэш-памяти, неравномерность загрузки.
Блокировки возникают из-за невозможности (например, в момент "сбора мусора") одновременного доступа приложений на разных ядрах к жесткому диску, к устройствам ввода/вывода или данным приложений. Очень часто параллельные процессы, выполняемые на разных ядрах, нужно синхронизировать в определенные моменты. Например, приложение на одном из ядер должно использовать промежуточные данные, которые получает приложение (поток, процесс) на другом ядре. Первое приложение не может продолжить работу до получения этих данных, то есть находится в состоянии ожидания. В такой ситуации неизбежны накладные расходы на синхронизацию приложений (процессов, потоков), выполняемых на разных ядрах. В свою очередь, это обусловливает снижение эффективности
параллельной работы, что находит отражение в сетевом законе Амдала. Возникает необходимость в поддержке когерентности (согласованности) кэш-памяти для всех ядер при использовании разделяемой памяти.
Можно упомянуть об исследованиях Intel, посвященных динамическому регулированию интенсивности выполнения инструкций (energy per instruction, EPI) в зависимости от степени параллелизма реализации программного обеспечения [2]. Специалисты корпорации опытным путем показали эффективность регулирования тактовой частоты асимметричной многопроцессорной системы в зависимости от активности вычислительных ядер. Для обеспечения многопоточности используются различные инструменты.
3.2 Инструментальные средства многоядерных систем
Для обеспечения многопоточности используют следующие инструменты: компиляторы, аппаратные отладчики, программные отладчики, поддержка многопоточности на уровне ОС.
Компиляторы
Чтобы получить максимальную
выгоду от использования многоядерной
архитектуры требуется
Благодаря поддержке стандарта OpenMP компилятор Microsoft Visual C++ 2005 обеспечивает параллельную многопоточную обработку. Для этого требуется либо указать параметр компилятора "/openmp", либо установить в
конфигурации флаг "OpenMP Support". С ноября 2005 года компилятор gcc для языков Cи, C++ и Фортран 95 поддерживает OpenMP с помощью опции "-fopenmp". Следует упомянуть и набор компиляторов EKOPath компании PathScale, предназначенных для 64-разрядных систем на базе Linux (AMD64 и EM64T).
Программные отладчики
Программисты хорошо знают, как трудно отлаживать многопоточные приложения. При аварийном завершении программы зачастую требуется проанализировать стек вызовов функций во всех потоках, но обычный отладчик показывает только стек потока, на котором произошло аварийное завершение программы. Например, стандартные средства gdb плохо приспособлены для отладки многопоточных приложений, поэтому предлагаются специальные версии этого отладчика для конкретных операционных систем: в их ядра включаются дополнительные возможности отладки многопоточных приложений.
Одна из таких реализаций отладчик компании Etnus TotalView, предназначенный для платформ Linux, Unix и LynxOS. Он поддерживает многопоточность, MPI, OpenMP, языки программирования Cи/C++ и Фортран, а также смешанные коды с использованием разных языков программирования. Полезным средством оптимизации и отладки параллельных программ является пакет Intel Threading Tools. Он обеспечивает диагностику ошибок и анализ производительности многопоточных приложений, использующих модели потоков Win32 и OpenMP. Отладчик позволяет обнаруживать взаимные блокировки (deadlock) и гонки (race condition) между потоками, локализовать проблемы на уровне исходного кода, анализировать эффективность способов повышения производительности OpenMP-программ.
Аппаратные отладчики
Для работы с виртуальными машинами аппаратный отладчик должен поддерживать ряд специальных функций (в частности, определять, к какой
виртуальной машине относятся те или иные процессы и нити). Их обеспечивает, например, TRACE32 компании Lauterbach. Благодаря полной поддержке встроенных аппаратных блоков управления памятью можно одновременно отлаживать процессы на нескольких виртуальных машинах и даже два варианта одного процесса на разных виртуальных машинах. В частности, Lauterbach объявила о выпуске программного инструментария интегрированной поддержки ядра (kernel awareness) для операционной системы LynxOS-178. Чтобы получить доступ ко всем функциями TRACE32, не нужно изменять прикладные программы или ядро (применять заплаты, перехватчики, инструментальные "довески" и др.). Отлаживается именно то приложение, которое будет действовать в конечном продукте, что очень важно для его сертификации.
Среди других аппаратных отладчиков, поддерживающих работу с многоядерными конфигурациями, назовем Green Hills Probe и SuperTrace компании Green Hills, WindPower ICE компании Wind River, RealView ICE от ARM.
При разработке параллельных
программ используются специализированные
библиотеки и системы параллельного
программирования PVM, LAM, CHMP и др. Три
основных подхода к реализации этих
систем различаются методами взаимодействия
параллельных задач. Первый подход базируется
на концепции обмена сообщениями, второй
- на использовании разделяемой
Наиболее известным
работы параллельных приложений и поддерживает их масштабируемость за счет балансировки параметров производительности и использования ресурсов. Verari предлагает версии MPI/Pro для разных операционных систем, в том числе Windows, Linux, Mac OS X, LynxOS, и таких коммуникационных сред, как Gigabit Ethernet, Myrinet и InfiniBand.
Ко второй группе относится спецификация OpenMP (Open specifications for Multi-Processing). Ее первая версия (www.openmp.org), которая была выпущена в 1997 году, предназначалась для языка Фортран. К появлению OpenMP "приложили руку" компании IBM, Intel, Sun Microsystems и Hewlett-Packard. В 1998 году были созданы варианты OpenMP для языков Cи/C++, а последней является версия 2.5. Поддержка спецификации OpenMP обеспечена во всех компиляторах Intel начиная с шестой версии, в Microsoft Cи/C++ начиная с Visual Studio 2005, а также в GCC.
OpenMP - это набор специальных директив компилятору (pragma), библиотечных функций и переменных среды. Наиболее оригинальны директивы компилятору, которые используются для обозначения областей в коде и могут выполняться параллельно. Компилятор, поддерживающий OpenMP, преобразует исходный код и вставляет соответствующие вызовы функций для параллельного выполнения этих областей кода.
В третью группу входит спецификация POSIX (Portable Operating System interface for unIX), первое описание которой было опубликовано в 1986 году (www.pasc.org). Основная спецификация разработана как IEEE 1003.1 и одобрена как международный стандарт ISO/IEC 9945-1:1990. С точки зрения организации параллельных вычислений наибольший интерес представляют три части стандарта 1003.1a (OS Definition), 1003.1b (Realtime Extensions) и 1003.1c (Threads). В рамках POSIX можно реализовать параллельные вычисления на основе обмена сообщениями (аналогично MPI) или разделяемой памяти (как в OpenMP). Естественно, в POSIX допустима и любая комбинация этих методов. В наибольшей степени стандарту POSIX соответствуют (и соответствующим образом сертифицированы)
операционные системы реального времени LynxOS и Integrity.
Поддержка на уровне ОС
Многоядерные процессоры потребуют от операционных систем поддержки разных архитектур многопроцессорной обработки. Компания QNX Software Systems объявила о выпуске комплекта разработчика QNX Momentics Multi-Core Edition. Этот набор инструментов предназначен для создания программного обеспечения и его миграции на многоядерные аппаратные решения нового поколения, в том числе процессоры BCM12xx и BCM14xx компании Broadcom, процессор MPC8641D компании Freescale и многоядерные процессоры Intel. Будут поддерживаться несколько моделей многопроцессорности для многоядерных архитектур: асимметричная AMP (обеспечение полного управления и отказоустойчивости); симметричная SMP (максимальные параллелизм и масштабируемость); "исключительная" BMP (поддержка миграции кода и снижение сложности разработки).
Поддержку многоядерных систем на базе процессоров AMD64, Sun UltraSPARC T1 и Intel обеспечивает ОС Solaris 10. Например, встроенная система виртуализации и защиты информации Solaris Containers позволяет системному администратору организовывать в рамках единой операционной системы несколько виртуальных системных разделов "зон". Каждой зоне допустимо назначить свой контейнер -набор локализованных системных ресурсов. Контейнеры могут служить основой для управления ресурсами на уровне ядер. Реализованные в Solaris 10 функции так называемого "прогнозируемого самовосстановления" (Predictive Self-Healing) обеспечивают автоматическое определение сбоев в работе ядер и их перевод в пассивный режим без влияния на работу остальных ядер процессора. Поддержка многоядерных систем реализована в некоторых дистрибутивах ОС Linux, например Red Hat Enterprise Linux 4.