Laboratoriya ishi №2
OpenMP parallellashtirish kutubxonasi bilan tanishish va uning yordamida parallel dasturlar tuzush
1.Ishni bajarishdan maqsad:
Parallelashtirishning zamonaviy instrumental vositasi hisoblangan OpenMP kutubxonasi imkoniyatlarini o'rganish va uning yordamida parallel dasturlar tuzush ko'nikmasini hosil qilish.
2.Nazariy qisim
OpenMP(Open Multi - Processing) – ko’p oqimli ilovalarni yaratish uchun mo’ljallangan amaliy dasturlashning interfeysi bo’lib, asosan umumiy xotiraga ega bo’lgan parallel hisoblash tizimlari uchun ishlab chiqilgan. OpenMP kompilyatorlar va maxsus funksiyalar kutubxonasi uchun direktivalar to’plamidan iborat. OpenMP standarti yaqin 15 yil ichida umumiy xotiraga ega arxitekturalarga qo’llanilgan holda yaratilgan.So’nggi yillarda taqsimlangan xotirali parallel hisoblash tizimlari uchun OpenMP standartining kengaytirilgan holda ishlab chiqilmoqda. 2005 - yilning oxirida Intel kompaniyasi Cluster OpenMP mahsulotini taqdim etdi, unda kengaytirilgan OpenMP ishlab chiqilgan bo’lib taqsimlangan xotirali parallel hisoblash tizimlari uchun mo’ljallangan. OpenMP spetsifikatsiyasini hisoblash va dasturlash texnikasi bo’yicha bir nechta yirik ishlab chiqaruvchi kompaniyalar (Intel, Hewlett-Packard, Silicon Graphics, Sun, IBM, Fujitsu, Hitachi, Siemens, Bull) yaratishmoqda, ularni OpenMP Architecture Review Board(ARB) deb nomlangan notijorat korxonasi tomonidan boshqariladi. OpenMP ko’p oqimli ilovalarni tez va yengil yaratishni Fortran va C/C++ algoritmik tillarda amalga oshiradi. OpenMP ning birinchi versiyasi 1997 - yilda Fortran tili uchun yaratilgan. C/C++ dasturlash tillari uchun esa 1998 - yilda yaratilgan. 2008 - yilda esa OpenMP ning 3.0 versiyasi taqdim etildi. OpenMP da parallel va ketma – ketlik . Parallel muhitga kirilgandan so’ng yangi OMP_NUM_THREADS-1 oqimlar yaratiladi, har bir oqim o’zining unikal nomeriga ega bo’ladi, bunda dastlabki oqim 0 nomer bilan belgialanadi va u bosh oqim (master) bo’ladi. Qolgan oqimlar raqam sifatida butun sonlar 1 dan OMP_NUM_THREADS – 1gacha bo’ladi. Oqimlar soni belgilangan parallel muhitda bajariladi va ushbu muhitdan chiqib ketishgacha o’zgarmay qoladi. Parallel muhitdan chiqib ketgandan so’ng sinxronizatsiya yordamida bosh oqimdan boshqa barcha oqimlar yo’q qilinadi.
Misol:
// OpenMP.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include
#include
#include
#include
#include
using namespace std;
int random(int a){
return rand()%a;
}
int _tmain(int argc, _TCHAR* argv[])
{
const int n =5;
int A[n],B[n],Max,Max2;
//parallel hisoblash
cout<<"parallel hisoblash:"<#pragma omp parallel
{
#pragma omp for
for(int i=0; i
A[i] =random(100);
Max = A[0];
if(Max>A[i]){
Max = A[i];
}
}
cout<<"Max = "<
}
//ketma-ket hisoblash
cout<<"ketma-ket hisoblash:"<for(int i=0;i
B[i] = random(100);
Max2 = B[0];
if(Max2>B[i]){
Max2=B[i];
}
}
cout<<"Max2 = "<
system("PAUSE");
return 0;
}
Nateja:
Do'stlaringiz bilan baham: |