|
Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti
|
bet | 4/13 | Sana | 25.05.2024 | Hajmi | 143,49 Kb. | | #253828 |
Bog'liq 1-amaliy ish
Parallelizm algoritmi bir xil vazifani parallel ravishda qayta-qayta bajaradi. Ushbu vazifalarning har biri iteratsiya qiymati bilan parametrlangan. Ushbu algoritm, agar sizda ushbu tsiklning takrorlanishi orasida resurslarni iste'mol qilmaydigan tsikl matni bo'lsa foydali bo'ladi.
parallel_forAlgoritmning vazifalari parallel bajarish uchun optimal tarzda bo'lingan. Balanssiz yuk bo'lsa, ushbu bo'limlarni taqsimlash uchun yuk uzatish va diapazonni uzatish algoritmidan foydalanadi. Bitta takrorlash tsikli birgalikda bloklanganda, ish vaqti joriy ipga tayinlangan iteratsiyalar oralig'ini boshqa iplar yoki protsessorlarga qayta taqsimlaydi. Xuddi shunday, ip iteratsiya diapazonini tugatgandan so'ng, ish vaqti boshqa ish zarrachalaridan ishni shu ipga qayta taqsimlaydi. Algoritm ichki parallelizmniparallel_for ham qo'llab-quvvatlaydi . Agar bitta parallel tsikl boshqa parallel tsiklni o'z ichiga olsa, ish vaqti pastadir jismlari o'rtasida samarali parallel tarzda resurslarni qayta ishlashni muvofiqlashtiradi.
Algoritmda parallel_forbir nechta haddan tashqari yuklangan versiyalar mavjud. Birinchi versiya boshlang'ich qiymatni, yakuniy qiymatni va ishchi funktsiyasini (lambda ifodasi, funktsiya ob'ekti yoki funktsiya ko'rsatkichi) oladi. Ikkinchi versiya boshlang'ich qiymatni, yakuniy qiymatni, qadam qiymatini va ish funktsiyasini oladi. Ushbu funktsiyaning birinchi versiyasi qadam qiymati sifatida 1 dan foydalanadi. Boshqa versiyalar algoritm parallel_fordiapazonlarni iplar o'rtasida qanday bo'lish kerakligini belgilashga imkon beruvchi ajratuvchi ob'ektlarni qabul qiladi. Bo'limlar ushbu hujjatning Ish bo'limida batafsil tavsiflangan .
Ko'p döngüler foydalanish uchun parallel_foraylantirilishi mumkin for. parallel_forBiroq, algoritm ko'rsatmalardan forquyidagi jihatlari bilan farq qiladi:
Algoritm parallel_forparallel_forvazifalarni oldindan belgilangan tartibda bajarmaydi.
Algoritm parallel_foro'zboshimchalik bilan tugatish shartlarini qo'llab-quvvatlamaydi. parallel_forAgar iteratsiya o'zgaruvchisining joriy qiymati dan kichik bo'lsa, algoritm to'xtaydi last.
Type parametri _Index_typebutun son turi bo'lishi kerak. Ushbu butun son turi imzolangan yoki imzosiz bo'lishi mumkin.
Loop iteratsiyasi yo'naltirilishi kerak. Agar argument 1 dan kichik bo'lsa, algoritm std::invalid_argumentparallel_for turidagi istisnoni chiqaradi ._Step
Algoritm uchun istisnolarni qayta ishlash mexanizmi parallel_foristisnolardan foydalanish mexanizmidan farq qiladi for. Agar parallel tsiklning tanasida bir vaqtning o'zida bir nechta istisnolar yuzaga kelsa, ish vaqti chaqirilgan ipga istisnolardan faqat bittasini tarqatadi parallel_for. Bundan tashqari, agar tsiklning bir iteratsiyasi istisno qilsa, ish vaqti umumiy tsiklni darhol to'xtatmaydi. Buning o'rniga, tsikl bekor qilingan holatda joylashtiriladi va ish vaqti hali bajarilmagan vazifalarni xaritada ko'rsatmaydi. Istisnolarni qayta ishlash va parallel algoritmlar haqida ko'proq ma'lumot olish uchun Istisnolarni qayta ishlash ga qarang.
parallel_forAlgoritm o'zboshimchalik bilan tugatish shartlarini qo'llab-quvvatlamasa ham, bekor qilish barcha vazifalarni to'xtatish uchun ishlatilishi mumkin. Bekor qilish haqida qo'shimcha ma'lumot olish uchun PPL dagi Bekor qilish bo'limiga qarang .
Quyidagi misol algoritmning asosiy tuzilishini ko'rsatadi parallel_for. Ushbu misol [1, 5] oralig'idagi har bir qiymatni konsolga parallel ravishda chop etadi.
C++Nusxalash
// parallel-for-structure.cpp
// compile with: /EHsc
#include
#include
#include
#include
using namespace concurrency;
using namespace std;
int wmain()
{
// Print each value from 1 to 5 in parallel.
parallel_for(1, 6, [](int value) {
wstringstream ss;
ss << value << L' ';
wcout << ss.str();
});
}
Ushbu misol quyidagi namunaviy chiqishni ishlab chiqaradi:
ChiqishNusxalash
1 2 4 3 5
Algoritm har bir elementda parallel ravishda ishlaganligi sababli, konsolda qiymatlarni chop etish tartibi boshqacha bo'ladi.
Algoritmdan qanday foydalanishning to'liq misoli uchun parallel_forqarang : Parallel_for Loop yaratish .
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti
|