OpenMP-da sinxronlash vositalari
OpenMP quyidagi sinxronizatsiya dizaynlarini taqdim etadi: tanqidiy-muhim bo'lim atomik-atomik operatsiya barrier-sinxronlash nuqtasi magistr bloki faqat asosiy oqimga aylanadi. Boshqa barcha oqimlar ushbu blokni o'tkazib yuboring. Blokning oxirida hech qanday aniq sinxronizatsiya yo'q. buyurtma – belgilangan tartibda blokni bajaring flush-ajratilgan o'zgaruvchining qiymatlarini xotiraga darhol tiklash. Muhim bo'lim Parallel blokda tanqidiy bo'limga ega bo'lish, har birida bo'lishini ta'minlaydi muayyan vaqt faqat bitta oqim bilan amalga oshiriladi. Boshqacha aytganda, qachon oqim juda muhim bo'limda, unga kirishga tayyor bo'lgan barcha boshqa oqimlar, ular to'xtatib qo'yilgan holatda. Muhim bo'limlar nomlar bilan ta'minlanishi mumkin. Shu bilan birga, tanqidiy bo'limlar faqat turli xil ishlatilsa mustaqil hisoblanadi ismlar. Odatiy bo'lib, barcha noma'lum tanqidiy bo'limlar bitta nomga ega.
C/C ustida sinopsis muhim qism
#pragma omp critical [(имя)]
Структурный блок
На Фортране
c$omp critical [(имя)]
Структурный блок
c$omp end critical
Пример (некорректное использование).
#pragma omp paralllel for private(i) shared(a,xmax)
for(i=0; iif(a[i]>xmax)
#pragma omp critical
xmax = a[i];
}// for
Har qanday dasturni optimallashtirish algoritmni tanlash bosqichida boshlanishi kerak to'g'ri tanlangan algoritm tufayli siz daromad olishingiz mumkin tartibda ishlash. Biroz kamroq mazmunli hissa dasturni optimallashtirish va parallelizatsiya. Joriy kurs doirasida OpenMP – dan foydalanish. Shuning uchun, oldin openmp bilan dasturni parallelizatsiya qilishdan ko'ra, unga erishish tavsiya etiladi izchil versiyasi maksimal ishlashi
Asosiy yondashuv
Umumiy sabablarga ko'ra natija quyidagi yondashuvni taklif qilishi mumkin:
● Kompilyator bilan avtomatik parallellashtirish foydalaning.
● Eng talabchan bo'lgan kodi qismlarini aniqlash uchun bir Profiler yordamida
protsessor vaqtiga.
● Eng muhim ko'chadan uchun OpenMP ko'rsatmalarni qo'shing.
● Agar bunday parallelizatsiya kutilgan ishlash o'sishiga olib kelmasa, unda
tekshirish amalga oshirish
● jarayoni avlod qiymati
● ko'chadan hajmi
● yuklash muvozanat
● birgalikda o'zgaruvchilar uchun ishoratlar soni
● haddan tashqari sinxronlash
● xotira kirish qiymati
Keling, ba'zi fikrlarni batafsil ko'rib chiqaylik.
Avtomatik sparalleliving
OpenMP-ni qo'llab-quvvatlaydigan ko'plab kompilyatorlar ishlab chiqarish imkonini beradi avtomatik parallelizatsiya dasturlari. Bunday holda, parallelliklar faqat bo'lishi mumkin ko'chadan, qaysi derleyici iterations uchun qaram topilmadi. Kodni tahlil qilish derleyici o'zi OpenMP direktivasini dasturga kiritadi. Muvaffaqiyatli bo'lsa, foydalanuvchi agar tsikl parallel bo'lsa, unda nima uchun xabar qilinadi.
$> icc -parallel -par_report3 text.c
test.c(61) : (col. 5) remark: LOOP WAS AUTO-PARALLELIZED.
parallel loop: line 61
shared: {"A", "B"}
private: {"i", "j"}
first private: { }
reductions: { }
procedure: chk_bk
serial loop: line 74: not a parallel candidate due to insufficent work
serial loop: line 82: not a parallel candidate due to insufficent work
serial loop: line 66
anti data dependence assumed from line 68 to line 68, due to "B"
Bu erda Intel kompilyatori uchun kalit-parallel bajarish kerakligini ko'rsatadi avtomatik parallellashtirish, kalit-par_report sizga kerak parallelizatsiya haqida hisobot berish. Kalit oxirida raqam hisobot darajasidir. Ba'zan derleyici tsikldagi ma'lumotlarga bog'liqlikni o'z ichiga olishi mumkin, bu albatta, yo'q, va natijada, uning parallelizatsiyasidan voz kechish. Bunday hollarda derleyici, bu yineleme jarayonida mustaqil ekanligini ko'rsatib, yordam berishi mumkin.
Xulosa:
Men bu ishni qilish davomida OpenMP texnologiyasi haqida batafsil ma’lumotlarga ega bo’ldim. Bundan tashqari superskalyar tizimlarida ijro uchun ko'rsatma berish to'g'risida qaror juda ko'p resurslarni talab qiladigan protsessor yadrosining o'zi tomonidan qabul qilinishini o’rgandim. Keyinchalik Elbrus-3 va Itanium kabi tizimlarda stat rejalashtirish qo'llanila boshlagan , ya'ni kompilyator qaysi ko'rsatmalarni bir vaqtning o'zida bajarilishini hal qiladigan bo’lgan; kompilyator mustaqil ko'rsatmalarni topadi va ularni bitta uzun yo'riqnomaga birlashtiradi (VLIW arxitekturasi).
Zamonaviy protsessorlarda ko'proq tugun mavjud. Masalan, PowerPC 970 protsessorida to'rtta ALU, ikkita FPU va ikkita SIMD tugun mavjud. Agar tugun identifikatori o'z ishiga dosh berolmasa (barcha tugunlarni ish bilan yuklamasa), superskalyar protsessorining ishlashi skaler protsessorning ishlashidan yaxshiroq bo'lmaydi.
Do'stlaringiz bilan baham: |