Обзор средств разработки высокопроизводительных приложений
Message Passing Interface (MPI)
Message Passing Interface (MPI)
Интерфейс Передачи Сообщений, спецификация разработанная в 1993—1994 годах группой MPI Forum, в состав которой входили представители академических и промышленных кругов. Она стала первым стандартом систем передачи сообщений.
MPI. Пример
#include <mpi.h> #include <stdio.h> int main (int argc, char *argv[]) { int ProcNum, ProcRank, tmp; MPI_Status status; MPI_Init (&argc, &argv); MPI_Comm_size (MPI_COMM_WORLD, &ProcNum); MPI_Comm_rank (MPI_COMM_WORLD, &ProcRank); if(ProcRank == 0){ printf("Hello world from process %i \n", ProcRank); for(int i = 1; i < ProcNum; i++){ MPI_Recv(&tmp,1,MPI_INT,MPI_ANY_SOURCE,0,MPI_COMM_WORLD, &status); printf("Hello world from process %i \n", tmp); } } else { MPI_Send(&ProcRank,1,MPI_INT,0,0,MPI_COMM_WORLD); } MPI_Finalize(); return 0;
Реализации MPI
MPI CHameleon (MPICH)
Свободно распространяемая реализация MPI. Пакет доступен в исходных кодах, поэтому допускает гибкую настройку. Поддерживается работа в различных версиях ОС UNIX, Mac OS и в последних версиях Microsoft Windows.
MPICH соответствует спецификации MPI-2. Поддерживаются различные коммуникационные среды (в т.ч. 10 Gigabit Ethernet, InfiniBand, Myrinet, Quadrics). Пока не поддерживаются системы, гетерогенные по форматам хранения данных. Имеется версия с поддержкой пакета Globus.
LAM (Local Area Multicomputer) MPI
"Opensource" реализация MPI, соответствующая спецификации MPI-1 и, в значительной мере, спецификации MPI-2. LAM поддерживает гетерогенные конфигурации, поддерживает пакет Globus и удовлетворяет IMPI (Interoperable MPI). Поддерживаются различные коммуникационные системы (в т.ч. Myrinet).
IMPI – попытка создания стандарта, обеспечивающего интероперабельность различных реализаций MPI (http://impi.nist.gov/). В настоящее время IMPI поддерживается такими реализациями, как:
- LAM/MPI
- MPI/Pro
- Hewlett-Packard MPI (от версии 1.7)
- GridMPI
LAM может работать на метакластерных системах.
Intel ® MPI
Входит в состав Intel® Cluster Toolkit. Коммерческая реализация MPI, оптимизированная для архитектуры Intel. Построена на основе MPICH.
Сайт в Интернете:
http://www.intel.com
Microsoft MPI
Входит в состав Compute Cluster Pack SDK.
Ориентирована на работу в среде ОС Microsoft Windows и доступна, в том числе, по лицензии MSDN Academic Alliance. Входит в состав Microsoft HPC Server 2008. Основана на MPICH2, включает дополнительные средства управления заданиями.
Поддерживается спецификация MPI-2.
OpenMPI
"Opensource" реализация MPI-2, разрабатываемая консорциумом представителей академических, научных и индустриальных кругов.
- Полное соответствие спецификации MPI-2.
- Поддержка различных ОС.
- Поддержка различных коммуникационных сред.
Инструменты Intel
Библиотека Intel ® Math Kernel Library (MKL)
Состав библиотеки:
- BLAS (3 уровня + расширение – уровень 1 для разреженных векторов)
- LAPACK – вычислительная алгебра, в том числе решение спектральных задач
- DFT (дискретное преобразование Фурье) – в том числе многомерное. Многопоточная реализация
- Vector Mathematical Library – математические функции
- Vector Statistical Library – набор векторизованных генераторов случайных чисел
- Солверы, предобуславливатели, средства поддержки численного решения дифференциальных уравнений и др.
Оптимизирована для архитектуры Intel ®
Intel ® Integrated Performance Primitives (IPP)
Библиотека готовых компонентов для разработки мультимедийных приложений для вычислительных платформ Intel.
Включает модули для обработки сигналов и выполнения векторных и матричных операций, функции сжатия и распаковки речи и статических/динамических изображений, средства шифрования и обработки аудиоданных и текстовых строк и другое.
Intel IPP обеспечивает прозрачное использование расширенных возможностей процессоров Intel, таких, как технология MMX, наборы команд Streaming SIMD Extensions. Библиотека Intel IPP оптимизирована для работы с процессорами компании Intel.
Библиотека Intel IPP поддерживает 32- и 64-битные операционные системы Windows и Linux, включая встраиваемые версии, такие как Windows Mobile.
Intel ® Threading Building Blocks (TBB)
Библиотека готовых шаблонов C++, упрощающая разработку многопоточных приложений, обеспечивая более высокий уровень абстракции при распараллеливании.
Многоплатформенность: Linux, Microsoft Windows, Mac OS.
Если код написан на языке C++, лучше Intel® TBB. Intel® TBB хорошо подходит, если код в значительной степени объектно-ориентирован и в нем широко используются шаблоны C++ и определяемые пользователем типы.
Если код написан на C или Fortran, лучше выбрать OpenMP, поскольку этот API лучше соответствует стилю структурного программирования.
При использовании C++, если в программе преобладают операции обработки массивов, OpenMP может оказаться удобнее с точки зрения сложности программирования.
Компиляторы
Использование возможностей автоматической оптимизации компилятора может дать значительный выигрыш в производительности. Компиляторы Intel предоставляют большие возможности автоматической оптимизации приложений.
Intel® VtuneTM Amplifier XE
Intel ® VtuneTM Amplifier XE – программный инструмент, позволяющий выявить и локализовать проблемы производительности ПО.
Возможности:
- сбор различных показателей производительности;
- отображение данных в различных режимах (system-wide, исходный код и процессорные инструкции);
- выявление потенциальных проблем производительности и создание рекомендаций по их разрешению.
Intel® Cluster Studio XE
- Intel® Composer XE – компиляторы C/C++ и Fortran.
- Intel® Trace Analyzer and Collector – анализ параллельных приложений.
- Intel® MPI Library – реализация MPI.
- Intel® MPI Benchmarks – тесты производительности MPI.
- Intel® VTuneTM Amplifier XE – анализатор производительности.
- Intel® Inspector XE – инструмент поиска ошибок работы с памятью, реализации многопоточности для приложений C/C++, Fortran, C#.NET.
Intel® Parallel Studio
Advisor
Выявление "кандидатов" на распараллеливание
Composer
- Intel® C++ Compiler, Intel® Threading Building
- Blocks, Intel® Integrated Performance Primitives,
- and Intel® Parallel Debugger Extension.
Inspector
Выявление ошибок использования памяти (утечки памяти, переполнение буфера, указатели) и многопоточности (блокировки, гонки за данными и т.д.) на основе анализа выполнения программы.
Amplifier
Анализ производительности, профилирование и оптимизация параллельных приложений
Другие инструменты
Intel® CilkTM Plus
Средство разработки приложений для вычислительных систем с общей памятью.
OpenCL
Средство разработки приложений, использующих в качестве ускорителей вычислений графические процессоры общего назначения.
и другие