G‘afarov, A. F. Galimyanov parallel hisobiyotlar qo'llanma Qozon
Download 1.46 Mb.
|
ParVychGafGal (1)
[shart [,shart] ...] uchun #pragma omp
uchun tsikl bu erda shartlardan biri: xususiy (var1, var2, ...) umumiy (var1, var2, ...) firstprivate(var1, var2, ...) lastprivate (var1, var2, ...) qisqartirish (operator: var1, var2, ) buyurdi jadval (turi[, blok hajmi]) hozir agar (ifoda) parallel bo'limlar. Ba'zan parallel ravishda ehtiyoj bor tsiklning takrorlanishi bo'lmagan amallarni bajaring. Albatta bu maqsadlar uchun oddiy parallel direktivadan foydalaning, lekin keyin kerak o'rtasida turli ishlarni taqsimlash uchun qo'shimcha kod yozing oqimlar. Bu muammoni oddiyroq parallel yordamida hal qilish mumkin bo'limlar. #pragma omp parallel bo'limlar { #pragma omp bo'limi { printf("T%d: foo\n", omp_get_thread_num()); } #pragma omp bo'limi { printf("T%d: bar\n", omp_get_thread_num()); 126 Machine Translated by Google } }// omp bo'limlari Har bir bo'lim alohida ipda bajariladi, bu imkon beradi kod parchalanishini amalga oshirish. Sinxronizatsiya nuqtasi - bu oxir bo'limlar bloki . Asosiy ipni kutmaslik kerak bo'lganda boshqa mavzular nowait sharti yordamida tugatilishi kerak . C/C++ da Parallel Bo'limlar sintaksisi #pragma omp bo'limlari \ [shart [,shart...]] { #pragma omp bo'limi qurilish bloki [#pragma omp bo'limi qurilish bloki ...] } bu erda shartlardan biri: xususiy (var1, var2, ...) firstprivate(var1, var2, ...) lastprivate (var1, var2, ...) qisqartirish (operator: var1, var2, ) hozir yagona qurilish. Agar parallel bo'limda uni bajarish kerak bo'lsa har qanday harakat va ayni paytda bu harakat faqat bajarilishi kerak bitta ip (masalan, oraliq natijani hisoblash), keyin buning uchun yagona dizayn ideal . C/ C++ tilidagi sintaksis: #pragma omp yagona [shart [, shart ]] qurilish bloki 127 Machine Translated by Google bu erda shartlardan biri: xususiy (var1, var2, ...) firstprivate(var1, var2, ...) hozir Amalga oshirish shartlari (2). agar shart. Hisob-fakturalar bo'lgan hollarda urug'lanish iplarining narxi daromaddan kattaroq bo'lishi mumkin parallellashtirish, keyin siz if shartidan foydalanishingiz kerak. #pragma omp parallel { if (n>2000) uchun #pragma omp { for(i=0; i } } Yuqoridagi misolda, agar shunday bo'lsa, tsikl parallellashtiriladi 2000 dan ko'ra ko'proq sikl iteratsiyasi mavjud. Oxirgi shaxsiy holat. Bu holat shaxsiy holatga o'xshash ishlaydi bundan mustasno, o'zgaruvchining qiymati oxirgida hisoblangan tsiklning takrorlanishi saqlanadi. #pragma omp parallel { #pragma omp shaxsiy(i) lastprivate(k) uchun for(i=0; i<10; i++) k = i*i; } printf("k = %d\n", k); 128 Machine Translated by Google Tsikldan chiqishda k o'zgaruvchining qiymati 100 ga teng bo'ladi k o'zgaruvchisi shaxsiy deb e'lon qilindi, keyin esa chiqish paytida uning qiymati sikl aniqlanmagan bo'ladi. kamaytirish holati. Bu holat xavfsiz holatga keltiradi global hisoblash. Har bir ro'yxatga olingan o'zgaruvchining shaxsiy nusxasi ga muvofiq parallel bo'limga kirishda ishga tushiriladi belgilangan operator (+ operatori uchun 0). Parallel chiqishda qisman hisoblangan qiymatlardan bo'limlar, natijada va asosiy mavzuga o'tdi. #pragma omp parallel { #pragma uchun umumiy(x) xususiy(i) qisqartirish(+:sum) for(i=0; i<10000; i++) summa += x[i]; } #pragma omp parallel { #pragma umumiy(x) shaxsiy(i) qisqartirish(min:gsum) for(i=0; i<10000; i++) kommuna = min(kommuna, x[i]); } Quyidagi operatorlar va agregat funktsiyalar C/C++ da mavjud: +, -, *, &, ^, |, &&, ||, min, maks. jadval holati. Bu holat ish qanday bo'lishini nazorat qiladi iplar orasida taqsimlanadi. jadval (turi[, blok hajmi])Bu shart ish o'rtasida qanday taqsimlanishini nazorat qiladi oqimlar jadval (turi[, blok hajmi])129
Machine Translated by Google Blok o'lchami ip tomonidan qayta ishlanadigan har bir paketning hajmini belgilaydi. (iteratsiyalar soni). Jadval turi quyidagi qiymatlarni olishi mumkin: statik - takrorlashlar iplar orasida teng taqsimlanadi. Bular. agar 1000 ta takroriy va 4 ta ipdan iborat tsiklda, keyin bitta ip hamma narsani qayta ishlaydi iteratsiyalar 1 dan 250 gacha, ikkinchisi - 251 dan 500 gacha, uchinchisi - 501 dan 750 gacha, to'rtinchisi 751 dan 1000 gacha. Agar blok hajmi ham ko'rsatilgan bo'lsa, keyin ma'lum o'lchamdagi bloklar bo'yicha barcha iteratsiyalar tsiklik iplar orasida taqsimlanadi. Statik taqsimot iteratsiya vaqtlari teng bo'lganda samarali ishlaydi yoki taxminan teng. Agar bunday bo'lmasa, undan foydalanish oqilona ish taqsimotining keyingi turi. dinamik - ish ma'lum o'lchamdagi partiyalarda taqsimlanadi (ko'ra standart o'lcham - 1) iplar orasidagi. Nima bilanoq yoki iplardan ma'lumotlarning o'z qismini qayta ishlashni tugatadi, u keyingisini oladi. Shuni ta'kidlash kerakki, bu yondashuv bilan biroz balandroq, lekin yaxshiroq iplar orasidagi yukni muvozanatlash. yo'naltirilgan - bu turdagi ishlarni taqsimlash shunga o'xshash oldingi, yuz blokdan tashqari hajmi o'zgartirildi qancha xom-ashyoga qarab dinamik ravishda iteratsiyalar qoldi. Blok hajmi asta-sekin kamayadi belgilangan qiymatga. Ushbu yondashuv bilan erishish mumkin kam qo'shimcha xarajatlar bilan yaxshi muvozanat. Download 1.46 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling