Hybrid programming - Sabra Seekers

Sabra Seekers

“Write what you know. That should leave you with a lot of free time.”

Hot

Post Top Ad

Sunday, July 23, 2017

Hybrid programming

Hybrid programming


මොකක්ද  මේ  hybrid programming  කියන්නෙ ?programming languages  වල එකතුවක්  කියල සරලව කියන්න පුලුවන්.ඒ කියන්නෙ parallel programming model combining වෙලා තමා හැදෙන්නෙ.
OpenMP  කියන්නෙ මොකක්ද කියලා අපි ඉලගට බලමු. multithreaded shared memory parallelization සදහා පාවිච්චි කල හැකි API එකක්.උදා :
• Fortran 77/9X and C/C++ are supported.
 එක් වරකදී වැඩසටහනේ එක් කොටස සමාන්තරකරණයට ඉඩ සලසයිopenMP වලදි 
OpenMP  API  එක අවයවයන් 3 කින් සැදි තියේ.
1)Compiler directives(සංයුක්තකාරක නියෝග)
 • Expresses shared memory parallelization(හවුල් මතක සමාන්තරකරණය ප්‍රකාශ  කරයි)
• Preceded by sentinel, can compile serial version(පෙරවදන විසින් පූර්වාපේක්ෂීව අනුවර්තිත අනුවාදයක් සම්පාදනය කළ හැකිය)
2)Runtime library routines (Runtime පුස්තකාල නිත්‍ය පිළිවෙත)
• Small number of library functions.
Example: get number of threads, get rank of thread..
• Can be discarded in serial version via conditional compiling (සම්පිණ්ඩන සම්පාදනය හරහා අනුක්රමික අනුවාදයෙන් බැහැර කළ හැක)
3)Environment variables (පාරිසරික විචල්යයන්)
• Bind threads to cores .
• Specify number of threads.

A simple OpenMP program:F95

PROGRAM demo1 
USE omp_lib
 INTEGER::omp_rank
 !$omp parallel private(omp_rank) 
omp_rank=omp_get_thread_num() 
WRITE(*,*) "thread is ",omp_rank
!$omp end parallel
 END PROGRAM demo1                          
                                                                    >export OMP_NUM_THREADS=2
                                                                    >ftn -mp demo1.f95
                                                                    >aprun -n 1 ./a.out
                                                                       thread is             0
                                                                       thread is             1
A simple OpenMP program: C
#include <stdio.h>
#include "omp.h“
 int main(int argc,char *argv[])
{
int omp_rank;
 #pragma omp parallel private(omp_rank)
 {
 omp_rank=omp_get_thread_num();
  printf("thread is %d\n",omp_rank); } }
                                                                                  >export OMP_NUM_THREADS=2
                                                                                   >cc -mp demo1.c
                                                                                  >aprun -n 1 ./a.out
                                                                                     thread is             0
                                                                                      thread is             1
අපි ඉදිරියෙදි තවත් ලිපියකින්  OpenMP ගැන කතා කරමු.ඉලග ලිපියෙන් ඉදිරියෙදි  හමුවෙමු.

(OpenMP in detail) සමග....

No comments:

Post a Comment

Share on Google+

Post Top Ad