Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
піро2.doc
Скачиваний:
25
Добавлен:
05.03.2016
Размер:
989.7 Кб
Скачать

74. Програма генерації чисел в одному процесі і сумування їх у іншому процесі і надсилення результату в перший процес.

75.---

76.---

77.---

78.---

79. Навести приклад найпростішої програми на мові С з використанням технології OpenMP, яка виводить прізвище студента.

#include<stdio.h>

#include “omp.h”

int main (int argc, char *argv[])

{

omp_set_dynamic(0); // заборона динамічної зміни кількості потоків

omp_set_num_threads(10); // задаємо кількість потоків

# pragma omp parallel

{

printf ( "Latsik Taras\n");

}

return 0

}

80.---

81. Написати програму з використанням бібліотеки 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;

}

82.Написати програму з використанням бібліотеки 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;

}

83. Написати програму з використанням бібліотеки 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;

}

84---

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]