int omp_get_num_threads(void); 1-misol omp_get_num_threads() va omp_get_thread_num() funksiyalarining ishlashini koʻrsatadi. Tartib raqami 0 ga teng boʻlgan oqim hosil qilingan oqimlarning umumiy sonini, qolgan oqimlar esa oʻz tartib raqamini chop etadi.
#include
#include int main(int argc, char *argv[]) { int count, num; #pragma omp parallel { count=omp_get_num_threads();
num=omp_get_thread_num();
if (num == 0) printf("Jami oqimlar: %d\n", count); else printf("oqim raqami %d\n", num);
} } omp_get_thread_num() va omp_get_num_threads() funksiyalaridan foydalanish har bir oqimga bajarilishi uchun oʻziga xos kod qismini belgilash va shu bilan MPI texnologiyasi uslubida ishni oqimlar oʻrtasida taqsimlash imkonini beradi. Biroq, OpenMPda ushbu dasturlash uslubidan foydalanish har doim ham oqlanmaydi - bu holda dasturchi umumiy ma’lumotlarga kirishni sinxronlashtirishni aniq tashkil qilishi kerak. OpenMPda ishni taqsimlashning boshqa usullari ushbu ishning koʻp qismini avtomatik ravishda ta’minlaydi.
Parallel sikllar.Agar parallel sohada sikl operatori uchrasa, u holda umumiy qoidaga koʻra, u joriy guruhning barcha oqimlari tomonidan bajariladi, ya’ni har bir oqim bu siklning barcha takrorlanishini bajaradi. Sikl iteratsiyalarini turli oqimlar oʻrtasida taqsimlash uchun for direktivasidan foydalanish mumkin for (do... [end do]).
C:
#pragma omp for [opsiya [[,] opsiya]...]
Ushbu koʻrsatma ushbu direktivadan keyingi blokga tegishli boʻlib, u for (do) tarkibidagi operatorlarni oʻz ichiga oladi.
Mumkin boʻlgan opsiyalar:
Private (roʻyxat) - har bir oqimda lokal nusxa hosil qilinadigan oʻzgaruvchilar roʻyxatini belgilaydi; roʻyxatdagi oʻzgaruvchilarning lokal nusxalarining boshlangʻich qiymati aniqlanmagan;
firstprivate (roʻyxat) - har bir oqimda lokal nusxa yaratiladigan oʻzgaruvchilar roʻyxatini belgilaydi; oʻzgaruvchilarning lokal nusxalari ushbu oʻzgaruvchilarning qiymatlari bilan asosiy oqimda ishga tushiriladi;
lastprivate (roʻyxat) - roʻyxatda keltirilgan oʻzgaruvchilarga tsiklning oxirgi iteratsiyasidan olingan natija beriladi;
reduction (operator: roʻyxat) - operator va umumiy oʻzgaruvchilar roʻyxatini belgilaydi; har bir ish oqimidagi har bir oʻzgaruvchi uchun lokal nusxalar yaratiladi; lokal nusxalar operator turiga koʻra ishga tushiriladi (qoʻshimcha operatsiyalar uchun - 0 yoki uning analoglari, multiplikativ operatsiyalar uchun - 1 yoki uning analoglari); berilgan bayonot siklning barcha takrorlashlari tugallangandan soʻng oʻzgaruvchilarning lokal nusxalarida bajariladi; operatori: C tili uchun - +, *, -, &, |, ^, &&, || operatorlarning bajarilish tartibi aniqlanmagan, shuning uchun natija ishga tushirishdan farq qilishi mumkin;
collapse(n) - bu parametr n ta ketma-ket bir-biriga yaqin joylashgan sikllar ushbu direktiva bilan bogʻlanganligini bildiradi; sikllar uchun oqimlar oʻrtasida boʻlingan umumiy iteratsiya maydoni hosil boʻladi; agar collapse opsiyasi koʻrsatilmagan boʻlsa, u holda direktiv faqat darhol keyingi sikl uchun amal qiladi;