
- •Гомогенні та гетерогенні обчислювальні системи
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Системи черг на обчислювальних кластерах
- •Доточкові передачі даних в mpi
- •Паралельні області та послідовні області у OpenMp програмі
- •Структура mpi програми
- •Проблеми організації паралельних обчислень
- •Механізми синхронізації у mpi програмах?
- •Мережі з’єднання у високопродуктивних обчислювальних системах
- •Редукційні операції у mpi програмах?
- •Показники ефективності паралельних алгоритмів
- •Передача даних на всі процеси даного комунікатора у mpi програмах?
- •Паралельні та розподілені обчислення
- •Збирання даних зі всіх процесів даного комунікатора у mpi програмах?
- •Функції для роботи з системним таймером в OpenMp
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Змінні у OpenMp програмах Классы переменных
- •Передача повідомлень з блокуванням у mpi програмах Передача/прием сообщений с блокировкой
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp sections. Призначення, опції, приклади застосування
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp barrier. Призначення, опції, приклади застосування
- •Спорідненість та відмінності технології OpenMp та mpi
- •Критичні секції в OpenMp програмах
- •Високопродуктивні обчислювальні системи
- •Взаємні блокування у паралельних програмах
- •Визначення загального числа паралельних процесів у групі та визначення номера процесу в групі у mpi програмах?
- •Моделі паралельних обчислень
- •Грід системи
- •Критичні секції в OpenMp програмах
- •В яких спосіб реалізовано взаємодію процесів у mpi програмах?
- •Механізми синхронізації в OpenMp програмах
- •Синхронизация типа atomic
- •Синхронизация типа critical
- •Синхронизация типа barrier
- •Синхронизация типа master
- •Спорідненість та відмінності технології OpenMp та mpi
- •Директива #pragma omp task. Призначення, опції, приклади застосування
- •Ініціалізація паралельної частини mpi програми
- •Директива #pragma omp for. Призначення, опції, приклади застосування
- •Функції mpi_Wtime(). Призначення, опції, приклади застосування
- •Функції omp_get_thread_num() та omp_get_num _thread(). Призначення, опції, приклади застосування
- •Індивідуальні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp single та #pragma omp master. Призначення, опції, приклади застосування Директива single
- •Директива master
- •Колективні операції з взаємодії процесів у mpi програмах
- •Директива #pragma omp parallel. Призначення, опції, приклади застосування Директива parallel
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Показники ефективності паралельних алгоритмів
- •Передача повідомлень без блокування у mpi програмах Передача/прием сообщений без блокировки
- •Паралельні області та послідовні області у OpenMp програмі
- •Відкладені операції прийому та передачі у mpi програмах? Отложенные запросы на взаимодействие
- •Системи черг на обчислювальних кластерах
- •Дисковий ввід ти вивід у mpi програмах
Високопродуктивні обчислювальні системи
Прогресс в микроэлектронике и структурно-технических решениях привел к тому, что суперкомпьютерные системы быстро обновляются. Чтобы работа суперкомпьютерных центров была максимально эффективной, ориентируются на наиболее современные и быстродействующие системы. В США в порядке реализации программы Acselerated Strategic Computer Initiative (ASCI - ускоренная стратегическая компьютерная инициатива) в интересах ядерного комплекса в 2001 г. введена в действие вычислительная система White (IBM), имеющая пиковую производительность 12,3 Тфлопс и содержащая более 8 тыс. процессоров. К 2003 г. намечена установка системы производительностью 30 Тфлопс и в 2004-2005 гг. - 100 Тфлопс. Современный массово-параллельный суперкомпьютер строится путем объединения большого количества (до нескольких тысяч) серийно выпускаемых быстродействующих микропроцессоров, которые используются также и для построения обычных рабочих станций и серверов. Несколько процессоров могут объединяться в модули с общей оперативной памятью. Обмен между процессорными узлами-модулями осуществляется через высокоскоростные стандартные или специализированные каналы. Хотя физически оперативная память распределена между процессорными узлами, аппаратура и специальное программное обеспечение могут поддерживать логически общее поле разделяемой памяти. Такой подход способствует решению сложных проблем распараллеливания программ.
Все более распространенным подходом к построению высокопроизводительных систем является объединение серийных компьютеров в кластер с использованием стандартных сетевых средств. Это позволяет распределить между машинами кластера вычислительную нагрузку, в том числе организовать параллельное выполнение отдельной задачи сразу на нескольких машинах - узлах кластера. Такой способ наращивания вычислительных мощностей относительно дешев, однако возможности эффективного выполнения задач в кластере могут быть ограничены недостаточным быстродействием сети межмашинного обмена. При этом необходимо создание специального программного обеспечения наряду с использованием общепринятого базового.
Взаємні блокування у паралельних програмах
Взаимная блокировка - это взаимоисключающая блокировка. Захватить такую блокировку может только одна нить. Взаимные блокировки применяются для предотвращения одновременного доступа к общим данным. У взаимной блокировки есть атрибуты, которые определяют ее свойства. В текущей версии AIX атрибуты взаимных блокировок не применяются. Следовательно, при создании взаимной блокировки ее объект атрибутов можно проигнорировать.
Как и нити, взаимные блокировки создаются с помощью объектов атрибутов. Объект атрибутов взаимной блокировки представляет собой абстрактный объект, содержащий несколько атрибутов, набор которых зависит от реализации компонентов POSIX. Для работы с объектом атрибутов создается переменная типа pthread_mutexattr_t. В AIX тип данных pthread_mutexattr_t - это указатель; в других системах он может быть структурой или каким-то другим типом данных.
Функция pthread_mutexattr_init инициализирует объект атрибутов взаимной блокировки значениями по умолчанию. Для работы с атрибутами предназначены специальные функции. Для удаления объекта атрибутов взаимной блокировки предназначена функция pthread_mutexattr_destroy. В некоторых реализациях библиотеки нитей эта функция освобождает память, динамически выделенную функцией pthread_mutexattr_init.
С помощью одного объекта атрибутов можно создать несколько взаимных блокировок. Кроме того, объект атрибутов можно изменить в промежутке между созданием двух взаимных блокировок. После создания взаимных блокировок объект атрибутов можно удалить - это никак не отразится на созданных взаимных блокировках.
Взаимная блокировка создается вызовом функции pthread_mutex_init. При вызове этой функции можно указать объект атрибутов взаимной блокировки. Если значение указателя будет равно NULL, атрибутам будут присвоены значения по умолчанию.
Взаимная блокировка должна создаваться один раз. Не следует вызывать функцию pthread_mutex_init с тем же параметром mutex несколько раз (например, в двух разных нитях, одновременно выполняющих один и тот же код). В результате повторного вызова будет возвращен код ошибки EBUSY.
Когда взаимная блокировка становится ненужной, ее нужно удалить с помощью функции pthread_mutex_destroy. Эта функция освобождает все области памяти, выделенные функциейpthread_mutex_init. После удаления взаимной блокировки ту же самую переменную pthread_mutex_t можно вновь использовать для создания другой взаимной блокировки.
Как и другие общие системные ресурсы, взаимные блокировки, размещенные в стеке нити, необходимо удалить до завершения нити. В библиотеке нитей хранится скомпонованный список взаимных блокировок; следовательно, при освобождении стека, в котором хранится взаимная блокировка, этот список будет поврежден.
Захват и освобождение взаимных блокировок
Взаимная блокировка - это обычная блокировка, у которой есть два состояния: занята и свободна. После создания взаимная блокировка свободна. Для захвата взаимной блокировки применяется функция pthread_mutex_lock:
Если взаимная блокировка свободна, функция ее захватывает.
Если блокировка уже захвачена другой нитью, функция блокирует вызывающую нить до освобождения взаимной блокировки.
Если блокировка уже захвачена вызывающей нитью, функция возвращает сообщение об ошибке.
Функция pthread_mutex_trylock работает так же, как и функция pthread_mutex_lock, но не блокирует вызывающую нить:
Если взаимная блокировка свободна, функция ее захватывает.
Если взаимная блокировка захвачена, функция возвращает сообщение об ошибке.
Нить, захватившую взаимную блокировку, часто называют владельцем блокировки.
Функция pthread_mutex_unlock освобождает взаимную блокировку, если ее владельцем является вызывающая нить:
Если взаимная блокировка уже свободна, функция возвращает сообщение об ошибке.
Если владельцем взаимной блокировки является вызывающая нить, функция освобождает блокировку.
Если владельцем взаимной блокировки является другая нить, функция возвращает сообщение об ошибке.