O’ZBEKISTON RESPUBLIKASI RAQAMLI TEXNOLOGIYALAR VAZIRLIGI MUHAMMAD AL-XOZAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI Parallel ishlov berish fanidan tayyorlangan
“OpenMP PAKET TARKIBINI VA ISHLASHINI O‘RGANISH” mavzusidagi
Mashg’ultoning maqsadi:OpenMP paketini va uning ishlash algoritmlarini o‘rganish va shaxsiy kompyuterda OpenMP kutubxonasini sozlash hamda undan foydalana olish ko‘nikmasiga ega bo‘lish
Nazariy ma’lumot. 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 paketi parallellashtirish jarayonida ko‘plab oqim(thred)larni yaratadi (1.1-rasm).
1.1-rasm. OpenMP paketida parallellashtirish
1.1-rasmda ko‘rsatilganidek, OpenMP paketi yordamida har bir oqim(thred)lardan yana bittadan oqim(thred)lar yaratiladi. Ikki yadroli tizim uchun ikkita oqim(thred), to‘rt yadroli tizim uchun to‘rtta yaratiladi va hokazo. Keyin barcha oqim(thred)lar bir vaqtning o‘zida parallel hudud hosil qiladi va amalni bajaradi. Har bir oqim(thred) parallel hududdan chiqqanda, u tugatiladi.
OpenMP kod mintaqalarini parallel ravishda ishga tushirish uchun bir nechta qo‘shimcha ko‘rsatmalar beradi, shu jumladan parallellashtirish sikllarini ham. OpenMP Linux, Windows va Mac OS X tizimlari uchun bir nechta ochiq manbali va tijorat kompilyatorlarida mavjud.
OpenMP 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 yaratilgan. 2015 yilda esa OpenMP 4.5 versiyasi taqdim etildi.
Amaliy qism.OpenMP kutubxonasini sozlash OpenMP kutubxonasini Visual Studio 2015 muhitiga sozlash uchun quyidagi ketma-ketliklarni amalga oshiramiz:
1-qadam. Visual Studio 2015 muhitida yangi project yaratib olamiz va uni OpenMP.cpp kengaytmada nomlaymiz (1.2-rasm).
1.2-rasm. Yangi OpenMP.cpp nomli project hosil qilish
2-qadam. Yaratgan OpenMP.cpp projectimizni xususiyatlari (properties)ga kirib uning xususiyatlarini o‘zgartiramiz (1.3-rasm).
1.3-rasm. Yaratilgan OpenMP.cpp projectini xususiyatini o‘zgartirish
3-qadam. Ushbu qadamda, C/C++ -> Language bo‘limiga kirib OpenMP kutubxonasini yuklashni tasdiqlab quyamiz (1.4-rasm).
1.4-rasm. OpenMP kutubxonasini yuklashni tasdiqlash
OpenMP paketini Visual Studio muhitiga samarali o‘rnatilganiga ishonch hosil qilish uchun quyidagi kodni amalga oshiramiz, va natija (1.5-rasm) ni ko‘ramiz:
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include #include
int main() {
omp_set_num_threads(10);
#pragma omp parallel // parallel mintaqa hosil qilish
{
int thread_id = omp_get_thread_num(); // hosil qilingan thread(oqim)lar
int num_threads = omp_get_num_threads(); // jami thread(oqim)lar
OpenMP da parallel bilan ishlash (natija: 1.5-rasm)
// OpenMP.cpp
#include "stdafx.h"
#include #include #include #include #define ARRAY_SIZE 100000000
#define ARRAY_VALUE 1231
using namespace std;
int main() {
//jarayon bajarilish vaqtini aniqlash uchun kerakli kalit so‘zlar
double itime, ftime, exec_time;
itime = omp_get_wtime();
omp_set_num_threads(2);
int *arr = new int[ARRAY_SIZE];
std::fill_n(arr, ARRAY_SIZE,ARRAY_VALUE);
#pragma omp parallel for
for (int i = 0; i < ARRAY_SIZE; i++)
{
arr[i] = arr[i] / arr[i] + arr[i]/5-14;
}
// Jarayonga ketgan vaqtni hisoblash
ftime = omp_get_wtime();
exec_time = ftime - itime;
cout << "Sarflangan vaqt: " << exec_time << endl;
system("pause");
return 0;
}
1.5-rasm
Omp kutubxonasisiz natija:
XULOSA Xulosa qilib aytganda, ushbu amaliyotda OpenMp orqali parallelashtirishni amalga oshirdik va shaxsiy kompyuterimizda sinab ko’rdik. Mening kompyuterimda yadrolar soni 2 ta bo’lganligi sababli parallelashtirish yuqori darajada unumdorlik bermadi ammo yadrolar soni ko’p bo’lgan kompyuterlarda ushbu kutubxona yuqori unumdorlikni berar ekan.