OpenMP.ru

Распараллеливание

Shared или private, три простых правила

by on Ноя.16, 2014, under Распараллеливание

В Openmp параллелизация подкупает своей простотой. Добавил прагму к циклу и хоп — я знаю кунг-фу. Тем не менее такое отношение частенько приводит к разнообразным ошибкам обращения к одной и той же переменной.
В OpenMP есть два основных класса переменных — shared и private. Shared переменная общая между потоками, хранится в обычной памяти процесса (стек или хип) и ничего не стоит. Private переменная для каждого OpenMP потока своя и хранится в TLS — специальном месте, уникальном для каждого потока (thread), есть дополнительные расходы на копирование.
Как их отличать между собой.
1. По умолчанию все переменные внутри parallel секции считаются shared за исключением п.2.
2. Все локальные переменные (объявленные внутри parallel секции) и итераторы будут private.
3. Все нелокальные переменные (объявленные ранее parallel) в которые что-то пишется (lvalue) должны быть явно указаны как private.
(continue reading…)

Leave a Comment more...

Когда shared переменная внезапно становится private

by on Дек.25, 2013, under Распараллеливание

Был замечен сайд-эффект от типов хранилища переменных.

По умолчанию считается что все переменные в OpenMP секции являются shared. Допустим мы явно объявляем какой то int как shared:
(continue reading…)

Leave a Comment more...

Архитектура современных суперкомпьютеров

by on Сен.12, 2008, under Распараллеливание

Эта обзорная статья, в которой я постараюсь избегать подробностей и ненужных деталей, предназначена она в основном для новичков.

Есть два подхода при построении современных суперкомпьютеров — системы с общей памятью и так называемые кластеры. Каждый подход не исключает другого, у каждого подхода есть свои достоиинства и недостатки. Плюс систем с общей памятью — универсальность модели параллельного ПО, не требующей какого либо дополнительного кода, или не требующей значительных изменений кода. Плюс кластерных систем — отказоустойчивость и более лучшая масштабируемость. Системы с общей памятью плохо масштабируются при росте числа вычислительных процессоров, кластеры же масштабируются плохо из-за возрастающей сложности сети при добавлении узлов, но это происходит значительно позднее, когда число процессоров измеряется сотнями и даже тысячами. Рассмотрим подробнее оба этих подхода
(continue reading…)

4 комментария :, , more...

Обзор способов параллельного программирования

by on Мар.10, 2008, under Распараллеливание

В этой статье подробно рассматриваются различные подходы к параллельному программированию.
Наиболее широкоизвестные способы параллельного программирования

  1. Threads / Processes
  2. OpenMP
  3. MPI

Исторически сложилось так, что наиболее часто применяемый способ — это Threads в их различных реинкарнациях. Способ хорош тем что не требует дополнительных библиотек. Чтобы использовать этот вариант, достаточно имеющихся возможностей OC. Обычно используется для скрытия от пользователя различных продолжительных операций, чтобы не терять возможность отрисовки GUI в момент ожидания операции. Основное достоинство — потоки разделяют адресное пространства и принадлежат одному процессу. Поэтому все передачи данных между потоками выполняются максимально быстро. Чаще всего достаточно передать указатель. Синхронизация потоков не затратна и не требует системных вызовов (Syscall) — долгих операций с переключением контекста. Сюда же можно отнести и многопроцессные программы в самом простейшем виде — использующие fork() или что-то подобное из системных функций для порождения нового процесса, но применяющее для синхронизации и обмена данными системное API.
(continue reading…)

5 комментариев more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!