Практическая работа №3 изучение структуры и работы пакета openmp
Download 313.39 Kb.
|
Практика 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling