Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OpenMP_Pytannja.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
114 Кб
Скачать
☆
  1. Написати приклад паралельного множення

двох векторів зі статичним розподілом ітерацій

(який порядок виконання ?)

#include<omp.h>

#define N 10

double x[N],y[N],z[N];

int main()

{ int i; int num;

for (i=0;i<N;i++) x[i]=y[i]=i;

num = omp_get_num_threads();

#pragma omp parallel for schedule(dynamic,N/num){

for (i=0;i<N;i++)

z[i]=x[i]*y[i]; }

return 0; }

  1. Написати приклад використання критичних

с

Виведе:

41

18467

6334

26500

19169

15724

11478

29358

26962

24464

max= 29358

екцій
(що виведе програма?)

#include <omp.h>

#include <stdio.h>

#include <stdlib.h>

#define SIZE 10

int main() {

int i; int max;

int a[SIZE];

for (i = 0; i < SIZE; i++)

{ a[i] = rand();

printf_s("%d\n", a[i]); }

max = a[0];

#pragma omp parallel for num_threads(4)

for (i = 1; i < SIZE; i++)

{ if (a[i] > max) { #pragma omp critical {

if (a[i] > max) max = a[i]; } } }

printf ("max = %d\n", max);}

  1. Написати приклад використання синхронiзацiї

в OpenMP через механiзм замків

#include <s t d i o . h>

#include <omp. h>

omp_lock_t lock ;

i nt main( i nt argc , char _ argv [ ] )

{ int n ; omp_init_lock(&lock ) ;

#pragma omp p a r a l l e l pr i vat e (n)

{ n=omp_get_thread_num( ) ;

omp_set_lock(&lock ) ;

p r i n t f ( "Початок закр секцiї, потік %d\n" , n ) ;

s leep ( 5 ) ;

printf ( "Кiнець закр секцiї, потік ␣%d\n" , n ) ;

omp_unset_lock(&lock ) ; }

omp_destroy_lock(&lock ) ; }

  1. Написати приклад використання директиви schedule з рiзними параметрами (що виведе програма?)

#include<omp.h>

#define N 10

double x[N],y[N],z[N];

int main() { int i; int num;

for (i=0;i<N;i++) x[i]=y[i]=i;

num = omp_get_num_threads();

#pragma omp parallel for schedule(dynamic,N/num){

for (i=0;i<N;i++) z[i]=x[i]*y[i]; } return 0; }

  1. Написати приклад обчислення суми елементів

матриці з використанням директиви reduction

#pragma omp parallel{

#pragma for private(i) reduction(+:sum)

{ sum = 0 ; for ( i =0; i < N; i++)

{sum = a [ i ] ;}}}

  1. Написати приклад використання директиви

s

Виведе:

read input

compute results

compute results

write output

ingle
(що виведе програма?)

#include <stdio.h>

#include <omp.h>

int main() {

#pragma omp parallel num_threads(2)

{ #pragma omp single

printf_s("read input\n");

printf_s("compute results\n");

#pragma omp single

printf_s("write output\n"); }}

  1. Написати приклад обчислення добутку 3

скінчених сум з використанням директиви atomic

double sum1 = 0,sum2=0,sum3=0;

#pragma omp parallel private(sum1,sum2){

#pragma omp sections {

#pragma omp section{

for(i=1; i<=n; i++)

sum1 += i;

#pragma omp atomic

result+=sum1; }

#pragma omp section{

for(i=1; i<=m; i++)

sum2 += i;

#pragma omp atomic

result+=sum2;}

#pragma omp section{

for(i=1; i<=k; i++)

sum3 += i;

#pragma omp atomic

result+=sum3;}}}

printf("x = %fl", result);

return 0;

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