Практическая работа №3 изучение структуры и работы пакета openmp


Download 313.39 Kb.
bet6/11
Sana15.06.2023
Hajmi313.39 Kb.
#1478649
TuriПрактическая работа
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
Практика 3 сиртқи

Задание 3: Напишите программу, в которой создается 4 нити, и каждая нить выводит на экран свой номер и общее количество нитей в параллельной области в формате:
I am <Номер нити> thread from <Количество нитей> threads!
Указания к заданию 3
1. Создайте консольное приложение в среде Visual Studio с поддержкой OpenMP (см. указания к заданию 1).
2. В функции main создайте параллельную область c 4-я нитями.
3. Для получения номера нити внутри параллельной области необходимо вызвать OpenMP-функцию omp_get_thread_num(). Для получения значения количества нитей внутри
параллельной области необходимо вызвать OpenMP-функцию omp_get_num_threads().
В параллельную область вставьте код для вывода на экран строки:
printf("I am %d thread from %d threads!\n",
omp_get_thread_num(), //Номер нити в параллельной области
omp_get_num_threads() //Количество нитей в параллельной области
);


Задание 4: Изучите конструкции для управления работой с данными shared и private.
Напишите программу, в которой создается 10 нитей, и каждая нить выводит на экран свой номер через переменную rank следующим образом:
rank = omp_get_thread_num();
printf("I am %d thread.\n", rank);
Определите, общей или частной должна быть переменная rank.
Указания к заданию 1
1. Создайте консольное приложение в среде Visual Studio с поддержкой OpenMP (см. указания к заданию 1 лабораторной работы №1).
2. В функции main создайте параллельную область c 10-ю нитями. Вставьте следующий код:
rank = omp_get_thread_num();
printf("I am %d thread.\n", rank);
3. Определите переменную rank как общую. Для этого достаточно объявить переменную rank до начала параллельной области. Скомпилируйте и запустите ваше приложение.
Верный ли результат выдает программа?
4. Добавьте в параллельную область код, имитирующий длительные вычисления, следующим образом:
rank = omp_get_thread_num();
for(i=0; i<100000; i++) x=x/2; // Имитация длительных вычислений
printf("I am %d thread.\n", rank);
Скомпилируйте и запустите ваше приложение. Верный ли результат выдает программа?
5. Переопределите переменную rank как частную. Для этого добавьте к директиве parallel
параметр private(), в круглые скобки поместите переменную rank:
#pragma omp parallel private(rank)
Скомпилируйте и запустите ваше приложение. Объясните все полученные выше результаты.


Задание 5: Напишите программу, в которой две нити параллельно вычисляют сумму чисел от 1 до N. Распределите работу по нитям с помощью оператора if языка С. Для сложения результатов вычисления нитей воспользуйтесь OpenMP-параметром reduction.

Download 313.39 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling