PPL quyidagi xususiyatlarni taqdim etadi:
* Vazifa parallelizmi: Bir nechta ish elementini (vazifalarini) parallel ravishda
bajarishni Windows ThreadPool ustida ishlatadigan mexanizmni yaratish;
* Parallel algoritmlar: Parallel algorintmlarni generatsiya qilish, parallel ravishda ishlash uchun o'zaro bir vaqtda ishlaydigan umumiy algoritmlarni
yaratish.
* Parallel konteynerlar va ob’yektlar: Maxsus konteynerlar va maxsus obyektlar ustida parallel algoritmlar asosida ishlov berish
Parallel Patterns Library (PPL) bir vaqtning o'zida ma'lumotlarni to'plash bo'yicha ishlarni amalga oshiradigan algoritmlarni taqdim etadi. Ushbu algoritmlar C ++ standart kutubxonasi tomonidan taqdim etilganlarga o'xshaydi. Parallel algoritmlar Concurrency Runtime da mavjud funktsiyalardan iborat. Bularga misol qilib quyida parallel_for va parallel_for_each algorimlarini ko’rib chiqamiz.
Parallel_for algoritmi. Parallel_for algoritmi parallel ravishda bir xil vazifani bajaradi. Ushbu vazifalarning har biri iteratsiya qiymati bilan parametrlangan. Ushbu algoritm sizga iteratsiyalari o'rtasida resurslarni taqsimlamaydigan masalalarni parallel yechishda yordam beradi. Parallel_for algoritmi parallel bajarish uchun optimal tarzda ishlaydi.
Parallel_for algoritmi ichki parallelizmni ham qo'llab-quvvatlaydi. Ya’ni har bir itaratsiyada parallel bajaraliadigan bir nechta masalalarni bajarishimiz mumkin.
Ichki iteratsiyalar oxirida olingan natijalar yuqorida turgan iteratsiya bajariladigan
vazifaga natijalarni uzatadi.
Parallel_for algoritmining bir nechta parametrlari mavjud. Birinchi
parametrlari boshlang'ich qiymatini, yakuniy qiymatini va ish funktsiyasini
(lambda ifodasi, funktsiya obyekti yoki funktsiyani ko'rsatuvchi) oladi.
Parallel_for algoritmi o'zboshimchalik bilan bekor qilish shartlarini qo'llab-quvvatlamaydi. Parallel_for algoritmi iteratsiya o'zgaruvchining joriy qiymati
oxirgi qiymatdan pastroq bo'lganda to'xtaydi. Ya’ni barcha iteratsiyalar to’liq
bajariladi. Sikl iteratsiyasi oldinga qarab bo'lishi kerak. Parallel_for algoritmi stst
:: invalid_argument turidagi istisnolardan foydalanadi, agar _Step parametri 1 dan
kichik bo'lsa. PPL ko’p yadroli dasturlash uchun funktsiyalarni ta'minlovchi
mahalliy C ++ dasturchilari tomonidan ishlab chiqilgan Microsoft kutubxonasi. U
Visual Studio ning 2010-yilgi dasturiga kiritilgan. C ++ standart kutubxonasiga
o'xshash va Visual Studio 2010 bilan tanishtirilgan C ++ 11 til funktsiyasi bilan
ishlaydi.
Quyidagi misolda esa parallel_for algoritmining asosiy tuzilishi
ko'rsatilgan. Ushbu misol konsolga parallel ravishda [1, 5] oralig'idagi har bir
qiymatni yozishga imkon beradi.
1-rasm. parallel_for operatordan foydalanish
#include
#include
#include
#include
using namespace concurrency;
using namespace std;
int wmain()
{
parallel_for(1, 6, [](int value) {
wstringstream ss;
ss << value << L' ';
wcout << ss.str();
};
}
Parallel_for_each algoritmi. Bir vaqtning o'zida parallel_for_each algoritmi parallel ravishda C ++ standart kutubxonasi tomonidan taqdim etilgan kabi, iterativ konteynerda vazifalarni bajaradi. Bu parallel_for algoritmidan foydalanadigan bir xil mantiqdan foydalanadi. Parallel_for_each algoritmi C ++ standart kutubxonasi std :: for_each algoritmiga o'xshaydi, faqat parallel_for_each algoritmi vazifalarni bir vaqtning o'zida bajaradi. Boshqa parallel algoritmlar singari, parallel_for_each vazifalarni muayyan tartibda bajarmaydi.
Parallel_for_each algoritmida asosan maxsus obyektlar , konteyner elematlari
ustida parallel amallarni bajarishda qulay vosita hisoblanadi va iteratsiyalar
tasodifiy genaratsiya qilinadi.
Misol
Quyidagi misolda parallel_for_each algoritmining asosiy tuzilishi ko'rsatilgan.
Ushbu misol, konsolda std :: array ob'ektidagi har bir qiymatni parallel ravishda
yozishga undadi.
2-rasm. parallel_for_each operatordan foydalanish
#include
#include
#include
#include
using namespace Concurrency;
using namespace std;
int wmain()
{
array values = { 1, 2, 3, 4, 5 };
parallel_for_each(begin(values), end(values), [](int value) {
wstringstream ss;
ss << value << L' ';
wcout << ss.str();
});
}
Do'stlaringiz bilan baham: |