Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРО(теорія).doc
Скачиваний:
3
Добавлен:
20.09.2019
Размер:
461.31 Кб
Скачать

Екзаменаційний білет №22

  1. NUMA-системи, їх переваги та недоліки.

  2. Індексний спосіб конструювання похідних типів даних.

1 Питання

NUMA (Non-Uniform Memory Access, архітектура з неоднорідним доступом до пам'яті) система — організація пам'яті в паралельних архітектурах ЕОМ, в якій над фізично розподіленою між окремими обчислювальними блоками пам'яттю створюється спільний адресний простір (найчастіше програмним способом) таким чином, що на рівні програмної організації (архітектури) пам'ять системи сприймається як загальна для усіх процесорів. Однак доступ до різних її областей займає різний час (тому, власне, ці архітектури називаються архітектурами з неоднорідним доступом до пам'яті).

Значною проблемою таких архітектурних рішень є забезпечення цілісності даних та своєчасної синхронізації змін в даних, які стали результатом якихось локальних обчислень, на всю глобальну пам'ять системи. Ця проблема знана під назвою проблеми когерентності кеш-пам'яті. Архітектури з когерентною кеш-пам'яттю носять абревіатуру ccNUMA (cache-coherent NUMA).

NUMA є певним компромісом між паралельними архітектурами з загальною та розподіленою пам'яттю. Перші набагато легше програмувати, залишаючись загалом в звичній фон-нойманівській парадигмі, але вони обмежені в масштабуванні на нарощуванні кількості процесорів. З іншого боку, архітектури з розподіленою пам'яттю програмувати досить важко, але потенціал для нарощування швидкодії для них є набагато більшим.

Системи NUMA складаються з однорідних базових вузлів, що містять невелику кількість процесорів з модулями основної пам'яті. Практично всі архітектури ЦПУ використовують невелику кількість дуже швидкої неподілюваний пам'яті, відомої як кеш, який прискорює звернення до часто необхідним даними. У NUMA підтримка когерентності через поділювану пам'ять дає суттєву перевагу в продуктивності. Переваги і недоліки Хоча системи з некогерентним доступом до NUMA простіше проектувати і створювати, стає гранично складно створювати програми в класичній моделі архітектури фон Неймана. В результаті, всі продавані NUMA-комп'ютери використовують спеціальні апаратні рішення для досягнення когерентності кеша, і класифікуються як кеш-когерентні системи з розподіленою пам'яттю, або ccNUMA. Як правило, існує межпроцессорной взаємодія між контролерами кеша для збереження узгодженої картини пам'яті (когерентність пам'яті), коли більш ніж один кеш зберігає одну і ту ж комірку пам'яті. Саме тому, ccNUMA платформи втрачають у продуктивності, коли кілька процесорів поспіль намагаються отримати доступ до одного блоку пам'яті. Операційна система, підтримуюча NUMA, намагається зменшити частоту доступу такого типу шляхом перерозподілу процесорів і пам'яті таким способом, щоб уникнути гонок і блокування.

2 Питання

Похідні типи даних створюються під час виконання програми, а не при компіляції. Створення типа виконується за два кроки:

        1. Конструювання типу.

        2. Реєстрація типу.

Похідні типи створюються за допомогою спеціальних функцій-конструкторов. Ко­жен такий тип задається набором базових типів та значеннь зсувів. Зсуви обчислю­ються від початки буферу та визначають ті елементи, що будуть приймати участь в операціях обміну. При цьому зсуви можуть приймати навіть негативні значення. Також зсуви можуть бути неупорядковані. Послідовність пар (тип, зсув) називають картою типу.

Після створення типу його необхідно зареєструвати за допомогою функції MPI_Type_commit:

int MPI_Type_commit (MPI_Datatype * datatype)

Найбільш універсальним констуркторои похідних типів даних є функція MPI_Type_struct:

int MPI_Type_struct (і n t count, int blocklens[],

MPI_Aint indices [] , MPI_Datatype old_types[], MPI_Datatype *newtype )

Нижче наведено опис параметрів функції:

count — кількість блоків (базових типів) в новому типі (також кількість елементів

масивів blocklens, indices, old_types); blocklens — масив, i-й елемент якого містить кількість елементів i-го блоку; indices — зсув в байтах кожного блоку; old_types — тип елементів кожного блоку; newtype — ідентифікатор нового типу даних.

Якщо в якості повідомлень будуть застосовуватись масиви нового типу, що створю- ються, то в масиві old_types останнім елементом має бути MPI_UB.