| Дата последнего изменения : | 16.11.2007 13:13 |
Рейтинг |
|
Данная статья открывает цикл «Разработка ПО для процессоров уровня терафлопс», посвящённый приложениям для многоядерных ПК, способных осуществлять до триллиона операций с плавающей точкой в секунду (терафлопс) и выше. Это первая статья цикла.
Intel® и другие производители процессоров в течение нескольких лет неустанно пропагандируют распространение параллельных вычислений. На данный момент доступны четырёхъядерные процессоры Intel®. Теоретически, согласно закону Мура, через 10 лет будут производиться процессоры с 128 ядрами, через 12 лет – с 256 ядрами, через 14 лет - с 512 ядрами, а к 2023 году число ядер в процессорах может превысить 1000. Стоит заметить, что Intel уже выпустила экспериментальный 80-ядерный процессор под кодовым наименованием Polaris и протестировала его работу с помощью параллельного приложения с интерфейсом передачи сообщений. Результаты эталонного теста Stencil для процессора Polaris составили более одного терафлопса (потенциал процессора – 2 терафлопса), при этом мощность рассеивания кристалла не превысила 62 Вт. Таким образом, Polaris является первым терафлопным процессором.
Многие годы Intel является разработчиком инноваций в области параллельных вычислений. В 1985 г. Intel была первой коммерческой компанией, выпустившей суперкомпьютер для массовой параллельной обработки (МРР), в 1996 г. Intel представила первый суперкомпьютер с производительностью более терафлопса (ASCII Option Red, в котором было установлено более 9000 процессоров), а в 2006 г. – первый четырёхъядерный процессор для массовых ПК. Специалисты Intel имеют многолетний опыт и богатые знания в области параллельных вычислений.
Говоря о терафлопном процессоре, специалисты Intel имеют в виду нечто большее, чем просто современную многоядерную архитектуру. Они размышляют о ближайшем будущем, в котором приложения будут выполняться на одном процессоре с сотнями ядер, обрабатывающем терабайты данных в секунду.
Архитектура терафлопного процессора будет совершенно иной. Современные многоядерные процессоры состоят из нескольких высокопроизводительных и эффективных, однако достаточно массивных ядер с несколькими областями кэш-памяти, обменивающихся данными по одной или нескольким системным шинам.
Терафлопные процессоры будут иметь гораздо больше ядер, отличающихся уменьшенным размером и пониженным энергопотреблением. Вероятнее всего, новая процессорная архитектура будет неоднородной, включающей в себя несколько больших ядер и множество малых, а также объединяющей в себе области усовершенствованной общей кэш-памяти, особые ускорители (сетевого обмена, обработки протокола XML, графики и проч.) и даже встроенные в кристалл массивы иерархической памяти. Все эти элементы будут связаны высокоскоростными магистралями. В отличие от современных процессоров, отказ нескольких ядер в терафлопном кристалле не приведёт к его отказу. Этим терафлопные процессоры похожи на отказоустойчивые многопроцессорные кластеры, отключение одного процессора в которых не вызовет отказ всего кластера.
Главная концепция новой архитектуры – максимум производительности процессора (терабит/с и выше) без увеличения энергопотребления.
В результате планируется создать многоядерный процессор, отличающийся повышенной производительностью, малым энергопотреблением и увеличенным потенциалом для параллельной обработки. Такие перспективы не оставят равнодушным ни одного разработчика ПО, верно?
Благодаря развитию аппаратных средств по закону Мура, производительность ПО постоянно растёт. Интересно, что программистам даже не приходится вносить существенные доработки в свой код, ведь достаточно лишь реализовать в нём поддержку нового поколения процессоров.
Такой подход неприемлем для многоядерных систем будущего, поэтому разработчикам придётся в корне изменить принципы создания ПО и перейти к проектированию высокооптимизированных параллельных приложений. Для этого придётся найти новые алгоритмы решения поставленных задач, распараллеливаемые с гораздо большей эффективностью.
К счастью, для создания качественно новых приложений для многоядерных систем вполне сгодятся проверенные временем и хорошо знакомые программистам средства разработки многопоточного ПО: OpenMP*, MPI* и Pthreads*, а также такие инструменты, как Intel® Thread Checker и Intel® Thread Profiler. Разработчики Intel также трудятся над подготовкой новых моделей программирования, отвечающих новым потребностям программистов параллельных приложений. К таким моделям относятся и конструктивные компоненты Intel® Threading Building Blocks. Подробную информацию по разработке приложений для многоядерных систем вы можете найти на web-сайте сети Intel® Software Network. Разработка ПО для терафлопных процессоров сопряжена и с другими трудностями.
Прирост производительности приложения в системе на базе терафлопного процессора будет определяться долей последовательного программного кода: согласно закону Амдаля (см. «Основы многопоточного программирования»), при неограниченном числе ядер в системе максимальный прирост производительности будет обратно пропорционален доле последовательного кода. То есть, если программный код на 25% состоит из последовательных сегментов, то, теоретически, на неограниченном числе ядер такое приложение будет работать в четыре раза быстрее.
Закон работает и в обратную сторону: для достижения максимальной производительности в четырёхъядерной системе достаточно распараллелить код на 75%. Таким образом, распараллеливание циклов и потокобезопасных функций для четырёх или восьми ядер обеспечит существенное увеличение производительности приложения в многоядерной системе, а код, оставшийся последовательным, не повлияет на производительность приложения в системе с небольшим числом ядер. Для 64-ядерной системы действуют иные правила.
Чтобы достичь максимального прироста производительности в системе с 64 и более ядрами, необходимо распараллелить код на 99% и выше, что весьма затруднительно. Такого параллелизма нельзя достичь, распараллелив последовательный алгоритм с помощью логических структур Pthreads или OpenMP. Здесь важно переосмыслить поставленную задачу и творчески подвести её решение под новый, эффективный параллельный алгоритм. Для этого нужно рассмотреть задачу с других точек зрения, чтобы впоследствии по максимуму реализовать параллельную обработку, доступную в системе с большим количеством ядер.
Да, для этого требуется немало усилий. Поговорите с опытными разработчиками параллельного ПО, и они скажут вам, что распараллелить код на 90% чрезвычайно трудно, но выполнимо. Причём пока не существует автоматических инструментов, способных в данном случае заменить искусный человеческий разум.
Анализируя задачу, необходимо разобраться в исходных данных, поставленной цели, типах алгоритмов и структурах данных, от которых зависит решение. Это совсем необязательно делать в одиночку, поэтому не стесняйтесь обращаться за помощью к знающим людям.
Только так вы сможете разработать эффективный параллельный алгоритм и реализовать его в своём коде. Методы разработки описаны во второй статье данного цикла.
Старайтесь реализовывать в программном коде больше параллельных сегментов, чем доступно в современных вычислительных системах. Таким образом, вы предусмотрите запас масштабируемости для более новых платформ. Согласитесь, что программное обеспечение устаревает медленнее аппаратного. До сих пор мы можем встретить приложения, разработанные для суперкомпьютеров и массовых ПК несколько лет назад, ведь умело разработанный код легко масштабируется на новом аппаратном обеспечении.
Приложения для многоядерных систем должны быть разработаны таким образом, чтобы на процессорах с ещё большим числом ядер их производительность также возрастала. Представим себе немасштабируемый, код, оптимизированный под 64-ядерные процессоры. Запустив его в новой 128-ядерной системе, мы убедимся, что последовательные разделы кода стали помехой для достижения нового уровня производительности. Однако, если разработчик предусмотрел масштабируемый параллелизм в своём коде, то, с увеличением системных ресурсов (в нашем случае – ядер), планировщик ОС запустит дополнительные потоки или процессы, что незамедлительно обеспечит дополнительный прирост производительности за счёт усовершенствованного аппаратного обеспечения. Доработка кода при этом не потребуется.
Учёные всего мира создали серьёзный задел для разработки высокооптимизированных параллельных приложений. В течение нескольких лет и даже десятилетий они разрабатывали ПО для суперкомпьютеров с помощью таких языков и прикладных программных интерфейсов, как OpenMP, MPI, Pthreads, семейство языков C, FORTRAN и многих других. Эти люди могут многому научить. Например, разработчик, знакомый с программированием для систем с совместно используемой памятью, может обнаружить, что использование модели распределённой памяти с интерфейсом прохождения сообщений (как в кластерных системах), лучше подходит и упрощает отладку при программировании для многоядерных процессоров.
Средства реализации многопоточности и средства разработки Intel® знакомы разработчикам и хорошо подходят для создания и оптимизации параллельных приложений для терафлопных процессоров. Программисты с успехом могут использовать эти средства при разработке нового ПО. Конечно, в будущем наверняка появятся новые возможности для изучения и применения инновационных методов и инструментов.
В Intel ведётся работа над несколькими проектами, которые способствуют разработке высокооптимизированных параллельных приложений. Ниже приведены примеры таких проектов:
Современным разработчикам доступно огромное поле деятельности для инноваций в области теравычислений: от уровня приложений до BIOS и операционных систем.
Сотрудничая с представителями научных сообществ и просто энтузиастами, научно-исследовательские группы Intel создали несколько приложений и программных кодов для самых разных сфер применения. Среди них – финансовые аналитические приложения, приложения для видеотрансляций в масштабе реального времени и другие ресурсоёмкие приложения, для производительной работы которых требуются терафлопные процессоры.
Благодаря перспективе появления массовых терафлопных процессоров, разработчики могут задуматься о создании качественно нового высокопроизводительного ПО, сферы применения которого чрезвычайно интересны и удивительны. Вдумайтесь – приложения, о которых мы раньше могли только мечтать, или те, что считались научной фантастикой, близки к реализации. Представьте себе приложения, подобные Холодеку, и вы окажетесь в мире будущего, к которому нас приближают высокооптимизированные параллельные системы. Так давайте же дадим простор нашему воображению!
Об авторе
Кен Стрэндберг (Ken Strandberg) – технический писатель, автор множества статей, семинаров, электронных учебных пособий, а также различных маркетинговых и интерактивных материалов для ведущих компаний отрасли, предприятий из списка Fortune 100 и многонациональных корпораций. Он занимается программным обеспечением, отраслевыми технологиями, автоматизацией проектирования, а также сетевыми, медицинскими, полупроводниковыми и телекоммуникационными технологиями. Знания и опыт Стрэндберга позволяют ему писать статьи для технически грамотных читателей. Его работы публиковались в таких технических журналах, как «EE Times» и «EE Design», а также на web-сайтах предприятий из списка Fortune 100. Кен Стрэндберг живёт в шт. Невада (США). Связаться с ним можно по адресу ken@kenstrandberg.com.
