Giter Club home page Giter Club logo

omp_tasks's Introduction

OMP_tasks

Задачи по OMP

  1. Написать программу где каждый поток печатает свой идентификатор, количество потоков всего и строчку «Hello World». Запустить программу с 8 потоками.

  2. Написать программу, в которой определить две параллельные области, выполнение которых зависит от условного оператора #pragma omp parallel if(…), если заданное значение числа нитей больше 2, область выполняется параллельно, иначе не параллельно. Число нитей перед первой областью задать равным 3, перед второй – равным 2. Внутри параллельных областей определить количество нитей и номер каждой нити, результат выдать на экран. Убедиться в правильности работы программы.

  3. Написать программу, в которой объявить и присвоить начальные значения целочисленным переменным: a и b, определить две параллельные области, первая – с числом нитей 2, вторая – с числом нитей 4. Для первой области переменные a и b объявить защищенными, с режимом доступа private и firstprivate соответственно, внутри области определить номер нити и выполнить увеличение значения переменных на эту величину. Выдать на экран значения переменных до входа в параллельную область, внутри параллельной области и после выхода из параллельной области. Для второй области переменную a объявить общей, переменную b объявить защищенной, с режимом доступа private, определить номер нити и выполнить уменьшение значения переменных на эту величину. Выдать на экран значения переменных до входа в параллельную область, внутри параллельной области и после выхода из параллельной области. Неинициализированные переменные инициализировать.

  4. Написать программу, в которой объявить и присвоить начальные значения целочисленным массивам a[10] и b[10], определить параллельную область, количество нитей задать равным 2, выделить код для основной (номер 0) и нити с номером 1. Основная нить (master) должна выполнять поиск min значения элементов массива a, нить с номером 1 - поиск max значения элементов массива b. Результат выдать на экран.

  5. Написать программу, в которой объявить и присвоить начальные значения элементам двумерного массива d[6][8], для инициализации значений использовать генератор случайных чисел. Используя конструкцию директивы sections…section определить три секции для выполнения следующих операций:

  • первая секция выполняет вычисление среднего арифметического значения элементов двумерного массива,
  • вторая секция выполняет вычисление минимального и максимального значений элементов двумерного массива,
  • третья секция выполняет вычисление количества элементов массива, числовые значения которых кратны 3. В каждой секции определить и выдать на экран номер исполняющей нити и результат выполнения вычислений.

Конструкции разделения работ итерационного типа.

  1. Написать программу, в которой объявить и присвоить начальные значения целочисленному массиву a[100]. Используя конструкцию parallel for и reduction вычислить средние арифметические значения элементов массива a. Одно при помощи reduction, другое без. Сравнить полученные значения. Объяснить возможную разность результатов.

  2. Написать программу, в которой определить две параллельные области, каждая из которых содержит итерационную конструкцию for выполняющую инициализацию элементов одномерных массивов целых чисел a[12], b[12] и c[12]. Число нитей перед первой областью задать равным 3, перед второй – равным 4. Первая параллельная область выполняет инициализацию элементов массивов a и b с использованием статического распределения итераций, размер порции итераций выбрать самостоятельно, вторая параллельная область выполняет инициализацию элементов массива c по следующему правилу c[i] = a[i] + b[i], с использованием динамического распределения итераций, размер порции итераций выбрать самостоятельно. В каждой области определить и выдать на экран количество нитей, номер нити и результат выполнения цикла. Убедиться в правильности работы программы.

  3. Написать программу, в которой объявлен массив из 16000 элементов и инициализирован так, что значение элемента массива равно его порядковому номеру. Затем создайте результирующий массив, в котором (за исключением крайних элементов) будут средние значения исходного массива: b[i] = (a[i-1] + a[i] + a[i+1])/3.0 Запустите программу с 8-ю процессами при различных типах распределения работ (static, dynamic, guided, auto(runtime, если auto не работает)) и посмотреть время на разных размерах порций.

  4. Используя возможности OpenMP написать программу умножения матрицы на вектор. Сравнить время выполнения последовательной и параллельных программ (выбрать наилучший schedule). Определить размеры матрицы при которых параллельная программа начинает работать быстрей последовательной

Операции синхронизации работ

  1. Написать программу, в которой объявить и присвоить начальные значения элементам двумерного массива d[6][8], для инициализации значений использовать генератор случайных чисел. Используя конструкцию директивы omp parallel for и omp critical определить минимальное и максимальное значения элементов двумерного массива. Реализовать аналог reduction для max и min. Количество нитей задать самостоятельно. Результат выдать на экран.

  2. Написать программу, в которой объявить и присвоить начальные значения массиву целых чисел a[30], для инициализации значений использовать генератор случайных чисел. Используя конструкцию omp parallel for и omp atomic вычислить количество элементов массива, числовые значения которых кратны 9. Количество нитей задать самостоятельно. Результат выдать на экран.

  3. Написать программу, в которой, объявить и заполнить случайными значениями массив целых чисел. Используя возможности OpenMP найти максимальное значение элементов массива кратных 7. Длину массива и количество потоков определить самостоятельно. Результат выдать на экран. Для синхронизации числовых значений максимума используется механизм критических секций.

  4. Модифицируйте задачу 1 так, чтобы потоки распечатывали свои идентификаторы в обратном (убывающем) порядке. Существует как минимум 5 способов решения. Постарайтесь найти как можно больше.

omp_tasks's People

Contributors

veronikasotskova avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.