Здавалка
Главная | Обратная связь

Написати приклад обчислення сум по cтовпцях



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

#pragma omp parallel

{ #pragma for shared(x) private(i) reduction(+:sum)

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

for ( j=i ; j < NMAX; j++) sum = a [ j ] [ i ] ;}}}

 

 

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

З використанням директив private shared

#pragma omp parallel for shared ( a ) pr i vat e ( i , j , sum) \

schedule ( dynamic , chunk ) ordered

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

for ( j=i ; j < NMAX; j++)

sum += a [ j ] [ i ] ; #pragma omp ordered

p r i n t f ( "Сума елементів стовпця %d␣ р i в н а ␣%f \n" , i , sum) ; }}

 

Написати приклад обчислення сум матриць

З використанням директиви ordered

#include <omp.h>

int myval=0,i,n=10;

#pragma omp parallel for private(myval) ordered
{ for(i=1; i<=n; i++){ myval += i;
#pragma omp ordered {
printf("%d \n", myval); } }}

 

Написати приклад обрахунку суми двох

Скінчених сум з використанням паралельних секцій

double sum1 = 0,sum2=0;

#pragma omp parallel private(sum1,sum2){

#pragma omp sections {

#pragma omp section{

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

sum1 += i;

result+=sum1;}

#pragma omp section{

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

sum2 += i;

result+=sum2;}}}

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

return 0;}

 

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

Директиви master (що виведе програма?)

Виведе:[0] = 0[1] = 1[2] = 4[3] = 9[4] = 16  
#include <omp.h>#include <stdio.h>int main( ) { int a[5], i; #pragma omp parallel { #pragma omp for for (i = 0; i < 5; i++) a[i] = i * i; #pragma omp master for (i = 0; i < 5; i++) printf_s("a[%d] = %d\n", i, a[i]); #pragma omp barrier #pragma omp for for (i = 0; i < 5; i++) a[i] += 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; }

 

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

Виведе:4118467633426500191691572411478293582696224464max= 29358  
секцій (що виведе програма?)

#include <omp.h>#include <stdio.h>#include <stdlib.h>#define SIZE 10int 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);}

 

Написати приклад використання синхрон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 ) ; }

 

Написати приклад використання директиви 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; }

 

 

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

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

#pragma omp parallel{

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

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

{sum = a [ i ] ;}}}

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.