Главная /
Параллельное программирование с OpenMP /
Рассмотрим фрагмент OpenMP-программы: #include <omp.h> int main (void) { omp_set_nested(0); omp_set_max_active_levels(8); omp_set_num_threads(2); #pragma omp parallel { omp_set_num_threads(2); #pragma omp parallel { /*вложенная параллельная область*
Рассмотрим фрагмент OpenMP-программы:
#include <omp.h>
int main (void)
{
omp_set_nested(0);
omp_set_max_active_levels(8);
omp_set_num_threads(2);
#pragma omp parallel
{
omp_set_num_threads(2);
#pragma omp parallel
{ /*вложенная параллельная область*/
…
}
}
}
Для выполнения вложенной параллельной области будет создана группа нитей, состоящая из:
вопрос
Правильный ответ:
1-ой нити
2-х нитей
нескольких нитей (количество создаваемых нитей зависит от переменной окружения
OMP_NUM_THREADS
)
Сложность вопроса
75
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Это очень нехитрый вопрос intuit.
25 авг 2020
Аноним
Если бы не эти ответы - я бы сломался c этими тестами intuit.
19 янв 2019
Другие ответы на вопросы из темы программирование интуит.
- # При реализации компилятором редукционного оператора, описанного при помощи клаузы reduction (+: sum), где переменная sum имеет тип integer, для каждой нити создается локальная копия переменной sum, начальное значение которой будет инициализировано:
- # Найдите ошибку в следующем фрагменте программы: #define N 10 int i; #pragma omp parallel firstprivate(i) lastprivate(i) { for (i=0; i<N; i++) { … } }
- # Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы: #include <omp.h> #include <stdio.h> #define N 100 float c[N]; float sum = 0.0; int main (void) { omp_set_num_threads (8); #pragma omp parallel shared(sum, c) { #pragma omp for for (int i=0; i<N; i++) { #pragma omp critical sum += c[i]; } } printf (“Sum of array=%4.2f\n”, sum); }
- # Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы: #include <omp.h> #include <unistd.h> #define msec 1000 int main (void){ omp_set_num_threads (8); #pragma omp parallel for for (int i=0; i<5; i++) for (int j=0; j<5; j++) sleep (msec); }
- # Найдите ошибку в следующем фрагменте MPI/OpenMP-программы, вычисляющей число Пи: #include <mpi.h> #include <omp.h> #define num_steps 100000 void main (int argc, char *argv[]) { int numprocs, myid, mysteps; double pi, step, sum = 0.0 ; MPI_Init(&argc, &argv) ; MPI_Comm_Rank(MPI_COMM_WORLD, &myid) ; MPI_Comm_Size(MPI_COMM_WORLD, &numprocs) ; step = 1.0/(double) num_steps ; mysteps = num_steps/numprocs ; #pragma omp parallel shared(myid, mysteps, step) reduction(+:sum) { #pragma omp for for (int i=myid*mysteps; i<(myid+1)*mysteps ; i++){ double x = (i+0.5)*step; sum += 4.0*step/(1.0+x*x); } MPI_Reduce(&sum, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } MPI_Finalize(); }