program subroutines
!$ use OMP_LIB
implicit none
integer :: a=22,b=67,c=53,i
!$OMP PARALLEL SHARED(a) PRIVATE(b) DEFAULT(SHARED)
call addrank(a,b)
print *,"I have the value :",b," and my rank is",OMP_GET_THREAD_NUM ()
!$OMP DO
do i=1,4
call mul2(b)
end do
!$OMP END DO
print *,"I have the value :",b," and my rank is",OMP_GET_THREAD_NUM ()
!$OMP END PARALLEL
end program subroutines
subroutine addrank(o,p) ! add rank to o and return in p
!$ use OMP_LIB
integer, intent(in) :: o
integer, intent(out) :: p
p = o + OMP_GET_THREAD_NUM ()
end subroutine addrank
subroutine mul2(p) ! mul p by 2
integer, intent(inout) :: p
p = p * 2
end subroutine mul2
#include
#include
int main(int argc, char** argv)
{
int a = 22;
int b = 67;
int c = 53;
int i;
#pragma omp parallel shared(a) firstprivate(b) default(shared)
{
b = addrank(a);
printf(" I have the value : %d and my rank is %d\n",b,omp_get_thread_num());
#pragma omp for
for (i = 0; i < 4; i++ )
b = mul2(b);
printf(" I have the value : %d and my rank is %d\n",b,omp_get_thread_num());
}
return 0;
}
int addrank(int o)
{
return o + omp_get_thread_num();
}
int mul2(int p)
{
return p*2;
}