11-ma’ruza. OpenMP dasturiy texnologiyasi 11.1. Asosiy tushunchalar. Dasturni kompilyatsiya qilish
OpenMP mexanizmlaridan foydalanish uchun dasturni tegishli kalitni koʻrsatgan holda OpenMP-ni qoʻllab-quvvatlaydigan kompilyator bilan kompilyatsiya qilishingiz kerak (masalan, -openmp kompilyator kaliti icc/ifort, gcc da ishlatiladi.
Kompilyator OpenMP direktivalarini sharhlaydi va parallel kod ishlab chiqaradi. OpenMP-ni qoʻllab-quvvatlamaydigan kompilyatorlardan foydalanilganda, OpenMP direktivalari qoʻshimcha xabarlarsiz e’tiborga olinmaydi.
OpenMP-ni qoʻllab-quvvatlaydigan kompilyator dasturning parallel versiyasiga xos boʻlgan alohida bloklarni shartli ravishda kompilyatsiya qilish uchun ishlatilishi mumkin boʻlgan _OPENMP makrosini belgilaydi. Ushbu makros yyyymm formatida aniqlanadi, bu erda yyyy va mm qoʻllab-quvvatlanadigan OpenMP standarti qabul qilingan yil va oy raqamlari. Masalan, OpenMP 3.0 standartini qoʻllab-quvvatlovchi kompilyator 200805 da _OPENMP ni belgilaydi.
Kompilyator OpenMP ning istalgan versiyasini qoʻllab-quvvatlashini tekshirish uchun #ifdef yoki #ifndef shartli kompilyatsiya direktivalarini yozish kifoya. C shartli kompilyatsiya qilishning eng oddiy misollari quyida keltirilgan.
1-misol. C tilida shartli kompilyatsiya
#include
int main(){
#ifdef _OPENMP
printf("OpenMP is supported!\n");
#endif
}
Parallel dastur modeli. OpenMP da parallellashtirish dastur matniga maxsus direktivlarni kiritish, shuningdek, yordamchi funksiyalarni chaqirish orqali aniq amalga oshiriladi. OpenMP dan foydalanganda parallel dasturlashning SPMD modeli qabul qilinadi, uning doirasida barcha parallel oqimlar uchun bir xil kod ishlatiladi.
Dastur ketma-ket maydondan boshlanadi - birinchi navbatda, bitta jarayon (oqim) ishlaydi, parallel maydonga kirishda ma’lum miqdordagi jarayonlar paydo boʻladi, ular orasida kodning qismlari keyinchalik taqsimlanadi. Parallel soha tugallangandan soʻng, bittadan (master) boshqa barcha oqimlar tugatiladi va ketma-ket soha boshlanadi. Dastur istalgan miqdordagi parallel va ketma-ket sohalarga ega boʻlishi mumkin. Bundan tashqari, parallel sohalar ham bir-birining ichiga joylashtirilishi mumkin.
Samarali parallel dasturni yozish uchun dasturni qayta ishlashga jalb qilingan barcha oqimlar foydali ish bilan bir xil yuklangan boʻlishi kerak. Bunga turli xil OpenMP mexanizmlari moʻljallangan, yuklanishni ehtiyotkorlik bilan muvozanatlash orqali erishiladi.
Muhim nuqta, shuningdek, umumiy ma’lumotlarga kirishni sinxronlashtirish zarurati. Bir nechta oqimlar uchun umumiy ma’lumotlarning mavjudligi bir vaqtning oʻzida mos kelmaydigan kirish bilan ziddiyatlarga olib keladi. Shu sababli, OpenMP funksiyasining muhim qismi ishlaydigan oqimlarni sinxronlashtirishning har xil turlarini amalga oshirish uchun moʻljallangan.
OpenMP bir xil fayllarga turli xil oqimlarning kirishini sinxronlashtirmaydi. Agar dasturning toʻgʻri ishlashi uchun zarur boʻlsa, foydalanuvchi sinxronizatsiya koʻrsatmalaridan yoki tegishli kutubxona funksiyalaridan aniq foydalanishi kerak. Har bir mavzu oʻz fayliga kirish uchun sinxronizatsiya talab qilinmaydi.
Do'stlaringiz bilan baham: |