Muhammad Al-Xorazmiy nomidagi
Toshkent axborot texnologiyalari universiteti
4-amaliy ish
Mavzu: Intel Threading Building Blocks(TBB) parallellashtirish kutubxonasi bilan tanishish va uning yordamida parallel dasturlar tuzush.
Talaba:Mengqobilov Mirzokarim
TATU - 2023
Ishni bajarishdan maqsad: Parallelashtirishning zamonaviy instrumental vositasi hisoblangan Intel TBB kutubxonasi imkoniyatlarini o'rganish va uning yordamida parallel dasturlar tuzush ko'nikmasini hosil qilish.
Intel Threading Building Blocks (TBB), parallel dasturlar yaratish va parallel ishlarni boshqarish uchun mo'ljallangan C++ kutubxonasi. Ushbu kutubxona, parallel dasturlarni yaratish, ishga tushirish va boshqarish jarayonlarini simplifikatsiyalash uchun qo'llaniladi. TBB, parallel dasturlash uchun qulay interfeyslar, xilma-xillikda joylashtirilgan parallel algoritm va malumot strukturasi hamda parallel ravishda ishlov beradigan ko'plab vositalar bilan ta'minlanadi.
Quyidagi asosiy komponentlardan foydalaniladi:
Parallel Algorithms: TBB, parallel algoritm va funksiyalarni taqdim etadi, masalan, parallel_for , parallel_reduce , parallel_scan , va boshqalar. Bu algoritm va funksiyalar, parallel ishlarini o'z ichiga olgan paytlarda ishga tushirish imkoniyatini beradi.
Concurrency-friendly Containers: TBB, barcha oddiy STL (Standard Template Library) konteynerlari, masalan, tbb::concurrent_vector , tbb::concurrent_queue , va boshqalar, bo'yicha parallel ishlashga mo'ljallangan o'zgartirishlar qo'shgan.
Task Scheduler: TBB, parallel ishlarini boshqarish uchun task scheduler (vazifalar tarqatgich) taqdim etadi. Bu schedulerga asosan, ishlar avtomatik ravishda parallel o'zlashtiriladi.
Quyidagi misol, TBB yordamida parallel ishlar tuzishni ko'rsatadi. Ushbu misolda, bir massivni boshqa massiv bilan parallel ravishda qo'shish operatsiyasini o'zlashtirilgan parallel_for orqali bajaramiz:
#Mengqobilov Mirzokarim
cppCopy code include include include void parallelSum(const std::vector& a, const std::vector& b, std::vector& result) { tbb::parallel_for(tbb::blocked_range(0, a.size()), [&](const tbb::blocked_range& r) { for (size_t i = r.begin(); i < r.end(); ++i) { result[i] = a[i] + b[i]; } } ); } int main() { std::vector a = {1, 2, 3, 4, 5}; std::vector b = {6, 7, 8, 9, 10}; std::vector result(a.size()); parallelSum(a, b, result); // Print the result std::cout << "Result: "; for (int num : result) { std::cout << num << " "; } std::cout << std::endl; return 0; }
Bu misolda, tbb::parallel_for orqali parallel ravishda ishlov bajariladi va massivlar qo'shiladi. tbb::blocked_range orqali parallel ishlar qancha chegarada bo'lishi kerakligini aniqlash uchun ishlatiladi.
Dostları ilə paylaş: |