|
Parallel_transform va parallel_reduce algoritmlari
|
bet | 6/13 | Sana | 25.05.2024 | Hajmi | 143,49 Kb. | | #253828 |
Bog'liq 1-amaliy ish Parallel_transform va parallel_reduce algoritmlari
Concurrency::p arallel_transform va concurrency::p arallel_reduce algoritmlari mos ravishda C++ Standard Library std::transform va std::accumulate algoritmlarining parallel versiyalaridir . Bir vaqtning o'zida ishlash vaqtining versiyalari C++ standart kutubxonasi versiyalari kabi ishlaydi, faqat parallel ravishda bajarilganligi sababli ishlash tartibi aniqlanmagan. Parallel ishlov berishda unumdorlik va miqyoslilik afzalliklarini ta'minlash uchun etarlicha katta bo'lgan to'plam bilan ishlashda ushbu algoritmlardan foydalaning.
Muhim!
parallel_transformva algoritmlari parallel_reducefaqat tasodifiy kirish iteratorlarini, ikki yo'nalishli iteratorlarni va to'g'ridan-to'g'ri iteratorlarni qo'llab-quvvatlaydi, chunki bu iteratorlar barqaror xotira manzillarini yaratadi. Bundan tashqari, bu iteratorlar dan boshqa l-qiymatlarni ishlab chiqarishi kerak const.
parallel_transform algoritmi
Algoritm parallel transformko'plab ma'lumotlarni parallellashtirish operatsiyalarini bajarish uchun ishlatilishi mumkin. Masalan, quyidagi variantlar mavjud:
Tasvir yorqinligini va boshqa tasvirni qayta ishlash operatsiyalarini sozlash.
Ikki vektorning nuqta mahsulotini qo'shing yoki bajaring va boshqa vektor hisoblarini bajaring.
3D nurlarni kuzatish, bunda har bir iteratsiya ko'rsatilishi kerak bo'lgan bitta pikselga ishora qiladi.
Quyidagi misol algoritmni chaqirish uchun ishlatiladigan asosiy tuzilmani ko'rsatadi parallel_transform. Ushbu misol std:: vektor ob'ektining har bir elementini ikki usulda inkor etadi. Birinchi usul lambda ifodasidan foydalanadi. Ikkinchi usul std ::unary_function dan kelib chiqqan std ::negate dan foydalanadi .
C++Nusxalash
// basic-parallel-transform.cpp
// compile with: /EHsc
#include
#include
using namespace concurrency;
using namespace std;
int wmain()
{
// Create a large vector that contains random integer data.
vector values(1250000);
generate(begin(values), end(values), mt19937(42));
// Create a vector to hold the results.
// Depending on your requirements, you can also transform the
// vector in-place.
vector results(values.size());
// Negate each element in parallel.
parallel_transform(begin(values), end(values), begin(results), [](int n) {
return -n;
});
// Alternatively, use the negate class to perform the operation.
parallel_transform(begin(values), end(values), begin(values), negate());
}
|
| |