- •1. Назвати основні сфери застосування високопродуктивних систем опрацювання даних і коротко їх охарактеризувати.
- •2. Навести класифікацію обчислювальних систем згідно з м.Флінном.
- •3. Навести основні архітектури високопродуктивних систем опрацювання даних.
- •4.Архітектура мрр
- •5.Архітекттура smp
- •7. Охарактерізуваті архітектуру numa.
- •8. Охарактеризувати кластерні системи.
- •9. Охарактерізуваті архітектуру grid.
- •10.Навести переваги використання багатоядерних процесорних систем у порівнянні з багатопроцесорними системами.
- •11. Навести переваги використання спеціалізованих графічних процесорів (gpu) у порівнянні з центральними процесорами (cpu) комп'ютерних систем для високопродуктивних обчислень.
- •12.Як визначається час виконання паралельного алгоритму?
- •13. Мінімальний можливий час виконання паралельного алгоритму визначається довжиною максимального шляху обчислювальної схеми алгоритму:
- •14. Основною характеристикою алгоритму, визначальною ефективність його виконання на багатопроцесорній системі є його ступінь паралелізму.
- •16.Закон Амдала
- •17.Закон Густавсона – Барсиса
- •20. Навести та охарактеризувати основні типи апаратних комунікаційних інтерфейсів для організації високопродуктивних систем опрацювання даних.
- •22.Охарактеризувати спеціалізований комунікаційний інтерфейс Myrinet
- •23.Охарактеризувати комунікаційний інтерфейс Gigabit Ethernet.
- •25 Охарактеризувати принципи роботи технології виклику віддалених процедур, методів, обєктів
- •26 Дати означення терміну маршалізація даних при виклику віддалених процедур
- •27 Дати означення терміну серіалізація обєктів
- •28. Пояснити причини використання клієнтської та серверної заглушок (stub) при написанні програм виклику віддалених процедур та методів.
- •29. Навести основні проблеми, які виникають при використанні технологій виклику віддалених процедур, методів, об'єктів.
- •30. Охарактеризувати технологію rpc.
- •31.Архітектура rmi.
- •1.Rmi (англ. Remote Method Invocation) - програмний інтерфейс виклику видалених методів в мові Java.
- •34. Охарактерізуваті технологію dcom
- •35. Проаналізувати використання программ з багатьма підпроцесами для організації високопродуктивних систем опрацювання даних.
- •36.Дати означення термінам семафор, м'ютекс, критична секція.
- •37.Навести основні проблеми, які виникають при використанні програм з багатьма підпроцесами, зокрема гонка процесів, вхід/вихід з критичних секцій, синхронізація підпроцесів.
- •38.Проаналізувати використання програм зі з'єднанням на основі сокетів для організації високопродуктивних систем опрацювання даних.
- •39.Дати означення терміну сокет, мережевий сокет, unix-сокет.
- •42. Навести приклад найпростішої програми на мові с з використанням технології mpi, яка виводить прізвище студента
- •43 Описати процес компіляції і виконання програми засобами середовища OpenMpi та компілятора gcc.
- •51Директива parallel
- •57. Охарактеризувати технологію pvm.
- •58 Проаналізувати можливість використання технології OpenMp, mpi та mpi/openmp на архітектурах mpp, smp та кластерній
- •59 Охарактеризувати високодоступні кластери
- •60 Охарактеризувати високопродуктивні кластери
- •61. Які є базові операції rpc?
- •62.Які є етапи виконання rpc.
- •63.Навести основні етапи розробки паралельних алгоритмів.
- •65.Навести і описати паралельні методи множення матриць.
- •66. Навести і описати паралельні методи розв'язку систем лінійних рівнянь.
- •67. Навести і описати паралельні методи сортування.
- •69.Навести і описати паралельні методи розв'язання диференціальних рівнянь у частинних похідних.
- •71. У вихідному коді програми на мові с вставити пропущені виклики процедур підключення мрі, визначення кількості процесів і рангу процесів.
- •72. Програма, яка виводить «Hello Word from process I for n».
- •73. Програма генерації чисел в одному процесі і сумування їх у іншому процесі і надсилення результату в перший процес.
- •88. Написати програму з використанням бібліотеки Posix threads на мові с з метою тестування роботи кластера під керуванням OpenMosix. Тестування провести з замірами часу.
69.Навести і описати паралельні методи розв'язання диференціальних рівнянь у частинних похідних.
Завдання Пуассона, тобто рішення диференціальних рівнянь в приватних похідних, виражається наступними рівняннями:
- усередині області (8.1)
- на межі (8.2)
Вважатимемо, що область рішення є квадратною. Щоб знайти наближене рішення, визначимо квадратну сітку, включає точки (хі. уі), що задаються як
Таким чином, уздовж кожного краю сітки є п+2 точки. Слід знайти апроксимацію и(х,у) в точках (хі,, уі) вибраної сітки. Позначимо через иij значення і u (xi, yj), через h відстань мiж точками, рівне 1/(n+1). Тоді формула 8.1. для кожної з точок виглядатиме таким чином:
Обчислюємо значення uij в кожній точці сітки, які заміщують попередні значення, використовуючи вираз
Цей процес називається ітераціями Якобі і повторюється до отримання результату. Фрагмент програми для цього випадку такий:
70.---
71. У вихідному коді програми на мові с вставити пропущені виклики процедур підключення мрі, визначення кількості процесів і рангу процесів.
#include "mpi.h"
#include <stdio.h>
int main (int argc, char *argv[])
{
int myid, numproc;
MPI_Status status;
MPI_Init ( &agrc &argv );
MPI_Comm_size (MPI_COMM_WORLD &numproc);
MPI_Comm_rank (MPI_COMM_WORLD &myid);
fprintf(stdout,”Process%d of %d\n”,myid,numproces);
MPI_Finalesize();
return 0;
}
72. Програма, яка виводить «Hello Word from process I for n».
#include "mpi.h"
#include <stdio.h>
int main (int argc, char *argv[])
{
int myid, numproc;
MPI_Status status;
MPI_Init ( &agrc &argv );
MPI_Comm_size (MPI_COMM_WORLD &numproc);
MPI_Comm_rank (MPI_COMM_WORLD &myid);
fprintf(stdout,”Hello World from process%d for %d\n”,myid,numproces);
MPI_Finalesize();
return 0;
}
73. Програма генерації чисел в одному процесі і сумування їх у іншому процесі і надсилення результату в перший процес.
74.---
75.---
76.---
77.---
78. Навести приклад найпростішої програми на мові С з використанням технології OpenMP, яка виводить прізвище студента.
int main ()
{ #pragma omp parallel
{ printf (“…………”);
} return 0;
}
79.---
80. Написати програму з використанням бібліотеки OpenMP на мові С/С++ для вимірювання часу cумування квадратів чисел від 0 до 10000000. Для усереднення накладних витрат повторити достатню кількість операцій обчислення з метою отримання значень часу в межах доль секунди, повторити тестування декілька разів (наприклад, 10) і усереднити результати. А також написати аналогічну програму без бібліотеки OpenMP на мові C/C++ та виконати аналогічні дії по визначенню часу роботи програми. Порівняти отримані значення часу.
Пример 2 иллюстрирует применение функций omp_get_wtime() и
omp_get_wtick() для работы с таймерами в OpenMP. В данном примере
производится замер начального времени, затем сразу замер конечного време-
ни. Разность времён даёт время на замер времени. Кроме того, измеряется
точность системного таймера.
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[])
{
double start_time, end_time, tick;
start_time = omp_get_wtime();
end_time = omp_get_wtime();
tick = omp_get_wtick();
printf("Время на замер времени %lf\n", end_time-start_time);
printf("Точность таймера %lf\n", tick);
}
Пример 2a. Работа с системными таймерами на языке Си.
program example2b
include "omp_lib.h"
double precision start_time, end_time, tick
start_time = omp_get_wtime()
end_time = omp_get_wtime()
tick = omp_get_wtick()
print *, "Время на замер времени ", end_time-start_time
print *, "Точность таймера ", tick
end
кажись ця канає… якшо нє то шось мутити тре з тою шо вище
#include <stdio.h>
#include <iostream>
#include <omp.h>
using namespace std;
int i,s;
double time,start;
//Тіло програми
main()
{
//Розпаралелення
start = clock();
omp_set_num_threads(50);
#pragma omp parallel
{
for( int i=0; i<=10000000; ++i)
{
s+=pow(i,2)
};
};
time = clock() - start;
printf( "%g\t\n", s, time );
return 0;
}
81. Написати програму з використанням бібліотеки OpenMP на мові С/С++ обчислення числа методом чисельного інтегрування (метод середніх прямокутників).
#include <stdio.h>
#include <omp.h>
int main ()
{
int n =100000, i;
double pi, h, sum, x;
h = 1.0 / (double) n;
sum = 0.0;
#pragma omp parallel default (none) private (i,x) shared (n,h,sum)
{
int id = omp_get_thread_num();
int numt = omp_get_num_threads();
for (i = id + 1; i <= n; i=i+numt)
{
x = h * ((double)i - 0.5);
sum += (4.0 / (1.0 + x*x));
}
}
pi = h * sum;
printf("pi is approximately %.16f”, pi);
return 0;
}
82. Написати програму з використанням бібліотеки OpenMP на мові С/С++ додавання двох матриць. Матриця заповнюється значеннями з генератора псевдовипадкових чисел.
#include <stdio.h>
#include <iostream>
#include <omp.h>
using namespace std;
#define M 2
class vvid_N {
public:
double array[N][N];
void Str();
};
//Метод
void vvid_M::Str() {
for( int i=1; i<=N; ++i )
array
for( int j=1; j<=N; ++j )
{
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
array[i][j]=0+rand()%10;
};
}
//Тіло програми
main()
{
//Введення матриць
vvid_N arrayA, arrayB, arrayZ;
cout << "\t\tМатриця А\n";
arrayA.Str();
cout << "\t\tМатриця B\n";
arrayB.Str();
cout << "\t\tМатриця C\n";
arrayC.Str();
//Розпаралелення
omp_set_num_threads(4);
#pragma omp parallel
{
//Цикл обрахунку матриць
for( int a=0; a<N; ++a)
for( int b=0; b<<N; ++b)
{
arrayZ.array[a][b]=arrayA.array[a][b]+arrayB.array[a][b];
};
};
//Цикл виводу матриці
for( int a=1; a<=N; ++a){
for( int b=1; b<=N; ++b){
printf( "%g\t\n", arrayZ.array[a][b] );
}
};
return 0;
}
83---
84---
85---
86---
87---