|
Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti
|
bet | 5/13 | Sana | 25.05.2024 | Hajmi | 143,49 Kb. | | #253828 |
Bog'liq 1-amaliy ishBu sahifa navigatsiya:
- Misol
Parallellik algoritmi ::p arallel_for_each C++ standart kutubxonasi kabi iterativ konteynerdagi vazifalarni parallel ravishda bajaradi. parallel_forAlgoritm bilan bir xil bo'lish mantig'idan foydalanadi .
Algoritm C++ standart kutubxonasi algoritmiga std::for_each gaparallel_for_each o'xshaydi , bundan tashqari algoritm vazifalarni bir vaqtda bajaradi. Boshqa parallel algoritmlar singari, ular ham muayyan tartibda vazifalarni bajarmaydi.parallel_for_eachparallel_for_each
parallel_for_eachAlgoritm oldingi iteratorlarda ham, tasodifiy kirish iteratorlarida ham ishlayotgan bo'lsa-da, u tasodifiy kirish iteratorlarida yaxshiroq ishlaydi.
Misol
Quyidagi misol algoritmning asosiy tuzilishini ko'rsatadi parallel_for_each. Ushbu misol konsol qiymatlarining har birini std::array obyektida parallel ravishda chop etadi .
C++Nusxalash
// parallel-for-each-structure.cpp
// compile with: /EHsc
#include
#include
#include
#include
using namespace concurrency;
using namespace std;
int wmain()
{
// Create an array of integer values.
array values = { 1, 2, 3, 4, 5 };
// Print each value in the array in parallel.
parallel_for_each(begin(values), end(values), [](int value) {
wstringstream ss;
ss << value << L' ';
wcout << ss.str();
});
}
/* Sample output:
5 4 3 1 2
*/
Ushbu misol quyidagi namunaviy chiqishni ishlab chiqaradi:
Chiqish Nusxalash
4 5 1 2 3
parallel_for_eachAlgoritm har bir elementda parallel ravishda ishlaganligi sababli, konsolda qiymatlarni chop etish tartibi boshqacha bo'ladi.
Algoritmdan qanday foydalanishning to'liq misoli uchun parallel_for_eachqarang : Qanday qilib: parallel_for_each Loop yaratish.
Parallellik algoritmi::p arallel_invoke bir qator vazifalarni parallel ravishda bajaradi. Har bir vazifa bajarilmaguncha qaytib kelmaydi. Ushbu algoritm bir vaqtning o'zida bajarilishi kerak bo'lgan bir nechta mustaqil vazifalar mavjud bo'lganda foydalidir.
Algoritm parallel_invokebir qator ishchi funktsiyalarni (lambda funktsiyalari, funktsiya ob'ektlari yoki funktsiya ko'rsatkichlari) parametr sifatida oladi. parallel_invokeIkki va o'nta parametrlarni qabul qilish uchun algoritm haddan tashqari yuklangan. O'tkazilgan har bir funktsiya parallel_invokenull parametrlarni qabul qilishi kerak.
Boshqa parallel algoritmlar singari, parallel_invokeular ham muayyan tartibda vazifalarni bajarmaydi. Vazifalar parallelligi bo'limi parallel_invokealgoritmning vazifalar va vazifa guruhlari bilan qanday bog'liqligini tushuntiradi .
Misol
Quyidagi misol algoritmning asosiy tuzilishini ko'rsatadi parallel_invoke. Ushbu misol parallel ravishda uchta mahalliy o'zgaruvchidagi funktsiyani chaqiradi twiceva natijani konsolga chop etadi.
C++Nusxalash
// parallel-invoke-structure.cpp
// compile with: /EHsc
#include
#include
#include
using namespace concurrency;
using namespace std;
// Returns the result of adding a value to itself.
template
T twice(const T& t) {
return t + t;
}
int wmain()
{
// Define several values.
int n = 54;
double d = 5.6;
wstring s = L"Hello";
// Call the twice function on each value concurrently.
parallel_invoke(
[&n] { n = twice(n); },
[&d] { d = twice(d); },
[&s] { s = twice(s); }
);
// Print the values to the console.
wcout << n << L' ' << d << L' ' << s << endl;
}
Misol quyidagi natijani beradi.
Chiqish Nusxalash
108 11.2 HelloHello
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
Raqamli texnologiyalar vazirligi muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari universiteti qarshi filiali “kompyuter injiniringi” fakulteti
|