игра брюс 2048
Главная / Программирование / Параллельное программирование с OpenMP / Тест 6

Параллельное программирование с OpenMP - тест 6

Упражнение 1:
Номер 1
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
void work(int i);
int main () {
    #pragma omp parallel
    {
        #pragma omp for
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) статический (static) 

 (2) зависит от значения переменной окружения OMP_SCHEDULE 

 (3) зависит от реализации компилятора 


Номер 2
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    #pragma omp parallel
    {
         omp_set_schedule (omp_sched_dynamic);
        #pragma omp for schedule(static)
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) статический (static) 

 (2) динамический (dynamic) 

 (3) зависит от значения переменной окружения OMP_SCHEDULE. 


Номер 3
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    #pragma omp parallel
    {
         omp_set_schedule (omp_sched_static);
        #pragma omp for schedule(dynamic)
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) статический (static) 

 (2) динамический (dynamic) 

 (3) зависит от значения переменной окружения OMP_SCHEDULE 


Упражнение 2:
Номер 1
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    #pragma omp parallel
    {
         omp_set_schedule (omp_sched_static);
        #pragma omp for
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) статический (static) 

 (2) зависит от значения переменной окружения OMP_SCHEDULE 

 (3) зависит от реализации компилятора 


Номер 2
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    #pragma omp parallel
    {
         omp_set_schedule (omp_sched_dynamic);
        #pragma omp for
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) динамический (dynamic) 

 (2) зависит от значения переменной окружения OMP_SCHEDULE 

 (3) зависит от реализации компилятора 


Номер 3
Определите способ распределения витков цикла между нитями для следующего фрагмента программы:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    #pragma omp parallel
    {
         omp_set_schedule (omp_sched_guided);
        #pragma omp for
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) управляемый(guided) 

 (2) зависит от реализации компилятора 

 (3) зависит от значения переменной окружения OMP_SCHEDULE 


Упражнение 3:
Номер 1
Определите количество нитей, между которыми будет распределена работа в параллельной области:
#define N 100
#include "omp.h"
void work(int i);
int main () {
    omp_set_num_threads(2);
    #pragma omp parallel num_threads(4)
    {
        #pragma omp for
             for (int i=0;i<N;i++) work (i);
    }
}

Ответ:

 (1) 2 

 (2) 4 

 (3) зависит от значения переменной окружения OMP_NUM _THREADS 


Номер 2
Определите количество нитей, между которыми будет распределена работа в параллельной области:
#include "omp.h"
void work(int i);
int main () {
    int n;
    n=10;
    omp_set_num_threads(2);
    #pragma omp parallel num_threads(4) if (n>20)
    {
        #pragma omp for
             for (int i=0;i<n;i++) work (i);
    }
}

Ответ:

 (1) 1 

 (2) 2 

 (3) 4 


Номер 3
Определите количество нитей, между которыми будет распределена работа в параллельной области:
#include "omp.h"
void work(int i);
int main () {
    int n;
    n=10;
    #pragma omp parallel num_threads(4) if (n>20)
    {
        #pragma omp for
             for (int i=0;i<n;i++) work (i);
    }
}

Ответ:

 (1) зависит от значения переменных окружения OMP_THREAD_LIMIT и OMP_NUM_THREADS 

 (2) 1 

 (3) 4 


Упражнение 4:
Номер 1
Пусть следующая программа скомпилирована компилятором, поддерживающим вложенный параллелизм.
#include <stdio.h>
#include "omp.h"
int counter;
int main()
{
   counter=0;
   omp_set_nested(0);
  #pragma omp parallel num_threads(2)
  {
    if (omp_get_thread_num() == 0) {
        #pragma omp parallel num_threads(2)
        {
         #pragma omp atomic
          counter++;
        }
    }
  }
  printf("Counter=%d\n",counter);
}
Определите значение переменной counter по завершении выполнения этой программы:

Ответ:

 (1) 1 

 (2) 2 

 (3) 4 


Номер 2
Пусть следующая программа скомпилирована компилятором, поддерживающим вложенный параллелизм.
#include <stdio.h>
#include "omp.h"
int counter;
int main()
{
   counter=0;
   omp_set_nested(1);
  #pragma omp parallel num_threads(2)
  {
    if (omp_get_thread_num() == 0) {
        #pragma omp parallel num_threads(2)
        {
         #pragma omp atomic
          counter++;
        }
    }
  }
  printf("Counter=%d\n",counter);
}
Определите значение переменной counter по завершении выполнения этой программы:

Ответ:

 (1) 1 

 (2) 2 

 (3) 4 


Номер 3
Пусть следующая программа скомпилирована компилятором, поддерживающим вложенный параллелизм.
#include <stdio.h>
#include "omp.h"
int counter;
int main()
{
   counter=0;
   omp_set_nested(0);
  #pragma omp parallel num_threads(2)
  {
      #pragma omp parallel num_threads(2)
      {
       #pragma omp atomic
        counter++;
      }
  }
  printf("Counter=%d\n",counter);
}
Определите значение переменной counter по завершении выполнения этой программы:

Ответ:

 (1) 1 

 (2) 2 

 (3) 4 


Упражнение 5:
Номер 1
Определите значение переменной team_size по завершении выполнения следующей программы:
#include <stdio.h>
#include "omp.h"
int main()
{
   int team_size;
   team_size=omp_get_team_size(omp_get_level ());
   printf("Team Size=%d\n",team_size);
}

Ответ:

 (1) -1 

 (2) 0 

 (3) 1 


Номер 2
Определите значение переменной team_size по завершении выполнения следующей программы:
#include <stdio.h>
#include "omp.h"
int main()
{
   int team_size;
   team_size=0;
   #pragma omp parallel num_threads(2)
   {
      if (omp_get_thread_num() == 0) {
        team_size=omp_get_team_size(omp_get_level ());
      }
   }
   printf("Team Size=%d\n",team_size);
}

Ответ:

 (1) 0 

 (2) 1 

 (3) 2 


Номер 3
Определите значение переменной team_size по завершении выполнения следующей программы:
#include <stdio.h>
#include "omp.h"
int main()
{
   int team_size;
   team_size=0;
   #pragma omp parallel num_threads(2)
   {
      if (omp_get_thread_num() == 0) {
        team_size=omp_get_team_size(0);
      }
   }
   printf("Team Size=%d\n",team_size);
}

Ответ:

 (1) 0 

 (2) 1 

 (3) 2 




Главная / Программирование / Параллельное программирование с OpenMP / Тест 6