Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti




Download 143,49 Kb.
bet7/13
Sana25.05.2024
Hajmi143,49 Kb.
#253828
1   2   3   4   5   6   7   8   9   10   ...   13
Bog'liq
1-amaliy ish

Ogohlantirish
Ushbu misol ning asosiy ishlatilishini ko'rsatadi parallel_transform. Ishchi funktsiyasi oz miqdordagi ishni bajarganligi sababli, bu misolda sezilarli samaradorlik kutilmaydi.
Algoritmda parallel_transformikkita ortiqcha yuk mavjud. Birinchi ortiqcha yuk bitta kirish diapazoni va unar funksiyani qabul qiladi. Birlik funksiya bitta argumentni, funksiya ob'ektini yoki dan olingan turni oladigan lambda ifodasi bo'lishi mumkin unary_function. Ikkinchi ortiqcha yuk ikkita kirish diapazonini va ikkilik funktsiyani qabul qiladi. Ikkilik funktsiya ikkita argumentni, funktsiya ob'ektini yoki std::binary_function dan olingan turni oladigan lambda ifodasi bo'lishi mumkin . Quyidagi misol bu farqlarni ko'rsatadi.
C++Nusxalash
//
// Demonstrate use of parallel_transform together with a unary function.


// This example uses a lambda expression.
parallel_transform(begin(values), end(values),
begin(results), [](int n) {
return -n;
});


// Alternatively, use the negate class:
parallel_transform(begin(values), end(values),
begin(results), negate());


//
// Demonstrate use of parallel_transform together with a binary function.


// This example uses a lambda expression.
parallel_transform(begin(values), end(values), begin(results),
begin(results), [](int n, int m) {
return n * m;
});


// Alternatively, use the multiplies class:
parallel_transform(begin(values), end(values), begin(results),
begin(results), multiplies());
Muhim!
Algoritmning chiqishi uchun taqdim etilgan iterator parallel_transformkirish iteratoriga to'liq mos kelishi yoki umuman bo'lmasligi kerak. Agar kirish va chiqish iteratorlari qisman bir-biriga mos kelsa, bu algoritmning xatti-harakati aniqlanmagan bo'ladi.

parallel_reduce algoritmi


parallel_reduceAssotsiativlik xususiyatiga ega bo'lgan operatsiyalar ketma-ketligi mavjud bo'lsa, algoritm samarali hisoblanadi. (Ushbu algoritm kommutativ xususiyatni talab qilmaydi.) Quyida yordamida amalga oshirilishi mumkin boʻlgan baʼzi amallar keltirilgan parallel_reduce:

  • matritsani olish uchun matritsalar ketma-ketligini ko'paytirish;

  • vektorni olish uchun vektorni matritsalar ketma-ketligiga ko'paytirish;

  • satrlar ketma-ketligi uzunligini hisoblash;

  • satrlar kabi elementlar ro'yxatini bitta elementga birlashtirish.

parallel_reduceQuyidagi asosiy misolda satrlar ketma-ketligini bitta satrga birlashtirish uchun algoritmdan foydalanish ko'rsatilgan . Misollarida bo'lgani kabi parallel_transform, bu asosiy misolda unumdorlikni oshirish kutilmaydi.
C++Nusxalash
// basic-parallel-reduce.cpp
// compile with: /EHsc
#include

#include
#include
#include


using namespace concurrency;
using namespace std;


int wmain()
{
// Create a vector of strings.
vector words{
L"Lorem ",
L"ipsum ",
L"dolor ",
L"sit ",
L"amet, ",
L"consectetur ",
L"adipiscing ",
L"elit."};

// Reduce the vector to one string in parallel.
wcout << parallel_reduce(begin(words), end(words), wstring()) << endl;
}


/* Output:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
*/
parallel_reduceKo'pgina hollarda, u algoritmni concurrency::combinableparallel_for_each sinf bilan birgalikda ishlatish uchun yorliq sifatida ko'rish mumkin .

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




Download 143,49 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti

Download 143,49 Kb.