Регистрация | Вход 
Просмотр статьи
Параллельные вычисления

Краткий обзор существующих технологий параллельных вычислений.

С момента выхода двухядерных процессоров AMD и Intel широкой общественности стали доступны компьютеры, поддерживающие истинную многозадачность, а не только ее эмуляцию на однопроцессорных машинах с помощью переключения выполняемых потоков. С тех пор прошло несколько лет, широкое распространение получают четырехядерные процессоры. Компания Intel обещает, что скоро появятся процессоры с десятками и сотен ядер (http://www.winblog.ru/news/1147765589-kovarsky03070802.html).

Дело, в конце концов, не только в «угрозах» Intel. Параллельные вычисления весьма многообещающая и интересная отрасль. Во многих «отраслях науки и техники», где требуются высокопроизводительные вычисления, используются параллельные технологии (одноядерных процессоров на сотни терагерц пока не видно и вряд ли они будут в обозримом будущем).

Большинство разработчиков приложений умеет мыслить только «последовательно», написание же параллельных приложений требует совершенно другого мышления. Для параллельных вычислений используется свои методологии, технологии и техника.

Вычислительная техника

Самая используемая техника для параллельных вычислений на данный момент – это суперкомпьютеры. Суперкомпьютеры, как правило, являются кластерами. Кластер в свою очередь состоит из ряда узлов (как правило, высокопроизводительные системы с общей памятью и несколькими процессорами) соединенных при помощи высокоскоростной сети. Примером таких машин служат МВС-15000BM и МВС-100k (МСЦ РАН [12]), а также СКИФ МГУ – самый мощный на июнь 2008 г. суперкомпьютер в странах СНГ, Балтии и Восточной Европы. Число процессоров установленных в кластере, как правило, достигает сотен и тысяч (у СКИФ МГУ – 1250 процессоров/5000 ядер). Кроме кластеров, существуют также системы с общей памятью – несколько процессоров, разделяющих общую память. В качестве примера можно привести HP SuperDome с 64 процессорами (МСЦ РАН).

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

Помимо суперкомпьютеров, в последнее время набирает обороты разработка приложений с использованием графических процессоров (GPU) [10,11]. GPU обладают гораздо большей производительностью нежели обычные центральные процессоры (CPU). К примеру, процессор Core 2 Duo 2.4 ГГц обладает производительностью в 1.3 гигафлопа, а графический процессор GeForce 8600 GT - 114 гигафлоп. Новейший GPU от NVIDIA GT 280 набирает 933 гигафлопа. Core 2 Duo содержит 2 ядра, GeForce 8600 GT - 32 потоковых процессора, а GT 280 – 240 потоковых процессоров.

Интересным также представляется использование игровых приставок Sony PlayStation 3, оснащенных процессорами Cell, и обладающими производительностью в 2 терафлопа. Sony объявила, что ее приставки SP3 поддерживают установку операционной системы Fedora Core.

Технологии

Модели параллельных вычислений.

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

Single Program Multiple Data (SPMD), или Single Instruction Multiple Data (SIMD). Эта классическая модель обеспечивает параллелизм на уровне данных, когда одна и та же функция обрабатывает разные наборы данных в разных потоках (процессах, компьютерах).

Multiple Program Multiple Data (MPMD), или Multiple Instruction Multiple Data (MIMD). В свою очередь, можно сказать, что модель MPMD обеспечивает параллелизм на уровне функций. Разные функции обрабатывают разные данных в разных потоках. Типичный пример MPMD – это конвейер. Каждая стадия конвейера – это отдельная функция, при этом любая стадия может быть распараллелена на несколько потоков. Распараллеливание стадий бывает необходимо в том случае, когда время обработки данных на каждой стадии разнится, чтобы не создавать эффект «бутылочного горлышка», необходимо правильно подбирать число потоков на каждой стадии. Например, возьмем простой конвейер из двух стадий. Время обработки данных на первой стадии составляет 4 секунды, на второй – 7 секунд. Это значит, что число потоков на первой стадии должно составлять 4n, а на второй 7n. Где n – некоторое натуральное число.

Можно по аналогии с первыми двумя выделить еще две модели: SPSD и MPSD. Если SPSD – это обычные последовательные вычисления на одно процессорной машине, то использование модели MPSD даже сложно себе представить.

MPI

Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API) для передачи информации, который позволяет обмениваться сообщениями между компьютерами, выполняющими одну задачу (Wikipedia). Применяется, как правило, в системах с распределенной памятью (вычислительные кластеры). Однако он оптимизирован и для использования в системах с общей памятью.

Существуют реализации MPI для многих платформ. Наиболее распространенной является реализация MPICH – она существует в вариантах для Windows и Linux. В литературе по MPI, как правило, приводят в пример MPICH1 – однако, MPICH2 в Windows-варианте, значительно быстрее своего старшего брата MPICH1 (в реализации метода Якоби, требующего интенсивного обмена данными между процессами, MPICH2 примерно в 20 раз быстрее MPICH1).

Домашний сайт стандарта MPI [5]. Подробнее об MPI вы можете прочитать в монографиях [1,2,4]. Скачать последние версии MPI можно с сайтов [6,7].

OpenMP

OpenMP (Open Multi-Processing) это набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с разделяемой памятью на языках C, C++ и Fortran (Wikipedia).

OpenMP в противоположность MPI предназначен для систем с общей памятью, на вычислительных кластерах работать не сможет. Целый ряд компиляторов поддерживает OpenMP в их числе Microsoft Visual Studio Professional и выше, gcc и Intel C++ Compiler. С сайта Intel можно скачать бесплатную версию Intel C++ Compiler для Linux [15].

Официальный сайт стандарта [16], подробнее с OpenMP вы можете ознакомиться в монографии [1]

PVM

PVM (Parallel Virtual Machine — виртуальная параллельная машина) — общедоступный программный пакет, позволяющий объединять компьютеры в кластеры и предоставляющий возможности управления процессами с помощью механизма передачи сообщений (Wikipedia).

Домашний сайт PVM [17]. Подробнее об PVM мы можете прочесть в [2].

mpC

Расширение языка Си для параллельных вычислений. Домашняя страница [19], прочесть введение в язык можно в монографии [1].

Потоки ОС

Современные многозадачные операционные системы поддерживают API для управления потоками и процессами. Подробнее о потоках и процессах в Windows можно прочесть в [18], а в Linux и иных POSIX-системах [1,2].

CUDA

Compute Unified Device Architecture (CUDA) - программный интерфейс [API] обеспечивающий доступ к вычислительным возможностям графических процессоров. Существует несколько версий CUDA. Начиная с серии GeForce 8000, графические процессоры NVIDIA поддерживают, как минимум версию 1.0 (GeForce 8800), в версии 1.1 добавлена поддержка атомных функций (GeForce 8600, серия GeForce 9000), в версии 1.3 самое важное добавление – это поддержка вычислений с двойной точностью (серия GTX 200). Отсутствие поддержки вычислений с двойной точностью часто называли недостатком CUDA, однако с выходом процессоров GTX 200 этот недостаток исправлен.

При написании приложений CUDA написанный код делится на 2 категории: host, выполняемый на центральном процессоре и kernel, выполняемый на GPU. Код kernel компилируется с помощью специального компилятора от NVIDIA nvcc. Также для него существует ряд ограничений, таких как запрет рекурсий. В целом, модель CUDA более ориентирована на написание SPMD-приложений, нежели MPMD.

Существуют реализации CUDA для Windows XP и Vista, Fedora Core, Red Hat Enterprise Linux, Ubuntu и OpenSuSe.

Выполнение кода на GPU, как правило, позволяет достигнуть выигрыш в скорости выполнения в десятки, если не в сотни раз по сравнению с CPU. Подробную статистику вы можете узнать на сайте CUDA [8].

Заклятый друг NVIDIA компания ATI также не осталась в стороне и предложила свое решение для выполнения вычислений на GPU [9].

Подробнее о вычисления для GPU вы можете узнать на сайтах [10, 11].

Заключение

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

Литература.

  1. Лупин С. А., Посыпкин М. А. Технологии параллельного программирования. – М.: ИД «Форум»: ИНФРА-М, 2008.
  2. Камерон Хьюз, Трейси Хьюз. Параллельное и распределенное программирование на С++.: Пер. с англ. – М.: ИД «Вильямс», 2004.
  3. Антонов А. С. Введение в параллельные вычисления. – М.: Изд-во МГУ, 2002. http://parallel.ru/news/antonov_intro.html
  4. Антонов. А. С. Параллельное программирование с использованием технологии MPI: Учебное пособие. – М.: Изд-во МГУ, 2004. http://parallel.ru/tech/tech_dev/MPI/
  5. MPI Forum. http://www.mpi-forum.org/
  6. Домашняя страница MPICH1. http://www-unix.mcs.anl.gov/mpi/mpich1/
  7. Домашняя страницы MPICH2. http://www.mcs.anl.gov/research/projects/mpich2/
  8. Домашняя страница CUDA. http://www.nvidia.com/cuda/
  9. AMD Stream Computiong. http://ati.amd.com/technology/streamcomputing/
  10. Использование GPU для вычислений. http://www.gpgpu.ru/
  11. Вычисления на GPU. http://www.gpgpu.org/
  12. Межведомственный суперкомпьютерный центр РАН (МСЦ РАН). http://www.jscc.ru/
  13. Информационно-аналитический центр по параллельным вычислениям. http://www.parallel.ru/
  14. Сообщество разработчиков параллельных приложений. http://softwarecommunity-ru.intel.com/communities/multicore
  15. Intel Compilers for Liux. http://www.intel.com/cd/software/products/asmo-na/eng/compilers/284264.htm
  16. Спецификации OpenMP API для параллельных разработок. http://openmp.org/
  17. Домашний сайт PVM: http://www.csm.ornl.gov/pvm/
  18. Рихтер Дж., Windows для профессионалов. – 4-е изд. – СПб.: Питер, М.: ИТД «Русская редакция», 2001.
  19. Домашняя страница mpC. http://hcl.ucd.ie/Projects/mpC

Александр Игнатьев
15.07.2008

Автор: Alexander
Дата публикации: 15.07.2008
Число просмотров: 3314

Возврат


Copyright 2007-2009 by Alexander Ignatyev