Читайте также: |
|
Створення комунікатора COMM_CART, що володіє декартовою топологією, з процесів коммуникатора COMM. Параметр NDIMS задає розмірність отримуваних декартових грат, DIMS(I) – число елементів у вимірі I
1≤I≤NDIMS. PERIODS – логический массив из NDIMS элементов,
определяющий, является ли решетка периодической (значение .TRUE.) вдоль
каждого измерения.
REORDER логічний масив з NDIMS елементів, що визначає, чи є грати періодичними (значення.TRUE.) уздовж кожного виміру. REORDER – логічний параметр, що визначає, що при значенні.TRUE. системі дозволено міняти порядок нумерації процесів для оптимізації розподілу процесів по фізичних процесорах використовуваного паралельного комп'ютера. Процедура є колективною, а значить, має бути викликана всіма процесами коммуникатора COMM. Якщо кількість процесів в тій, що задається
топологиї COMM_CART менше числа процесів у вихідному комунікаторі СОММА, то деяким процесам може повернутися значення Mpi_comm_null
Топологія графа
Mpi_graph_create(COMM, NNODES, INDEX, EDGES, REORDER, Comm_graph, IERR) INTEGER COMM, NNODES, INDEX(*), EDGES(*), Comm_graph, IERR LOGICAL REORDER Створення на основі комуникатора COMM нового комуникатора Comm_graph з топологією графа. Параметр NNODES задає число вершин графа, INDEX(I) містить сумарну кількість сусідів для перших I вершин. Масив EDGES містить впорядкований список номерів процесів-сусідів всіх вершин. Параметр REORDER при значенні.TRUE. означає, що системі раз- вирішено міняти порядок нумерації процесів. Процедура є колективною, а значить, має бути викликана всіма процесами вихідного коммуникатора. Якщо NNODES менше числа процесів коммуникатора COMM, то деяким процесам повернеться значення Mpi_comm_null, а значить, вони не прийматимуть участі в створюваній топології. Якщо NNODES більше числа процесів комунікатора COMM, то виклик процедури є помилковим.
51. OpenMP – це стандарт для реалізації бібліотек, призначених для написання додатків, що працюють на загальному полі пам'яті (SMP, NUMA). Даний стандарт передбачає реалізацію розпаралелювання шляхом використовування POSIX-threads. На відміну від останнього, OpenMP передбачає інтерфейс як до С-, так і до FORTRAN-програм. Існують відкриті реалізації стандарту, наприклад, OdinMP. Стандарт багатопотокового програмування! Орієнтується на SMP.
Переваги ОМР:
1. Технологія є ефективнішою при створенні програми з великими паралельними циклами. Розробнику не потрібно створ. нову паралельну програму, а варто лише додати в текст послідовної програми ОpenMP директиви.
2. Зручний спосіб контролю виконання паралельної програми
3. ОpenMP програма на одноядерній платформі може виконуватися як послідовна.
Директиви просто ігноруються на етапі компіляції, аое при потребі можу бути перекомпілюована в паралельну.
4. Підтримка orphan(відірвані директиви), тобто директиви синхронізації і розподілу роботи можуть не входити бузпосередньо в лексичний контекст паралельної області програми.
Gcc,! gomp- бібліотека
Gcc –fopenmp hello.c –o hello
52Директива parallel
Паралельна область задається за допомогою директиви parallel (parallel
... end parallel).
Сі:
#pragma omp parallel [опція[[,] опція]...]
Можливі опції:
· if(умова) – виконання паралельної області по умові. Входження в паралельну область здійснюється тільки при виконанні
деякої умови. Якщо умова не виконана, то директива не спрацьовує і продовжується обробка програми в колишньому режимі;
· num_threads (цілочисельний вираз) – явне завдання кількості ниток, які виконуватимуть паралельну область; за умовчанням вибирається останнє значення, встановлене за допомогою функції omp_set_num_threads(), або значення змінної
OMP_NUM_THREADS;
default(private|firstprivate|shared|none) – всім змінним в
паралельній області, яким явно не призначений клас, буде призначений клас private, firstprivate або shared відповідно; none означає, що всім змінним в паралельній області клас повинен бути призначений явно; у мові Сі задаються тільки варіанти shared або none;
· private(список) – задає список змінних, для яких породжується локальна копія в кожній нитці; початкове значення локальних
копій змінних із списку не визначено;
firstprivate(список) – задає список змінних, для яких породжується локальна копія в кожній нитці; локальні копії змінних ініціалізувалися значеннями цих змінних в нитці-майстрові;
· shared(список) – задає список змінних, загальних для всіх ниток;
· copyin(список) – задає список змінних, оголошених як
threadprivate, які при вході в паралельну область ініціалізувалися значеннями відповідних змінних в нитці-майстрові;
· reduction(оператор:список) – задає оператора і список загальних змінних;
Дата добавления: 2015-08-18; просмотров: 105 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
XML-RPC | | | Навести конструкції технології OpenMP на мові С для паралельного виконання циклу області технології OpenMP. |