• Foydalanilgan adabiyotlar
  • Kompyuter injiniringi 210-21 guruh talabasi




    Download 1,31 Mb.
    Sana06.12.2023
    Hajmi1,31 Mb.
    #112630
    Bog'liq
    arxitekura-5


    Kompyuter injiniringi
    210-21 guruh talabasi


    KOMPYUTER ARXITEKURASI FANIDAN
    5-TOPSHIRIQ
    MAVZU: OpenMP PAKET TARKIBINI VA ISHLASHINI O‘RGANISH
    Ishdan maqsad: OpenMP paketini va uning ishlash algoritmlarini o‘rganish va shaxsiy kompyuterda OpenMP kutubxonasini sozlash hamda undan foydalana olish ko‘nikmasiga ega bo‘lish.
    Nazariy qism
    OpenMP API umumiy xotira tizimlarida parallel dasturlarni ishlab chiqishga imkon beruvchi kompilyator direktivalari, kutubxona tartiblari va muhit o'zgaruvchilari to'plamidan iborat. Bu yerda asosiy komponentlar va ular qanday ishlashi haqida umumiy ma'lumot:


    1. Tuzuvchi ko'rsatmalari:
    - Kompilyator direktivalari - bu kodni parallellashtirish bo'yicha kompilyatorga ko'rsatma berish uchun manba kodiga kiritilgan maxsus izohlar.
    - Asosiy direktivalarga `#pragma omp parallel`, `#pragma omp for`, `#pragma omp sections` va boshqalar kiradi.
    - Direktivlar parallel hududlarni, tsiklni parallellashtirishni, kod bo'limlarini, sinxronizatsiyani va boshqalarni belgilaydi.
    2. Kutubxona tartiblari:
    - OpenMP ijro muhitini so'rash yoki boshqarish uchun ilovadan chaqirilishi mumkin bo'lgan ish vaqti kutubxonasi tartiblarini taqdim etadi.
    - Masalan, `omp_get_num_threads()`, `omp_get_thread_num()` va `omp_set_num_threads()`.
    3. Atrof-muhit o'zgaruvchilari:
    - Atrof-muhit o'zgaruvchilari OpenMP dasturlari xatti-harakatlarini boshqarish uchun ishlatilishi mumkin.
    - "OMP_NUM_THREADS" o'zgaruvchisi, masalan, dastur uchun mavjud bo'lgan mavzularning maksimal sonini belgilaydi.


    4. Parallel hududlar:
    - #pragma omp parallel direktivasi koddagi parallel hududni belgilaydi.
    - Parallel mintaqada kod bir vaqtning o'zida bir nechta iplar tomonidan bajariladi.
    - Mavzular odatda dinamik tarzda yaratiladi va iplar sonini direktivlar yoki muhit o'zgaruvchilari yordamida boshqarish mumkin.
    5. Mavzuni boshqarish:
    - OpenMP dinamik yaratish va iplarni boshqarishni qo'llab-quvvatlaydi.
    - Iplar parallel hududlarda ish bilan ta'minlanadi va ish vaqtida iplar sonini sozlash mumkin.
    Maʼlumotlar doirasi va almashish:
    - OpenMP parallel hududlarda ma'lumotlar doirasini aniqlash mexanizmlarini taqdim etadi.
    - O'zgaruvchilar mavzular o'rtasida taqsimlanishi mumkin (`shared` bandi) yoki har bir mavzu uchun shaxsiy nusxalari bo'lishi mumkin (`private' band).
    7. Parallel tsikllar:
    - “#pragma omp for” direktivasi tsikllarni parallellashtirish uchun ishlatiladi.
    - Turli rejalashtirish strategiyalari variantlari bilan iplar o'rtasida tsiklning takrorlanishini avtomatik ravishda taqsimlaydi.
    8. Sinxronizatsiya:
    - `#pragma omp barrier`, `#pragma omp kritik` va `#pragma omp atomic` kabi direktivalar sinxronizatsiya mexanizmlarini ta`minlaydi.
    - Ular umumiy resurslarga kirishni nazorat qiladi va mavzulararo aloqani boshqaradi.
    9. Kamaytirishlar:
    - “Kamaytirish” bandi parallel aylanishlarda summalar yoki mahsulotlar kabi qisqartirishlarni samarali bajarish uchun ishlatiladi.
    10. Xato bilan ishlash:
    - OpenMP `omp_set_num_threads()` funksiyasi kabi xatolarni qayta ishlash mexanizmlarini taqdim etadi.
    11. Tuzish va bajarish:
    - OpenMP-ni yoqish uchun manba kodi odatda ma'lum bir bayroqdan (masalan, GCC uchun `-fopenmp`) foydalanib, OpenMP-ni qo'llab-quvvatlaydigan kompilyator bilan kompilyatsiya qilinadi.
    - Keyin kompilyatsiya qilingan dastur ko'p yadroli mashinada bajarilishi mumkin.
    12. Hujjatlar va manbalar:
    - OpenMP spetsifikatsiyalari API tafsilotlarini hujjatlashtiradi va chuqur ma'lumot uchun ularga murojaat qilish mumkin.
    13. Tuzuvchini qo‘llab-quvvatlash:
    - Turli kompilyatorlar OpenMP-ni qo'llab-quvvatlash va qo'shimcha funktsiyalarda o'zgarishlarga ega bo'lishi mumkin. Muayyan kompilyatoringiz uchun hujjatlar bilan maslahatlashing.
    Ushbu komponentlarning birgalikda ishlashini tushunish ishlab chiquvchilarga OpenMP yordamida parallel kod yozish imkonini beradi, bu esa unumdorlikni oshirish uchun ko'p yadroli arxitekturalardan foydalanishni osonlashtiradi. OpenMP-ni o'zlashtirish va kodni samarali parallellashtirish uchun tajriba va amaliyot juda muhimdir.
    Amaliy qism
    OpenMP kutubxonasini sozlash
    OpenMP kutubxonasini Visual Studio 2012 muhitiga sozlash uchun quyidagi
    ketma-ketliklarni amalga oshiramiz:
    1-qadam. Visual Studio 2012 muhitida yangi project yaratib olamiz va uni
    OpenMP.cpp kengaytmada nomlaymiz (1.2-rasm).

    1.2-rasm Yangi .cpp proyekt yaratib olish


    2-qadam. Yaratgan OpenMP.cpp projectimizni xususiyatlari (properties)ga
    kirib uning xususiyatlarini o‘zgartiramiz (1.3-rasm).



    1.3-rasm Yaratilgan OpenMP.cpp faylini 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 yuklashini tasdiqlash belgilash


    OpenMP paketini Visual Studio muhitiga samarali o‘rnatilganiga ishonch
    hosil qilish uchun quyidagi kodni amalga oshiramiz, va natija (1.5-rasm) ni
    ko‘ramiz:
    #include "stdafx.h"
    #include
    #include
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    #pragma omp parallel
    {
    // parallel mintaqa
    cout<<"Tuit kif 210-21 "<system("pause");
    return 0;
    }

    1.5-rasm OpenMP paketi yordamida yaratilgan “Tuit kif 23” so’zini har bir oqimlarga yuklash
    // OpenMP.cpp : Defines the entry point for the console application.
    //
    #include "stdafx.h"
    #include
    #include
    using namespace std;
    #define THREAD_NUM 4
    int main()
    {
    // “parallel” blokdagi thredlar sonini belgilash
    omp_set_num_threads(THREAD_NUM);
    #pragma omp parallel
    {
    cout<<"Thredlar soni: "<<cout<<"Thred raqami: "<"\n"; // Joriy holatdagi thred raqami
    cout << "Tuit kif 23
    " << "\n"; // har bir oqimda bajarish
    system("pause");
    }
    return 0;
    }

    1.7-rasm OpenMP paketi yordamida oqimlarni boshqarish

    OpenMP paketi orqali biz parallel ishlovni amalga oshiramiz va berilgan vazifani sezilarli darajada tezlasshtiradi. Hozirgi misolda jarayonga qancha vaqt talab etilganini ko’rishimiz mumkin:


    // OpenMP.cpp


    // OpenMP da parallel mintaqasiz ishlash
    #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();
    int *arr = new int[ARRAY_SIZE];
    std::fill_n(arr, ARRAY_SIZE, ARRAY_VALUE);
    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;
    return 0;
    }

    1.8-rasm Parallel ishlov berish orqali olingan natija

    Biz massivlar ustida hisob-kitoblarni parallel ishlash jarayoni qancha vaqt talab etganligini ko’rdik.


    // OpenMP.cpp


    #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(4);
    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;
    return 0;
    }



    1.9-rasm Parallel ishlov berishda oqimlar sonini bergan holdagi holat

    Yuqorida keltirilgan natijalarga ko‘rib turgamnimizdek, OpenMP C/C++ da


    multi-threading(ko‘p-oqimlar)dan foydalanish bizga ko‘p vaqtni tejash imkonini
    beradi.


    Xulosa
    Men bu amaliy ishni bajarish davomida OpenMP paket tarkibining ishlashini o’rganib chiqdim .Visual studio orqali OpenMP yordamida berilgan vazifani CPU parallel holatda ishlov olib boorish natijasida vaqtdan samaraliekanligini ko’rib chiqdim.


    Foydalanilgan adabiyotlar



    1. https://online.pubhtml5.com/ahqm/lhve/#p=1

    2. chatgpt.com

    Download 1,31 Mb.




    Download 1,31 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Kompyuter injiniringi 210-21 guruh talabasi

    Download 1,31 Mb.