Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

все

.doc
Скачиваний:
299
Добавлен:
05.03.2016
Размер:
6.35 Mб
Скачать

#pragma omp parallel

   {

#pragma omp master

      {

         mode();

      }

   }

}

Перевіряє приналежність до паралельної чи послідовної області

Шукає паралельні та послідовні області

Чекає появи паралельної ділянки інакше виводить послідовна область

Знаходить паралельну ділянку закриває її, виводить що дана ділянка є послідовною

Запитання 37: Множина варіантів

Директива #pragma omp single [опція [[,] опція]...]

Задає ділянку яка має бути виконана лише один раз

Закриває паралельні ділянки

Визначає кількість процесів

Виводить ділянки які виконуються лише один раз

Запитання 38: Множина варіантів

Для pragma omp single опція «private»:

Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено

Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер

Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним.

Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків

Запитання 39: Множина варіантів

Для pragma omp single опція «firstprivate»:

Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено

Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер

Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним.

Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків

Запитання 40: Множина варіантів

Для pragma omp single опція «copyprivate»:

Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено

Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер

Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним.

Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків

Запитання 41: Множина варіантів

Для pragma omp single опція «nowait»:

Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено

Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер

Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним.

Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків

Запитання 42: Відповідність (графічне)

Поставте у відповідність опціям pragma omp single їхнє значення

A. nowait

B. copyprivate

C. firstprivate

D. private

A. Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків

B. Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним.

C. Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер

D. Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено

Запитання 43: Множина варіантів

Що робить директива #pragma omp master?

Виділяє ділянку коду який буде виконаний лише потоком -майстром

Виділяє ділянку коду який буде виконаний паралельним потоками

Задає перехід від потоку майстра до паралельних потоків

Задає кількість потоків-майстрів

Запитання 44: Множинна відповідь

В OpenMP змінні в паралельних областях програми розділяються на наступні основні класи

Shared

Private

Public

Protected

Запитання 45: Множина варіантів

В скількох екземплярах може існувати спільна змінна в паралельних областях програми?

В одному

В двох

Залежно від кількості паралельних ділянок

Кількість паралельних ділянок в стені 2

Запитання 46: Множина варіантів

Якщо декілька змінних одночасно записують значення в спільну змінну без виконання синхронізації такий процес називається:

«гонки даних»

«гонки процесів»

«гонки потоків»

«гонки змінних»

Запитання 47: Множина варіантів

Якщо як мінімум один потік читає значення змінної і як мінімум один потік записує значення в цю змінну без виконання синхронізації то виникають:

«гонки даних»

«гонки процесів»

«гонки потоків»

«гонки змінних»

Запитання 48: Множина варіантів

За замовчуванням, всі змінні, створенні поза паралельною областю, при вході в цю область залишаються:

Shared

Private

Public

Protected

Запитання 49: Множина варіантів

Змінні, створенні в паралельній області за замовчуванням являються:

Shared

Private

Public

Protected

Запитання 50: Множина варіантів

В мові «С» статичні (static) змінні визначені в паралельній ділянці програми і є:

Shared

Private

Public

Protected

Запитання 51: Множинна відповідь

В мові «С» динамічно виділена пам’ять в паралельній ділянці програми і є:

Спільною

Спільною, але вказівник може буде як спільним так і локальним

Локальною

Локальною, але вказівник може буде як спільним так і локальним

Запитання 52: Множина варіантів

В мові «Fortran» по замовчуванню спільними являються елементи:

COMMON – блоків

SHARED -блоків

PUBLIC -блоків

Блоків визначення

Запитання 53: Множинна відповідь

Директива threadprivate вказує що:

змінні із списку повинні бути дубльовані

в результаті кожна змінна отримує свою локальну копію

змінні із списку не повинні бути дубльовані

в результаті кожна змінна отримує свою shared копію

Запитання 54: Множина варіантів

Виклик функції omp_get_thread_num():

Дозволяє потоку отримати свій унікальний номер в поточній паралельній ділянці

Створює нові процеси в поточній паралельній ділянці

Виводить нумерацію потоків

Дозволяє процесу отримати свій унікальний номер в поточній паралельній ділянці

Запитання 55: Множина варіантів

Виклик функції omp_get_num_threads():

Дозволяє потоку отримати кількість потоків п поточній паралельній ділянці

Дозволяє потоку отримати свій унікальний номер в поточній паралельній ділянці

Створює нові процеси в поточній паралельній області

Дозволяє процесу отримати свій унікальний номер в поточній паралельній ділянці

Запитання 56: Множинна відповідь

  Що виконується в даній програмі ?

#include <stdio.h>

#include <omp.h>

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("Потоків: %d\n", count);

      else printf("Потік номер %d\n", num);

   }

}

Нульовий потік виведе загальну кількість створених потоків

Всі потоки крім нульового виведуть свої порядкові номера

Нульовий потік виведе порядкові номери всіх потоків

Всі потоки виведуть свої номера

Запитання 57: Множинна відповідь

   Що виконується в даній програмі ?

program example17b

      include "omp_lib.h"

      integer count, num

!$omp parallel

      count=omp_get_num_threads()

      num=omp_get_thread_num()

      if (num .eq. 0) then

         print *, "Потоків: ", count

      else

         print *, "потік номер ", num

      end if

!$omp end parallel

      End

Нульовий потік виведе загальну кількість створених потоків

Нульовий потік виведе загальну кількість створених потоків

Нульовий потік виведе порядкові номери всіх потоків

Всі потоки виведуть свої номера

Запитання 58: Множинна відповідь

Використовуючи які функції можна призначити кожному потокові свою частину коду для виконання, і таким чином розділяти роботу між потоками в стилі технології МРІ?

omp_get_thread_num()

omp_get_num_threads()

omp_set_thread_num()

omp_set_num_threads()

Запитання 59: Множина варіантів

Якщо в паралельній області зустрівся оператор циклу, то :

Він буде виконаний всіма потоками поточної групи

Він буде виконаний одним потоком поточної групи

Він не буде виконаний

Він буде виконаний частиною потоків поточної групи

Запитання 60: Множинна відповідь

    Що виконує нижче наведена програма?

#include <stdio.h>

#include <omp.h>

int main(int argc, char *argv[])

{

   int A[10], B[10], C[10], i, n;

   for (i=0; i<10; i++){ A=i; B=2*i; C=0; }

#pragma omp parallel shared(A, B, C) private(i, n)

   {

      n=omp_get_thread_num();

#pragma omp for

      for (i=0; i<10; i++)

      {

         C=A+B;

         printf("Потік %d додав елементи з номером %d\n", 

                n, i);

      }

   }

}

На кожній і-тій ітерації додаютьсяі-ті елементи масивів A I B результат записується в і-тий елемент масиву С.

На кожній ітерації буде виведено номер потоку, що виконав дану ітерацію

На кожній ітерації буде збільшено кількість потоків

На кожній ітерації значення shared міняється на private

Запитання 61: Множинна відповідь

    Що виконує дана програма:

      program example18b

      include "omp_lib.h"

      integer A(10), B(10), C(10), i, n

      do i=1, 10

         A(i)=i

         B(i)=2*i

         C(i)=0

      end do

!$omp parallel shared(A, B, C) private(i, n)

      n=omp_get_thread_num()

!$omp do

      do i=1, 10

         C(i)=A(i)+B(i)

         print *, "Stream ", n, " folded with the number of elements ", i

      end do

!$omp end parallel

      End

На кожній і-тій ітерації додаютьсяі-ті елементи масивів A I B результат записується в і-тий елемент масиву С.

На кожній ітерації буде виведено номер потоку, що виконав дану ітерацію

На кожній ітерації буде збільшено кількість потоків

На кожній ітерації значення shared міняється на private

Запитання 62: Множина варіантів

Зміна значення OMP_SCHEDULE з програми виконується наступним чином

void omp_set_schedule(omp_sched_t type, int chunk);

void omp_get_schedule(omp_sched_t type, int chunk);

void omp_show_schedule(omp_sched_t type, int chunk);

void omp_init_schedule(omp_sched_t type, int chunk);

Запитання 63: Множина варіантів

За допомогою виклику якої функції користувач може дізнатися поточне значення OMP_SHEDULE?

void omp_get_schedule(omp_sched_t* type, int* chunk);

void omp_set_schedule(omp_sched_t* type, int* chunk);

void omp_out_schedule(omp_sched_t* type, int* chunk);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]