
- •1. Назвати основні сфери застосування високопродуктивних систем опрацювання даних і коротко їх охарактеризувати.
- •2. Навести класифікацію обчислювальних систем згідно з м.Флінном.
- •3. Навести класифікацію обчислювальних систем згідно з р.Хокні.
- •4. Навести основні архітектури високопродуктивних систем опрацювання даних.
- •5.Архітектура мрр
- •6.Архітекттура smp
- •8. Охарактерізуваті архітектуру numa.
- •9. Охарактеризувати кластерні системи.
- •10. Охарактерізуваті архітектуру grid.
- •11.Навести переваги використання багатоядерних процесорних систем у порівнянні з багатопроцесорними системами.
- •12. Навести переваги використання спеціалізованих графічних процесорів (gpu) у порівнянні з центральними процесорами (cpu) комп'ютерних систем для високопродуктивних обчислень.
- •13.Як визначається час виконання паралельного алгоритму?
- •14. Мінімальний можливий час виконання паралельного алгоритму визначається довжиною максимального шляху обчислювальної схеми алгоритму:
- •15 Основною характеристикою алгоритму, визначальною ефективність його виконання на багатопроцесорній системі є його ступінь паралелізму.
- •16. Ефективність паралельних обчислень сильно залежить від об'єму обміну у виконуваному застосуванні і від свойст коммуникатора.
- •17.Закон Амдала
- •18.Закон Густавсона – Барсиса
- •20.Навести основні принципи, яких необхідно дотримуватись при розробці паралельних алгоритмів.
- •21. Навести та охарактеризувати основні типи апаратних комунікаційних інтерфейсів для організації високопродуктивних систем опрацювання даних.
- •22. Охарактеризувати спеціалізований комунікаційний інтерфейс sci (Scalable Coherent Interface).
- •23.Охарактеризувати спеціалізований комунікаційний інтерфейс Myrinet
- •24.Охарактеризувати комунікаційний інтерфейс Gigabit Ethernet.
- •26 Охарактеризувати принципи роботи технології виклику віддалених процедур, методів, обєктів
- •27 Дати означення терміну маршалізація даних при виклику віддалених процедур
- •28 Дати означення терміну серіалізація обєктів
- •29. Пояснити причини використання клієнтської та серверної заглушок (stub) при написанні програм виклику віддалених процедур та методів.
- •30. Навести основні проблеми, які виникають при використанні технологій виклику віддалених процедур, методів, об'єктів.
- •31. Охарактеризувати технологію rpc.
- •32.Архітектура rmi.
- •1.Rmi (англ. Remote Method Invocation) - програмний інтерфейс виклику видалених методів в мові Java.
- •35. Охарактерізуваті технологію dcom
- •36. Проаналізувати використання программ з багатьма підпроцесами для організації високопродуктивних систем опрацювання даних.
- •37.Дати означення термінам семафор, м'ютекс, критична секція.
- •38.Навести основні проблеми, які виникають при використанні програм з багатьма підпроцесами, зокрема гонка процесів, вхід/вихід з критичних секцій, синхронізація підпроцесів.
- •39.Проаналізувати використання програм зі з'єднанням на основі сокетів для організації високопродуктивних систем опрацювання даних.
- •40.Дати означення терміну сокет, мережевий сокет, unix-сокет.
- •42. Охарактеризуйте технологію mpi, її призначення і реалізації
- •43. Навести приклад найпростішої програми на мові с з використанням технології mpi, яка виводить прізвище студента
- •44 Описати процес компіляції і виконання програми засобами середовища OpenMpi та компілятора gcc.
- •45.Навести необхідні функції mpi для ініціалізації і завершення mpi-коду програми.
- •46Охарактеризувати поняття групи і комунікатора у технології mpi.
- •47Навести і охарактеризувати основні типи даних mpi.
- •48Охарактеризувати основні методи для обміну повідомленнями між окремими процесами технології mpi.
- •50. Навести і охарактеризувати віртуальні топології mpi.
- •52Директива parallel
- •53Навести конструкції технології OpenMp на мові с для паралельного виконання циклу області технології OpenMp.
- •58. Охарактеризувати технологію pvm.
- •59 Проаналізувати можливість використання технології OpenMp, mpi та mpi/openmp на архітектурах mpp, smp та кластерній
- •60 Охарактеризувати високодоступні кластери
- •61 Охарактеризувати високопродуктивні кластери
- •62. Які є базові операції rpc?
- •63.Які є етапи виконання rpc.
- •64.Навести основні етапи розробки паралельних алгоритмів.
- •65.Завдання множення матриці на вектор визначається співвідношеннями
- •66.Навести і описати паралельні методи множення матриць.
- •67. Навести і описати паралельні методи розв'язку систем лінійних рівнянь.
- •67. Навести і описати паралельні методи сортування.
- •69.Навести і описати паралельні методи опрацювання графів.
- •70.Навести і описати паралельні методи розв'язання диференціальних рівнянь у частинних похідних.
- •71.Навести і описати паралельні методи багатоекстремальної оптимізації
- •72. У вихідному коді програми на мові с вставити пропущені виклики процедур підключення мрі, визначення кількості процесів і рангу процесів.
- •73. Програма, яка виводить «Hello Word from process I for n».
- •74. Програма генерації чисел в одному процесі і сумування їх у іншому процесі і надсилення результату в перший процес.
- •85.Налаштувати обчислювальний кластер засобами OpenMosix і пояснити принципи його роботи
- •88.Пояснити що таке mfs і продемонструвати прозору взаємодію файлових систем кластера
- •89. Написати програму з використанням бібліотеки Posix threads на мові с з метою тестування роботи кластера під керуванням OpenMosix. Тестування провести з замірами часу.
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(оператор:список) – задає оператора і список загальних змінних;
53Навести конструкції технології OpenMp на мові с для паралельного виконання циклу області технології OpenMp.
Звичайний підхід організації обчислень для багатопроцесорних обчислювальних систем - створення нових паралельних методів на основі звичайних послідовних програм, в яких або автоматично компілятором, або безпосередньо програмістом виділяються ділянки незалежних між собою обчислень. Можливості автоматичного аналізу програм для породження паралельних обчислень досить обмежені, і другий підхід є переважаючим. При цьому для розробки паралельних програм можуть застосовуватися як нові алгоритмічні мови, орієнтовані на паралельне програмування, так і вже наявні мови програмування, розширені деяким набором операторів для паралельних обчислень.
Обидва перерахованих підходи призводять до необхідності значної переробки існуючого програмного забезпечення, і це в значній мірі ускладнює широке поширення паралельних обчислень. Як результат, останнім часом активно розвивається ще один підхід до розробки паралельних програм, коли вказівки програміста з організації паралельних обчислень додаються в програму за допомогою тих чи інших позамовних засобів мови програмування - наприклад, у вигляді директив чи коментарів, які обробляються спеціальним препроцесором до початку компіляції програми. При цьому початковий операторний текст програми залишається незмінним, за яким у разі відсутності препроцесора компілятор побудує вихідний послідовний програмний код. Препроцесор ж, будучи застосованим, замінює директиви паралелізму на деякий додатковий програмний код (як правило, у вигляді звернень до процедур будь-якої паралельної бібліотеки).
Розглянутий вище підхід є основою технології OpenMP, найбільш широко вживаною в даний час для організації паралельних обчислень на багатопроцесорних системах із загальною пам'яттю. У рамках даної технології директиви паралелізму використовуються для виділення у програмі паралельних областей (parallel regions), в яких послідовний виконуваний код може бути розділений на декілька роздільних командних потоків (threads). Далі ці потоки можуть виконуватися на різних процесорах обчислювальної системи. У результаті такого підходу програма представляється у вигляді набору послідовних (однопотокових) та паралельних (багатопотокових) ділянок програмного коду.
omp_lock_t dmax_lock;
omp_init_lock (dmax_lock);
do {
dmax = 0; // максимальна зміна значень u
#pragma omp parallel for shared(u,n,dmax) private(i,temp,d)
for ( i=1; i<N+1; i++ ) {
#pragma omp parallel for shared(u,n,dmax) private(j,temp,d)
for ( j=1; j<N+1; j++ ) {
temp = u[i][j];
u[i][j] = 0.25*(u[i-1][j]+u[i+1][j]+
u[i][j-1]+u[i][j+1]–h*h*f[i][j]);
d = fabs(temp-u[i][j]);
omp_set_lock(dmax_lock);
if ( dmax < d ) dmax = d;
omp_unset_lock(dmax_lock);
} // конец вложенной параллельной области
} // конец внешней параллельной области
} while ( dmax > eps );
54.num_threads (цілочисельне вираження) - явне задання кількості ниток, які виконуватимуть паралельну область; по замовчуванні вибирається останнє значення, встановлене за допомогою функції omp_set_num_threads(), або значення змінної OMP_NUM_THREADS;
За допомогою функцій omp_get_thread_num() і omp_get_num_threads() нитка може взнати свій номер і загальне число ниток, а потім виконувати свою частину роботи залежно від свого номера (цей підхід широко використовується в програмах на базі інтерфейсу MPI).
55.----
56. Навести конструкції технології OpenMP на мові С для керування паралельними секціями.
#pragma omp parallel sections
{#pragma omp section
f1();
…#pragma omp section
f2();}
sections використовується тоді коли необхідно блоки коду виконувати в окремих потоках.
sections оголошує цілу ділянку секцій, а кожна окрема секція за допомогою директиви section. Кожний section – це окремий потік.
При вході в паралельну область породжуються нові OMP_NUM_THREADS-1 ниток, кожна нитка отримує свій унікальний номер, причому що породжує нитка отримує номер 0 і стає основною ниткою групи ( «майстром»). Решта нитки отримують в якості номера цілі числа з 1 до OMP_NUM_THREADS-1. Кількість ниток, що виконують цю паралельну область, залишається незмінним до моменту виходу з області. При виході з паралельної області виробляється неявна синхронізація та видаляються всі нитки, крім породженої. 57. Навести конструкції технології OpenMP на мові С для керування роботою процесів у критичних секціях, бар'єрами.
Критичні секції є невід’ємним етапом виконання програми . При виявлені критичної секції потік призупиняється і очікує її звільнення зокрема це може трапитись при виконанні циклів а також може виникати задача коли всі потоки в певний момент часу планово мають з’явитися в певній секції це називається бар’єром в такому випадку всі потоки зупиняються до того часу поки всі інші не з’являються в даному бар’єрі. Він є методом синхронізації в OpenMP.
For (int i=0; i<5000; i++) {…}
#pragma omp fpr nowait
For (int j=0; j<1000; j++) {…}
#pragma mop barrier
Nowait – відключає синхронізацію
Barrier призупиняє виконання всіх потоків які вже звільнилися до моменту звільнення всіх інших.
#pragma omp for critical {…}
Critical вказує на те що поки в відповідному фрагменті є хоча б один потік інші ввійти в дану секцію не можуть. Це є неіменована критична секція.
Critical(same val) –іменована критична секція