Sunteți pe pagina 1din 14

(1)Write an open MP program using C to demonstrate the following :

-Private

PROGRAM

#include <stdio.h>

#include <stdlib.h>

#include <omp.h>

int main(void){

int i;

int x =30;

#pragma omp parallel for private(x)

for( i=0;i<=10;i++){

x=i;

printf("Thread number: %d x: %d\n",omp_get_thread_num(),x);

printf("x is %d\n", x);

}
OUTPUT
first private

PROGRAM

#include <stdio.h>

#include <stdlib.h>

#include <omp.h>

int main(void){

int i;

int x =30;

#pragma omp parallel for firstprivate(x)

for( i=0;i<=10;i++){

x=i;

printf("Thread number: %d x: %d\n",omp_get_thread_num(),x);

printf("x is %d\n", x);

}
First private specifies that each thread should have its own instance of a variable and that the
variable should be initialized with the value of the variable, because it exists before m the parallel
construct.

That is, every thread gets its own instance of x and that instance equals 30.

Shared

PROGRAM

#include <stdio.h>

#include <stdlib.h>

#include <omp.h>

int main(void){

int i;

int x =30;

#pragma omp parallel for shared(x)

for( i=0;i<=10;i++){
x=i;

printf("Thread number: %d x: %d\n",omp_get_thread_num(),x);

printf("x is %d\n", x);

}
Last Private

#include <stdio.h>

#include <stdlib.h>

#include <omp.h>

int main(void){

int i;

int x =30;

#pragma omp parallel for lastprivate(x)

for( i=0;i<=10;i++){

x=i;

printf("Thread number: %d x: %d\n",omp_get_thread_num(),x);

printf("x is %d\n", x);

OUTPUT
Critical

#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("%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

max = a[i];

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

}
OUTPUT

Atomic

#include <stdio.h>
#include <omp.h>

#define MAX 10

int main() {

int count = 0;

#pragma omp parallel num_threads(MAX)

#pragma omp atomic

count++;

printf("Number of threads: %d\n", count);

}
Master

#include <omp.h>

#include <stdio.h>

int main( )

#pragma omp parallel

#pragma omp master

int k = omp_get_num_threads();

printf ("Number of Threads requested = %i\n",k);

}
Single
#include <stdio.h>
#include <omp.h>

int main() {
#pragma omp parallel num_threads(2)
{
#pragma omp single

printf("read input\n");

printf("compute results\n");

#pragma omp single

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

S-ar putea să vă placă și