Parallel_transform va parallel_reduce algoritmlari




Download 143,49 Kb.
bet6/13
Sana25.05.2024
Hajmi143,49 Kb.
#253828
1   2   3   4   5   6   7   8   9   ...   13
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());
}

Download 143,49 Kb.
1   2   3   4   5   6   7   8   9   ...   13




Download 143,49 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Parallel_transform va parallel_reduce algoritmlari

Download 143,49 Kb.