- •Введение
- •1 Параллельные и распределенные вычислительной системы
- •1.1 Понятие параллельной и распределенной вычислительной системы
- •1.2 Архитектура параллельной и распределенной вычислительной системы
- •1.3 Программное обеспечение для различных высокопроизводительных систем
- •1.4 Языки высокопроизводительных вычислений
- •1.5 Интегрированная среда разработки многопоточных приложений
- •2.1 Общие сведения об Oracle Solaris Studio ide
- •2.2 Профилировщик Performance Analyzer.
- •2.3 Профилирование приложений в Oracle Solaris Studio.
- •Заключение
- •Список используемых источников
- •Приложение а
- •Приложение б
1.3 Программное обеспечение для различных высокопроизводительных систем
Способ организации программного обеспечения, состоящего из относительно независимых частей, обеспечивается параллельным программированием. Оно также позволяет использовать множественные процессоры. Существует два обширных перекрывающихся класса приложений – многопоточные и распределенные. [4]
В многопоточном классе основными понятиями являются процесс и поток. Процесс – это последовательная программа, которая при выполнении имеет собственный поток управления. Под потоком понимается подпроцесс, или легковесный процесс LWP (light-weight process), выполняющийся в контексте полноценного процесса. Каждая параллельная программа содержит несколько процессов, поэтому имеет несколько потоков. Термин многопоточный обычно означает, что программа содержит больше процессов (потоков), чем существует процессоров для их выполнения. Следовательно, процессы на процессорах выполняются по очереди. Пример многопоточные приложений:
оконные системы на персональных компьютерах или рабочих станциях;
многопроцессорные операционные системы и системы с разделением времени;
системы реального времени, управляющие электростанциями, космическими аппаратами и т.д.
Многопоточные приложения разрабатываются на системах с общей памятью. Они используют разделяемые данные для организации синхронизации процессов и потоков.
Второй широкий класс приложений образуют распределенные вычисления, в которых компоненты выполняются на машинах, связанных локальной или глобальной сетью [4]. По этой причине процессы взаимодействуют, обмениваясь сообщениями. Примеры:
файловые серверы в сети;
системы баз данных для банков, заказа авиабилетов и т.д.;
Web-серверы сети Internet.
Распределенные приложения разрабатываются на системах с распределенной памятью. Такие приложения пишутся для распределения обработки (как в файловых серверах), обеспечения доступа к удаленным данным (как в базах данных и в Web). Многие распределенные приложения организованы как приложения типа клиент-сервер. Например, файловый сервер предоставляет файлы данных для процессов, выполняемых на клиентских машинах. Компоненты распределенных приложений часто являются многопоточными программами. [4]
1.4 Языки высокопроизводительных вычислений
Основными языками разработки программ с параллельными и распределёнными вычислениями являются С, С++ и High Performance Fortran (HPF). В них заложены различные механизмы многопоточного и распределенного программирования.
Многопоточное программирование
В многопоточном программирование создаются потоки, принадлежащие одному процессу и использующие его участок памяти. Для взаимодействия между потоками используются разделяемые данные. Для управления разделяемых данных создаются объекты синхронизации.
На языках С, С++ потоки создаются:
С помощью библиотеки PThreads, реализующая стандарт POSIX Threads. Она содержит типы данных потоков, атрибутов и мьютексов, функции для работы с потоками, атрибутами потоков, синхронизации потоков.
С помощью библиотеки OpenMP. Открытый стандарт OpenMP дает описание совокупности директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.
Распределенное программирование
Взаимодействие между процессами организовано через передачу сообщений. Процессы обмениваются данными с другими процессами с помощью сообщений. Процессы создаются явно, путём вызова соответствующей функции операционной системы, а обмен сообщениями – с помощью библиотеки (например, реализация протокола MPI).
MPI – это библиотека функций, обеспечивающая взаимодействие параллельных процессов с помощью механизма передачи сообщений. На языках С, С++ есть поддержка библиотеки MPI.
