Главная / Программирование / Параллельное программирование с использованием инструментов и технологий Intel, Проверка знаний

Параллельное программирование с использованием инструментов и технологий Intel, Проверка знаний - ответы на тесты Интуит

Правильные ответы выделены зелёным цветом.
Все ответы: Проверка знаний в области параллельного программирования и умений работы с OpenMP и MPI.
Смотрите также:
Граф:
(1) состоит из множества вершин
(2) состоит из множества дуг
(3) состоит из множества вершин и дуг
(4) всегда ацикличен
(5) всегда содержит циклы
(6) всегда содержит непустое множество дуг
(7) всегда содержит непустое множество вершин
(8) бывает цикличным
Может ли информационная история некоторого фрагмента содержать 102 вершины и лишь 7 дуг?
(1) да
(2) нет
Для некоторого фрагмента программы построили четыре модели. Может ли оказаться несвязным граф:
(1) информационный граф
(2) граф управления
(3) операционная история
(4) информационная история
Подход к оптимизации вычислений, основанный на использовании команд SIMD (SSE, SSE2…), называется:
(1) интерполяция
(2) модуляция
(3) векторизация
(4) комбинация
Динамическое планирование это:
(1) аппаратный механизм переупорядочивания исполнения инструкций (out-of-order engine)
(2) генерация машинного кода с учетом результатов профилирования
(3) метод решения задач дискретной оптимизации
Отметьте ресурсы, которые потоки одного процесса используют совместно
(1) глобальные и статические переменные
(2) локальные переменные
(3) динамически распределяемая память
(4) открытые файлы и сетевые соединения
(5) аппаратный контекст
Какой тип планирования преимущественно используется в интерактивных системах?
(1) долгосрочное
(2) среднесрочное
(3) краткосрочное
Укажите положения, верные для алгоритма Петерсона решения задачи взаимного исключения.
(1) можно синхронизировать выполнение потоков разных процессов
(2) требуется наличие разделяемых переменных для синхронизирующихся потоков
(3) можно использовать в прикладных программах современных операционных систем общего назначения (Windows, UNIX,…)
(4) можно использовать на многопроцессорных системах
Технология программирования OpenMP расширяет язык программирования за счет:
(1) новых ключевых слов
(2) новых библиотечных функций и переменных окружения
(3) новых директив и специальных комментариев
В критические секции:
(1) потоки входят последовательно в произвольном порядке
(2) потоки входят последовательно в соответствии с порядковым номером потока
(3) все потоки входят одновременно
Имеется следующий код на OpenMP double a = 10.0; #pragma omp parallel private(a) { ... } Можно ли средствами OpenMP сделать так, чтобы локальные копии переменной а в каждом потоке имели то же значение, что и исходная переменная a?
(1) да, это будет сделано автоматически
(2) да, нужно заменить параметр private на параметр firstprivate
(3) нет, такого способа не существует
Какой из следующих шаблонов параллельного программирования лежит в основе технологии OpenMP?
(1) "вилочный" параллелизм (fork-join)
(2) "мастер-рабочий"
(3) разделяй и властвуй
Пусть написана следующая параллельная программа: int a = 0; #pragma omp parallel { … a++; … } Чему равно значение "a" на четырех процессорной системе, после выполнения параллельной секции?
(1) 0
(2) 1
(3) 4
(4) не известно
Пусть написана следующая параллельная программа: int sum = 0; #pragma omp parallel for(int i = 0; i < 100; i++) #pragma omp single sum++; Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) гонки данных по переменной sum
(2) гонки данных по переменной i
(3) замедление программы
(4) проблем нет
Пусть написан следующий параллельный код: #pragma omp parallel for ordered { for (i=5; i >= 0; i--) { #pragma omp ordered printf ("%d ",i); } В каком порядке выведутся числа?
(1) 5 4 3 2 1 0
(2) 0 1 2 3 4 5
(3) в хаотичном
В качестве параметров директивы sections могут использоваться:
(1) private (list)
(2) firstprivate (list)
(3) lastprivate (list)
(4) reduction (operator: list)
(5) wait
Отметьте верные утверждения:
(1) MPI – это сокращение от My Personal Identifier
(2) MPI – это сокращение от Multiple Parallel Interface
(3) MPI – это сокращение от Message Passing Interface
(4) каждый параллельный процесс в MPI имеет номер
(5) использовать функции MPI можно только после вызова MPI_Init
Для распределения вычислений между процессорами в вычислительных системах с распределенной памятью необходимо:
(1) выделить информационно независимые фрагменты вычислений, провести их программную реализацию и затем разместить полученные части программы на разных процессорах
(2) разделить программу на равные части и распределить между процессорами
(3) распределить исполняемые модули параллельной программы по узлам системы
Завершение функции MPI_Send означает, что:
(1) операция передачи начала выполняться и пересылка сообщения будет рано или поздно будет выполнена
(2) сообщение находится в состоянии передачи
(3) сообщение принято процессом-получателем при помощи функции MPI_Recv
В коллективных операциях передачи данных обязаны принимать участие:
(1) все процессы используемого коммуникатора
(2) некоторые процессы используемого коммуникатора
(3) все процессы используемой группы процессов
При индексном способе новый производный тип создается как:
(1) набор блоков разного размера из элементов исходного типа, при этом между блоками могут иметься разные промежутки по памяти
(2) набор блоков из элементов исходного типа, при этом между блоками могут иметься регулярные промежутки по памяти
(3) непрерывная последовательно элементов исходного типа
Вы написали программу на языке C. Эта программа работает корректно на подготовленных тестовых данных, но скорость работы вас не устраивает. Какими инструментами, входящими в комплект поставки Parallel Studio, вы воспользуетесь для увеличения скорости работы вашей программы?
(1) Parallel Composer
(2) Parallel Inspector
(3) Parallel Amplifier
(4) Parallel Adviser
Вам выдали работающую последовательную программу, написанную на языке C++. Программа компилируется час, а объём исходников составляет 1.5 MB. Перед вами стоит задача распараллеливания программы. Чем вы воспользуетесь в первую очередь?
(1) Parallel Composer
(2) Серым веществом головного мозга для анализа алгоритма, реализованного в программе, и разработки параллельной версии этого алгоритма
(3) Parallel Inspector в режиме Memory Errors
(4) Parallel Amplifier в режиме Hotspots
(5) Parallel Inspector в режиме Threading Errors
(6) Parallel Amplifier в режиме Concurrency
Процесс оптимизации параллельных программ обычно устроен следующим образом:
(1) сбор информации о работе программы, выявление "узких мест", обнаружение причины падения производительности, устранение этих причин
(2) сбор информации о работе программы, выявление "узких мест", отладка, обнаружение причины падения производительности, устранение этих причин
(3) сборка приложения в режиме отладки (конфигурация Debug), инструментирование бинарного кода, запуск программы, оптимизация программы
На эффективность работы параллельной программы существенное влияние оказывают следующие факторы:
(1) выбор примитивов синхронизации
(2) синхронизация между потоками
(3) доля времени, которое приложение проводит в режиме последовательного выполнения
(4) объем исходного кода программы
(5) балансировка вычислительной загрузки
(6) минимизация непроизводительных издержек при работе с потоками
Реализуйте параллельный метод встречной прогонки, оцените его трудоемкость. Сравните теоретическое ускорение параллельного метода с практическим.
(1) метод встречной прогонки плохо параллелится, ускорение отсутсвует
(2) метод встречной прогонки хорошо параллелится для любых задач
(3) метод встречной прогонки хорошо параллелится, но только в случае задач небольшого размера
Верно ли, что информационная история любого фрагмента всегда содержит больше дуг, чем операционная история того же фрагмента?
(1) да
(2) нет
Может ли управляющий граф некоторого фрагмента программы быть связным, а его информационный граф несвязным?
(1) да
(2) нет
(3) управляющий граф не может быть несвязным
(4) только для фрагментов, в которых нет циклов
(5) только для фрагментов, записанных на языке Си
Верно ли утверждение: если в тесновложенном гнезде циклов все итерации каждого цикла гнезда независимы, то перестановка циклов в таком гнезде будет эквивалентным преобразованием?
(1) да
(2) нет
Статическая конвейерезация выполняется
(1) оптимизирующим компилятором
(2) программистом
(3) ядром CPU
Степень параллелизма программы
(1) D(t) – число процессоров, участвующих в исполнении программы в момент времени
(2) отношение времени выполнения последовательной версии к времени выполнения параллельной версии программы
(3) отношение времени выполнения программы на одноядерном процессоре к времени выполнения на многоядерном процессоре
Отметьте частные ресурсы каждого потока
(1) глобальные и статические переменные
(2) локальные переменные
(3) динамически распределяемая память
(4) открытые файлы и сетевые соединения
(5) аппаратный контекст
Укажите оценку сложности современных алгоритмов планирования (N – число субъектов планирования).
(1) O(N2)
(2) O(NlogN)
(3) O(N)
(4) O(logN)
(5) O(log logN)
(6) O(1)
Укажите положения, верные для решений задачи взаимного исключения, основанного на использовании специальных команд ЦП (Test&Set, Swap,…).
(1) можно синхронизировать выполнение потоков разных процессов
(2) требуется наличие разделяемых переменных для синхронизирующихся потоков
(3) можно использовать в прикладных программах современных операционных систем общего назначения (Windows, UNIX,…)
(4) можно использовать на многопроцессорных системах
Отметьте верные утверждения об OpenMP:
(1) OpenMP ориентирован в первую очередь на написание программ для векторно-конвейерных компьютеров
(2) большинство конструкций OpenMP реализуется с помощью директив и/или специальных комментариев
(3) все переменные программы делятся на два класса: локальные (private) и общие (shared)
(4) число параллельных потоков OpenMP приложения может определяться переменной окружения
(5) весь параллелизм приложения реализуется только с помощью параллельных циклов
В OpenMP-программе объявлены переменные a и b типа int и массив c типа double. Отметьте верные варианты использования директивы omp atomic.
(1) #pragma omp atomic a += 1;
(2) #pragma omp atomic a = a + 1;
(3) #pragma omp atomic a = b + 1;
(4) #pragma omp atomic a++;
(5) #pragma omp atomic c[0]++;
В программе на OpenMP распараллелен следующий цикл, где выполнение функции f() может занимать существенно разное время в зависимости от значения входного аргумента #pragma omp for(i = 0; i < 1000; i++) с += func(i); Каким образом можно добиться наилучшей балансировки вычислительной нагрузки между потоками?
(1) использовать статическое расписание вида #pragma omp for schedule(static, chunk). Значение chunk взять равным 10
(2) использовать статическое расписание вида #pragma omp for schedule(static, chunk). Значение chunk подобрать экспериментально
(3) использовать динамическое расписание вида #pragma omp for schedule(dynamic, chunk). Значение chunk взять равным 10
(4) использовать динамическое расписание вида #pragma omp for schedule(dynamic, chunk). Значение chunk подобрать экспериментально
(5) средствами OpenMP балансировку улучшить невозможно
Выберите наиболее правильное утверждение:
(1) программа на OpenMP дает ускорение сравнимое с программой, распараллеленной с помощью потоков.
(2) в программе, распараллеленной с помощью потоков всегда можно добиться ускорения не хуже чем с помощью OpenMP.
(3) в программе, распараллеленной с помощью OpenMP всегда можно добиться ускорения не хуже чем с помощью потоков.
Пусть написана следующая параллельная программа: int a = 0; #pragma omp parallel { … #pragma omp single a++; … } Чему равно значение "a" на четырех процессорной системе, после выполнения параллельной секции?
(1) 0
(2) 1
(3) 4
(4) не известно
Пусть написана следующая параллельная программа: int sum = 0; #pragma omp parallel for(int i = 0; i < 100; i++) #pragma omp critical sum++; Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) гонки данных по переменной sum
(2) гонки данных по переменной i
(3) замедление программы
(4) проблем нет
Пусть написан следующий параллельный код: #pragma omp parallel for shared(a) private(i,j,sum) \ schedule (dynamic, CHUNK) ordered { for (i=0; i < NMAX; i++) { sum = 0; for (j=i; j < NMAX; j++) sum += a[i][j]; #pragma omp ordered printf ("Сумма элементов строки %d равна %f\n",i,sum); } Будет ли суммирование происходить параллельно?
(1) да
(2) нет
Какие из директив позволяют выполнить действия только в одном потоке
(1) #pragma omp single
(2) #pragma omp master
(3) #pragma omp wait
(4) #pragma omp one
Отметьте верные утверждения:
(1) вызов MPI_Comm_rank(&ProcRank) определяет число линейно независимых строк матрицы инцидентности параллельных процессов
(2) вызов MPI_Comm_rank(&ProcRank) определяет ранг (номер) вызвавшего процесса
(3) вызов MPI_Comm_rank(&ProcRank, MPI_COMM_WORLD) определяет ранг (номер) вызвавшего процесса
(4) вызов MPI_Comm_size(&ProcNum) определяет общее число запущенных параллельных процессов приложения
(5) вызов MPI_Comm_size(&ProcNum, MPI_COMM_WORLD) определяет общее число запущенных параллельных процессов приложения
Минимально необходимый набор операций для организации информационного взаимодействия между процессорами в вычислительных системах с распределенной памятью включает в себя только:
(1) операции приема и передачи данных
(2) операции передачи данных и коллективные операции
(3) только коллективные операции
Прием сообщения при помощи функции MPI_Recv может быть инициирован:
(1) до момента, в момент или после момента начала отправки сообщения
(2) только в момент начала отправки сообщения
(3) только после момента начала отправки сообщения
Коллективные операции MPI:
(1) могут быть реализованы при помощи парных операций, однако такое решение, скорее всего, будет не эффективным
(2) принципиально не могут быть реализованы при помощи парных операций
(3) могут быть реализованных при помощи парных операций, но не в полном объеме
H-векторный и H-индексный способы создания данных отличаются от векторного и индексного способов тем, что:
(1) интервалы между блоками задаются в байтах, а не в элементах исходного типа данных
(2) разрешают использовать последовательность элементов исходного типа, между которыми могут быть одинаковые промежутки памяти
(3) разрешают использовать разные промежутки памяти между блоками
Вы написали программу на языке C. Эта программа работает корректно на подготовленных тестовых данных, но скорость работы вас не устраивает. Каким инструментом, входящим в комплект поставки Parallel Studio, вы воспользуетесь для определения участка программы, на выполнение которого расходуется наибольшее количество времени?
(1) Parallel Composer
(2) Parallel Inspector
(3) Parallel Amplifier
(4) Parallel Adviser
Вам выдали работающую последовательную программу на языке C++. Вы выполняете оптимизацию программы. Чем вы воспользуетесь в первую очередь для получения более быстрой версии программы?
(1) Intel Compiler из Parallel Composer
(2) Intel TBB из Parallel Composer
(3) Intel IPP из Parallel Composer
(4) Parallel Advisor
Успешная отладка и оптимизация параллельных программ в системах с общей памятью требуют:
(1) знания основных разновидностей ошибок, специфичных для параллельных программ, типичных проблем с точки зрения производительности многопоточных приложений
(2) знаний особенностей операционных системы, связанных с обеспечением работы в многопоточном режиме (примитивы синхронизации и др.)
(3) использования специальных отладочных инструментов
(4) знания технологии программирования MPI
Какие из следующих утверждений являются верными?
(1) для успешного применения профилировщика Intel Parallel Amplifier желательно при сборке программного проекта указать некоторые специальные ключи компилятора
(2) профилировщик Intel Parallel Amplifier может быть использован только при работе в операционной системе Linux
(3) профилировщик Intel Parallel Amplifier может быть использован только при работе в операционной системе Windows
(4) профилировщик Intel Parallel Amplifier позволяет построить критический путь для профилируемой программы
Сформулируйте три варианта LU-разложения (по столбцу, по строке, компактная схема). Какой из алгоритмов предпочтителен при реализации?
(1) по столбцу, так как так как при вычислении j-го столбца используются все элементы строк от j-й до n-й, а доступ к строке матрицы в языке С организован эффективно
(2) по строке, так как при вычислении i-й строки используются все элементы столбцов от 1-го до i-го, а доступ к столбцу матрицы в языке С организован эффективно
(3) компактная схема, так как она обладает меньше трудоемкостью
Ускорение за счёт параллельного выполнения
(1) D(t) – число процессоров, участвующих в исполнении программы в момент времени
(2) отношение времени выполнения последовательной версии к времени выполнения параллельной версии программы
(3) отношение времени выполнения программы на одноядерном процессоре к времени выполнения на многоядерном процессоре
Как называется состояние потока, обладающего всеми необходимыми ресурсами, в том числе возможностью использования ЦП
(1) выполнение
(2) готов к выполнению
(3) ожидание
Укажите наиболее важный критерий оценки алгоритмов планирования в системах пакетной обработки.
(1) справедливость
(2) масштабируемость
(3) пропускная способность
(4) эффективность
(5) время отклика
(6) время ожидания
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). Semaphore Empty = N; // Буфер содержит N записейFull = 0;() { Empty.P(); AddItemToBuffer(); Full.V(); }() { Full.P(); RemoveItemFromBuffer(); Empty.V(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
Для сборки OpenMP-программы необходимо.
(1) подключить заголовочный файл omp.h
(2) подключить библиотеку omp.lib
(3) использовать ключ компилятора /Qopenmp (/openmp)
В OpenMP-программе необходимо подсчитать число потоков в параллельной области без использования функции omp_get_num_threads(). Отметьте верные варианты.
(1) без использования функции omp_get_num_threads() эта задача не решаема
(2) int count = 0; #pragma omp parallel { count++; }
(3) int count = 0; #pragma omp parallel private(count) { count++; }
(4) int count = 0; #pragma omp parallel { #pragma omp atomic count++; }
(5) int count = 0; #pragma omp parallel { #pragma omp ctitical count++; }
(6) int count = 0; #pragma omp parallel { #pragma omp master count++; }
В OpenMP-программе имеются две параллельные области. Возможна ли ситуация, когда один поток закончит выполнение обеих параллельных областей, в то время как другой поток все еще выполняет код первой параллельной области, при условии что все потоки запущены средствами OpenMP?
(1) нет, все потоки должны закончить выполнение параллельной области, прежде чем начнется выполнение кода после параллельной области
(2) нет, в программе может быть только один параллельный регион
(3) да, каждый поток работает независимо
Выберите наиболее правильное утверждение:
(1) количество потоков OpenMP программ всегда равно количеству вычислительных элементов
(2) количество потоков OpenMP программы определяется по количеству вычислительных элементов
(3) количество потоков OpenMP программы по умолчанию равно количеству вычислительных элементов
Пусть написана следующая параллельная программа: int a = 0; #pragma omp parallel { … #pragma omp master a++; … } Чему равно значение "a" на четырех процессорной системе, после выполнения параллельной секции?
(1) 0
(2) 1
(3) 4
(4) не известно
Пусть написана следующая параллельная программа: int sum = 0; #pragma omp parallel for reduction (sum) for(int i = 0; i < 100; i++) sum++; Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) гонки данных по переменной sum
(2) гонки данных по переменной i
(3) отсутствие ускорения
(4) проблем нет
Функция omp_init_lock применяется для того что бы:
(1) инициализировать симафор
(2) установить симафор
(3) освободить симафор
Директива #pragma omp barrier используется для:
(1) синхронизации потоков внутри параллельной секции
(2) синхронизации потоков вне параллельной секции
(3) синхронизации данных внутри параллельной секции
(4) синхронизации данных вне параллельной секции
Под параллельной программой в рамках MPI понимается:
(1) множество одновременно выполняемых процессов
(2) множество одновременно выполняемых потоков
(3) множество одновременно работающих процессоров
Под параллельной программой в рамках MPI понимается:
(1) множество одновременно выполняемых процессов
(2) множество одновременно выполняемых потоков
(3) множество одновременно работающих процессоров
Функция MPI_Recv:
(1) блокирует процесс-получатель до момента фактического получения сообщения
(2) принимает сообщение в фоновом режиме, процесс в это время может продолжать вычисления
(3) в зависимости от используемой операции передачи может, как заблокировать, так и не заблокировать процесс-получатель
Под коллективными операциями в MPI понимаются:
(1) операции передачи данными, в которых принимают участие все процессы используемого коммуникатора
(2) операции над группами процессов
(3) операции над коммуникаторами
MPI поддерживает топологии вида:
(1) прямоугольная решетка произвольной размерности и граф произвольного вида
(2) тор произвольной размерности и граф произвольного вида
(3) только граф произвольного вида
Вы написали программу на языке C. Эта программа работает не корректно на части тестовых данных. Каким инструментом, входящим в комплект поставки Parallel Studio, вы воспользуетесь для поиска ошибки в вашей программе?
(1) Parallel Composer
(2) Parallel Inspector
(3) Parallel Amplifier
(4) Parallel Adviser
Программный продукт Intel Parallel Inspector решает следующие задачи:
(1) позволяет полностью гарантировать корректность работы параллельной программы
(2) позволяет повысить производительность параллельной программы
(3) позволяет обеспечить максимальную утилизацию вычислительных ресурсов
(4) помогает в поиске ошибок в параллельной программе и работе с памятью
Процесс обнаружения ошибки в параллельных программах обычно устроен следующим образом:
(1) определение факта наличия ошибки, выяснение причин ошибки, поиск ошибки, определение способа устранения ошибки, устранение ошибки
(2) определение факта наличия ошибки, поиск ошибки, выяснение причин ошибки, определение способа устранения ошибки, устранение ошибки
(3) определение факта наличия ошибки, выяснение причин ошибки, определение способа устранения ошибки, поиск ошибки, устранение ошибки
Какие из следующих утверждений являются верными?
(1) для успешного применения отладчика Intel Parallel Inspector желательно при сборке программного проекта указать некоторые специальные ключи компилятора
(2) отладчик Intel Parallel Inspector может быть использован только при работе в операционной системе Linux
(3) отладчик Intel Parallel Inspector может быть использован только при работе в операционной системе Windows
(4) отладчик Intel Parallel Inspector обнаруживает 100% ошибок в многопоточных параллельных программах
Реализуйте метод Гаусса без выбора ведущего элемента. Экспериментально оцените погрешность. Сравните полученную погрешность с погрешностью, которая получается при выборе ведущего элемента по столбцу.
(1) погрешности одинаковые и сопоставимы с ошибкой округления
(2) погрешность метода Гаусса с выбором ведущего элемента меньше, чем обычного метода
(3) погрешность обычного метода Гаусса меньше, чем метода с выбором ведущего элемента
Как называется состояние потока, заблокированного до наступления некоторого внешнего события
(1) выполнение
(2) готов к выполнению
(3) ожидание
Укажите наиболее важный критерий оценки алгоритмов планирования в интерактивных системах.
(1) справедливость
(2) масштабируемость
(3) пропускная способность
(4) эффективность
(5) время отклика
(6) время ожидания
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). Semaphore Empty = N; // Буфер содержит N записейM = unlocked;Full = 0;() { M.Lock(); Empty.P(); AddItemToBuffer(); Full.V(); M.Unlock(); }() { M.Lock(); full.P(); RemoveItemFromBuffer(); empty.V(); M.Unlock(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
Для создания параллельной области необходимо использовать директиву:
(1) #pragma parallel
(2) #pragma omp parallel
(3) #pragma omp
(4) #pragma omp for
Для выполнения некоторого кода в параллельной области только нулевым потоком необходимо использовать
(1) директиву omp critical
(2) параметр директивы omp parallel
(3) директиву omp master
(4) директиву omp single
(5) нет такого способа
В OpenMP-программе имеется два распараллеленных цикла. Возможна ли ситуация, когда один поток закончит выполнение обоих циклов, в то время как другой поток все еще выполняет код первого цикла, при условии что все потоки запущены средствами OpenMP?
(1) нет, после окончания каждого параллельного цикла все потоки должны закончить его выполнение
(2) нет, в программе может быть только один параллельный цикл
(3) да, каждый поток работает независимо
(4) да, если первый цикл объявлен с параметром nowait и оба цикла принадлежат одному параллельному региону
Какое количество потоков может быть заведено в рамках параллельной секции?
(1) меньше количества вычислительных элементов
(2) большее количества вычислительных элементов
(3) равное количеству вычислительных элементов
Пусть написана следующая параллельная программа: int a = 0; #pragma omp parallel { … #pragma omp critical a++; … } Чему равно значение "a" на четырех процессорной системе, после выполнения параллельной секции?
(1) 0
(2) 1
(3) 4
(4) не известно
Пусть написана следующая параллельная программа: #pragma omp parallel {sum = 0; #pragma omp for for(int i = 0; i < 100; i++) sum++; } Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) значение переменной sum не определено
(2) гонки данных по переменной i
(3) замедление программы
(4) проблем нет
Для установки симафора используются функции:
(1) omp_init_lock
(2) omp_set_lock
(3) omp_unset_lock
(4) omp_test_lock
(5) omp_destroy_lock
Функцию omp_get_max_threads используют для:
(1) получение максимально-возможного количества потоков
(2) получение фактического количества потоков в параллельной области программы
(3) получение номера потока
(4) получение числа вычислительных элементов
Отметьте верные утверждения:
(1) в коллективных операциях участвуют все процессы приложения
(2) в коллективных операциях участвуют все процессы некоторого коммуникатора
(3) функция, соответствующая коллективной операции, должна быть вызвана каждым процессом, быть может, со своим набором параметров
(4) MPI_Barrier – это пример коллективной операции
(5) MPI_Send – это пример коллективной операции
Процессы параллельной программой в рамках MPI:
(1) могут выполняться на разных процессорах, на одном процессоре могут располагаться несколько процессов
(2) могут выполняться только на разных процессах
(3) обязательно выполняются на одном процессоре
Прием сообщений при помощи функции MPI_Recv может быть осуществлен:
(1) от любого адресата и с любым тегом при указании специальных значений в качестве параметров вызова функции
(2) от любого адресата, однако, тег сообщения должен быть указан однозначно
(3) от однозначно определяемого адресата с заданным тегом
Операцию редукции данных MPI_Reduce можно описать:
(1) как операцию передачи данных, при которой над собираемыми значениями осуществляется обработка в процессе передачи, при этом результат обработки получает только ведущий процесс
(2) как операцию передачи данных, при которой над собираемыми значениями осуществляется обработка, при этом частичные значения результатов редуцирования получают все процессы параллельной программы
(3) операцию передачи данных, при которой над собираемыми значениями осуществляется та или иная обработка, при этом результат обработки получают все процессы
В декартовой топологии множество процессов представляется в виде:
(1) прямоугольной решетки
(2) графа произвольного вида
(3) полного графа
Вы написали программу на языке C. При сборке вашей программы выдаётся ошибка: "error LNK2019: unresolved external symbol…". Чем вы воспользуетесь для устранения этой ошибки?
(1) Parallel Composer
(2) Parallel Inspector
(3) Parallel Amplifier
(4) Parallel Adviser
(5) Другое
Программный продукт Intel Parallel Amplifier решает следующие задачи:
(1) позволяет полностью гарантировать корректность работы параллельной программы
(2) помогает понять причины недостаточно быстрой работы параллельной программы
(3) помогает в поиске ошибок в параллельной программе
Под "гонками данных" понимается ситуация, когда:
(1) несколько потоков работают с разделяемыми данными, и конечный результат зависит от соотношения скоростей потоков
(2) несколько потоков работают с данными, локализованными для каждого из потоков, и конечный результат собирается в одну переменную
(3) не хватает памяти для размещения данных
Какие из следующих утверждений являются верными?
(1) необходимо избегать запуска других приложений во время профилирования параллельной программы. Деятельность посторонних приложений (особенно потребляющих много ресурсов) может существенно исказить интересующую информацию
(2) желательно производить профилирование несколько раз и для анализа выбирать тот запуск, когда приложение отработало быстрее всего
(3) для корректной работы отладчика параллельных программ необходимо осуществить несколько запусков и выбрать тот запуск, когда приложение отработало быстрее всего
Реализуйте метод Гаусса без выбора ведущего элемента. Экспериментально оцените погрешность. Сравните полученную погрешность с погрешностью, которая получается при выборе ведущего элемента по столбцу и по строке.
(1) погрешности одинаковые и сопоставимы с ошибкой округления
(2) погрешность обычного метода Гаусса меньше, чем метода с выбором ведущего элемента
(3) погрешность метода Гаусса с выбором ведущего элемента меньше, чем обычного метода
Как называется состояние потока, обладающего всеми необходимыми для выполнения ресурсами за исключением ресурса "время ЦП"
(1) выполнение
(2) готов к выполнению
(3) ожидание
Выберите утверждения, верные для невытесняющих алгоритмов планирования.
(1) поток может быть вытеснен только при выполнении им системного вызова
(2) поток может быть вытеснен в любой не зависящий от него момент
(3) поток может использовать ЦП в течение неограниченного времени
(4) возможно голодание потоков
(5) реализация алгоритма предъявляет требования к архитектуре
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). int Bufs = N; // Буфер содержит N записейM = unlocked;Full = 0;() { while(1){ M.Lock(); if( Bufs != 0 ){ Bufs --; M.Unlock(); break; } M.Unlock(); } AddItemToBuffer(); }() { while(1){ M.Lock(); if( Bufs != N ){ Bufs ++; M.Unlock(); break; } M.Unlock(); } RemoveItemFromBuffer(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
Для распределения итераций цикла между потоками необходимо использовать следующую директиву OpenMP:
(1) #pragma omp parallel for
(2) #pragma omp for, если данная директива находится внутри параллельной области
(3) #pragma parallel for
(4) #pragma omp sections
В параллельной области в OpenMP-программе необходимо выделить память под общую для всех потоков переменную. Отметьте верные варианты кода
(1) int *a; #pragma omp parallel { #pragma omp single a = new int [10]; ... }
(2) int *a; #pragma omp parallel { #pragma omp master a = new int [10]; ... }
(3) int *a; #pragma omp parallel { #pragma omp critical a = new int [10]; ... }
Как, используя OpenMP, быстрее всего просуммировать элементы очень длинного массива?
(1) в параллельном цикле использовать критическую секцию для синхронизации суммирования в разделяемую переменную
(2) в параллельном цикле использовать атомарное сложение с разделяемой переменной
(3) в параллельном цикле использовать клаузу reduction для синхронизации суммирования в разделяемую переменную
Что определяет количество потоков в рамках параллельной секции?
(1) количество вычислительных элементов
(2) значение переменных окружений
(3) вызовы библиотечных функций библиотеки OpenMP
Пусть написана следующая параллельная программа: int *a; #pragma omp parallel { …= new int [10]; … } Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Операция изменения переменной цикла index в директиве #pragma omp parallel for может иметь следующие формы:
(1) index++, ++index
(2) index--, --index
(3) index+=incr, index-=incr
(4) index*=incr, index/=incr
Для захвата симафора без блокировки потока используются функции:
(1) omp_init_lock
(2) omp_set_lock
(3) omp_unset_lock
(4) omp_test_lock
(5) omp_destroy_lock
Функцию omp_get_num_threads используют для:
(1) получение максимально-возможного количества потоков
(2) получение фактического количества потоков в параллельной области программы
(3) получение номера потока
(4) получение числа вычислительных элементов
Как определяется число процессов при запуске MPI-программы?
(1) оно будет равно числу узлов в кластере
(2) оно задается непосредственно в коде программы средствами MPI
(3) оно задается явно при запуске MPI-программы
(4) оно устанавливается через специальную переменную окружения
Номер процесса в рамках MPI именуется:
(1) рангом процесса
(2) идентификатором процесса
(3) дескриптором процесса
В синхронном режиме передачи завершение функции отправки сообщения происходит:
(1) при получении от процесса-получателя подтверждения о начале приема отправленного сообщения, при этом отправленное сообщение или полностью принято процессом-получателем или находится в состоянии приема
(2) при старте передачи данных процессом-отправителем по сети
(3) при завершении копирования сообщения в системный буфер
Обобщенная передача данных от всех процессов всем процессам может быть описана как:
(1) операция, при которой происходит передача различающихся данных от всех процессов всем процессам
(2) операция, при которой происходит передача одинаковых данных от всех процессов всем процессам
(3) операция, при которой данные от всех процессов собираются на ведущем процессе и затем рассылаются всем процессам
Топология типа тор в MPI является частным видом топологии типа:
(1) декартовой топологии
(2) графа произвольного вида
(3) полный граф
Вы написали параллельную программу с использованием потоков на языке C. Вы запустили вашу программу 100 раз на 4-хядерной машине. 98 раз программа отработала корректно, 2 раза программа выдала не корректные данные. Чем вы воспользуетесь в первую очередь при дальнейшей разработке программы?
(1) Parallel Inspector в режиме Memory Errors
(2) Parallel Amplifier в режиме Hotspots
(3) Parallel Inspector в режиме Threading Errors
(4) Parallel Amplifier в режиме Concurrency
Необходимость создания инструментов для отладки и профилирования параллельных программ вызвана следующими причинами:
(1) принципиальными сложностями, возникающими при отладке и профилировании параллельных программ, по сравнению с последовательными
(2) исключительно маркетинговыми причинами; принципиальных проблем с отладкой и профилированием параллельных программ по сравнению с последовательными не возникает
(3) необходимостью повышения производительности труда разработчиков параллельного ПО
Под "тупиками" понимается ситуация, когда:
(1) все потоки завершили свою работу
(2) возникла взаимная блокировка потоков, ожидающих наступление некоторого события для продолжения работы
(3) недостаточно ресурсов для запуска всех потоков
Какова цель балансировки нагрузки между потоками:
(1) обеспечить корректность работы параллельной программы
(2) повысить производительность параллельной программы
(3) обеспечить максимальную утилизацию вычислительных ресурсов
Сформулируйте блочный алгоритм LU-разложения. Будет ли он эффективнее обычного алгоритма.
(1) нет, в силу одинаковой трудоемкости методы одинаково эффективны
(2) нет, обычный алгоритм эффективнее в силу меньшей трудоемкости
(3) да, блочный алгоритм эффективнее в силу меньшей трудоемкости
(4) да, блочный алгоритм эффективнее при одинаковой трудоемкости в силу правильного использования кэш-памяти
Что отвечает за управление процессами?
(1) ядро операционной системы
(2) библиотека пользовательского уровня
(3) возможны оба варианта
Выберите утверждения, верные для вытесняющих алгоритмов планирования.
(1) поток может быть вытеснен только при выполнении им системного вызова
(2) поток может быть вытеснен в любой не зависящий от него момент
(3) поток может использовать ЦП в течение неограниченного времени
(4) возможно голодание потоков
(5) реализация алгоритма предъявляет требования к архитектуре
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). Semaphore Empty = N; // Буфер содержит N записейFull = 0;() { Empty.P(); DisableInterrupts(); AddItemToBuffer(); EnableInterrupts(); Full.V(); }() { Full.P(); DisableInterrupts(); RemoveItemFromBuffer(); EnableInterrupts(); Empty.V(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
Какая директива OpenMP может быть использована для синхронизации потоков?
(1) #pragma omp barrier
(2) #pragma omp waitall
(3) #pragma omp wait
Чтобы использовать вложенные параллельные области
(1) необходимо лишь определить одну из них внутри другой
(2) необходимо вызвать функцию omp_set_nested(true);
(3) в OpenMP такой возможности нет
(4) установить переменную окружения OMP_NESTED
В программе на OpenMP имеется вычислительный блок, содержащий два вложенных цикла с независимыми итерациями. Требуется распараллелить его с помощью OpenMP. Количество итераций внешнего цикла 1000, внутреннего – 1000000. Какой цикл выгоднее распараллелить: внешний или внутренний?
(1) внутренний, так как он содержит гораздо больше итераций
(2) внешний, так как это уменьшит накладные расходы
Пусть есть система с двумя вычислительными элементами. Известно, что доля последовательного кода составляет 50%. Какое максимальное ускорение можно получить с помощью технологии OpenMP?
(1) 2
(2) 1,5
(3) 1,33
Пусть написана следующая параллельная программа: int *a; #pragma omp parallel { … #pragma omp critical= new int [10]; … } Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Располагается два цикла. Возможна ли ситуация при которой один из потоков завершил выполнять итерации первого цикла и начал выполнять итерации второго цикла, а другие потоки нет?
(1) да, если даже циклы в разных параллельных секциях.
(2) да, если циклы находятся в рамках одной параллельной секции.
(3) нет.
Какие проблемы могут возникать при использовании симафоров OpenMP?
(1) взаимные блокировки потоков
(2) гонки данных
(3) ошибкам работы с памятью
Функцию omp_get_thread_num используют для:
(1) получение максимально-возможного количества потоков
(2) получение фактического количества потоков в параллельной области программы
(3) получение номера потока
(4) получение числа вычислительных элементов
В программе на MPI требуется с процесса с рангом 0 на процесс с рангом 1 переслать массив a из 10 элементов типа int. Какой код делает это верно?
(1) MPI_Send(a, 10, int, 1, 0, MPI_COMM_WORLD);
(2) MPI_Send(a, 10, MPI_INT, 1, 0, MPI_COMM_WORLD);
(3) MPI_Send(a, 10, MPI_INT, 1, MPI_ANY_TAG, MPI_COMM_WORLD);
Среди предусмотренных в составе MPI операций передачи сообщений различают:
(1) парные и коллективные операции
(2) парные и групповые операции
(3) индивидуальные и коллективные операции
В буферизованном режиме функция отправки сообщения завершается:
(1) сразу же после копирования сообщения в системный буфер
(2) при получении от процесса-получателя подтверждения о начале приема отправленного сообщения
(3) при начале фактической передачи сообщения
Операция широковещательной рассылки данных это:
(1) операция рассылки значений ведущим процессом всем остальным процессам, все процессы получают рассылаемые данные целиком
(2) операция рассылки значений ведущим процессом всем остальным процессам, все процессы получают часть исходных данных
(3) операция рассылки различающихся значений ведущим процессом всем остальным процессам
Коллективные операции должны быть вызваны:
(1) в рамках процесса отправляющего данные
(2) в рамках хотя бы одного процесса коммуникатора
(3) на всех процессах коммуникатора, в рамках которого ведется пересылка данных
Вы написали параллельную программу с использованием OpenMP на языке C. Распараллеливание осуществляется за счёт одной строчки: “#pragma omp parallel for”. Другие средства OpenMP не используются, переменные окружения не меняются. Вы запустили вашу программу 100 раз на 1-оядерной машине. 58 раз программа отработала корректно, 32 раза программа выдала не корректные данные, 10 раз программа не доработала до конца и завершила работу с ошибкой. Чем вы воспользуетесь в первую очередь при дальнейшей разработке программы?
(1) Parallel Inspector в режиме Memory Errors
(2) Parallel Amplifier в режиме Hotspots
(3) Parallel Inspector в режиме Threading Errors
(4) Parallel Amplifier в режиме Concurrency
Назначение программного продукта Intel Parallel Inspector состоит в следующем:
(1) поиск мест с возможным недетерминированным поведением многопоточной программы, написанной как на основе библиотеки потоков (Windows или POSIX threads), так и с использованием технологии OpenMP
(2) поиск мест с возможным недетерминированным поведением программы, написанной с использованием технологии MPI
(3) отладка и оптимизация параллельных программ
(4) поиск мест с возможным не корректным обращением с памятью
Под ситуацией "заброшенные замки" понимается:
(1) положение, возникающее при завершении работы одним из потоков, захватившим ресурс и не освободившим его
(2) утечка памяти, вызванная наличием запроса на выделение памяти при отсутствии ее освобождения
(3) ситуация, когда несколько потоков работают с разделяемыми данными, и конечный результат зависит от соотношения скоростей потоков
Время, затраченное на следующие операции, может быть причислено к непроизводительным издержкам при работе с потоками:
(1) создание потоков
(2) вычисления, выполняемые потоком
(3) синхронизация между потоками
Сформулируйте три варианта разложения Холецкого (строчный, столбцовый, с изменением подматрицы). Какой из алгоритмов предпочтителен при реализации?
(1) строчный, так как при вычислении i-й строки используются все элементы столбцов от 1-го до i-го, а доступ к столбцу матрицы в языке С организован эффективно
(2) столбцовый, так как при вычислении j-го столбца используются все элементы строк от j-й до n-й, а доступ к строке матрицы в языке С организован эффективно
(3) Алгоритм, изменяющий подматрицу, так как он менее трудоемкий, чем первые два
Что отвечает за управление потоками?
(1) ядро операционной системы
(2) библиотека пользовательского уровня
(3) возможны оба варианта
На значения каких критериев влияет размер кванта при использовании вытесняющих алгоритмов планирования?
(1) баланс
(2) накладные расходы
(3) масштабируемость
(4) оборотное время
(5) время отклика
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). Semaphore Empty = N; // Буфер содержит N записейM = unlocked;Full = 0;() { Empty.P(); M.Lock(); AddItemToBuffer(); M.Unlock(); Full.V(); }() { full.P(); M.Lock(); RemoveItemFromBuffer(); M.Unlock(); empty.V(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
Можно ли в OpenMP программе управлять количеством потоков выполняющих работу, не меняя кода программы?
(1) нет, программа сама определяет количество потоков
(2) да, если в программе явно не определяется количество потоков
(3) да, используя переменные окружения
Вы написали программу с использованием OpenMP. При запуске на 4-ядерной системе оказалось, что загрузка процессора равна 25%. Какова наиболее вероятная причина?
(1) гонка данных в программе
(2) отсутствие ключа /Qopenmp (/openmp) при сборке программы
(3) плохая балансировка вычислительной нагрузки между потоками
(4) тупик в программе привел к зависанию трех потоков из четырех
Для каких вычислительных систем предназначена технология OpenMP?
(1) для систем с общей памятью
(2) для систем с распределенной памятью
Пусть есть система с четырьмя вычислительными элементами. Известно, что доля последовательного кода составляет 20%. Какое максимальное ускорение можно получить с помощью технологии OpenMP?
(1) 4
(2) 2,5
(3) 1,5
Пусть написана следующая параллельная программа: int *a;= new int [10]; #pragma omp parallel { …[num_th] = num_th; … } Какие проблемы могут наблюдаться при выполнении параллельной программы, если num_th это номер потока (потоков меньше 10)?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Для управления распределением итераций цикла между потоками в OpenMP используется параметр schedule директивы for. При типе расписания static:
(1) итерации делятся поровну между потоками
(2) итерации цикла делятся на маленькие блоки. Блоки итераций цикла выполняются в процессе появления свободных вычислительных элементов.
(3) итерации цикла делятся на блоки в начале большого размера. В процессе вычислений размер блока итераций уменьшается.
Директива #pragma omp sections используется для:
(1) распределения вычислений по задачам
(2) выделения секций параллельных программ
(3) указания последовательных участков кода
Функцию omp_get_num_procs используют для:
(1) получение максимально-возможного количества потоков
(2) получение номера потока
(3) получение числа вычислительных элементов
(4) получения количества процессоров
В программе на MPI требуется принять от процесса с рангом 0 на процессе с рангом 1 массив a из 10 элементов типа int. Отметьте верные варианты.
(1) MPI_Recv(a, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
(2) MPI_Recv(a, 10, MPI_INT, 0, 0, MPI_COMM_WORLD);
(3) MPI_Recv(a, 10, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
(4) MPI_Recv(a, 10, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD);
Под коммуникатором в MPI понимается:
(1) специально создаваемый служебный объект, объединяющий в своем составе группу процессов и ряд дополнительных параметров, используемых при выполнении операций передачи данных
(2) группу процессов, в рамках которой выполняются операции передачи данных
(3) пару процессов, в рамках которой происходит информационное взаимодействие
Режим передачи по готовности может быть использован только если:
(1) операция приема сообщения уже инициирована
(2) при достаточном малом размере сообщения, менее размера системного буфера
(3) операция приема сообщения гарантированно будет запущена позднее момента начала передачи сообщения
Производным типом данных в MPI называется:
(1) описание набора значений предусмотренного в MPI типа, причем в общем случае описываемые значения не обязательно непрерывно располагаются в памяти
(2) последовательность описаний входящих в тип значений, каждое отдельное значение в которой описывается при помощи смещения адреса месторасположения от некоторого базового адреса
(3) описание набора значений базового алгоритмического языка в терминах самого этого языка
Для чего в операциях "точка-точка" используется тег:
(1) для нумерации отправляемых сообщений
(2) для дальнейшей идентификации сообщений
(3) По тегу вычисляется номер отправляющего данные процесс
Вы написали параллельную программу с использованием OpenMP на языке C. Эта программа работает корректно на подготовленных тестовых данных. Вы запустили вашу программу два раза на 4-хядерной машине. Первый раз вы запустили программу в один поток, и она работала 39 секунд, второй – в 4 потока и она работала 34 секунды. Чем вы воспользуетесь в первую очередь при дальнейшей разработке программы?
(1) Parallel Inspector в режиме Memory Errors
(2) Parallel Amplifier в режиме Hotspots
(3) Parallel Inspector в режиме Threading Errors
(4) Parallel Amplifier в режиме Concurrency
Назначение программного продукта Intel Parallel Amplifier состоит в следующем:
(1) профилирование многопоточных приложений и помощь разработчику в процессе оптимизации программного кода
(2) помощь в разработке архитектуры параллельной программы
(3) отладка и оптимизация параллельных программ
К чему приводит неравномерное распределение вычислительной нагрузки между потоками?
(1) к неэффективной работе программы
(2) к ошибкам в процессе вычислений
(3) к нехватке памяти
Время, затраченное на следующие операции, может быть причислено к непроизводительным издержкам при работе с потоками:
(1) работа с глобальными переменными многопоточного приложения
(2) уничтожение потоков
(3) работа с мьютексами
Сформулируйте блочный алгоритм разложения Холецкого. Будет ли он эффективнее обычного алгоритма?
(1) нет, в силу одинаковой трудоемкости методы одинаково эффективны
(2) нет, обычный алгоритм эффективнее в силу меньшей трудоемкости
(3) да, блочный алгоритм эффективнее при одинаковой трудоемкости в силу правильного использования кэш-памяти
(4) да, блочный алгоритм эффективнее в силу меньшей трудоемкости
Что включает в себя контекст процесса?
(1) дескриптор процесса
(2) дескриптор потока
(3) аппаратный контекст
(4) контекст ввода-вывода
(5) описание структуры и содержимое виртуального адресного пространства
При использовании каких алгоритмов планирования возможно голодание потоков?
(1) First Come – First Served
(2) Shortest Job First
(3) Shortest Remaining Time
(4) Round Robin
(5) приоритетное планирование
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет). Semaphore Empty = N; // Буфер содержит N записейM = unlocked;Full = 0;() { Empty.P(); M.Lock(); AddItemToBuffer(); Full.V(); }() { full.P(); M.Lock(); RemoveItemFromBuffer(); empty.V(); }
(1) приведенное решение корректно
(2) приведенное решение некорректно
(3) приведенное решение опасно
В OpenMP-программе необходимо задать число потоков равное двум. Отметьте верные варианты:
(1) omp_set_num_threads(2);
(2) число потоков определяется автоматически, поменять его нельзя
(3) установить переменную окружения OMP_NUM_THREADS в значение 2
(4) num_threads(2);
(5) использовать параметр num_threads(2) при определении параллельных областей программы #pragma omp parallel num_threads(2)
В программе на OpenMP распараллелен следующий цикл #pragma omp for(i = 0; i < 1000; i++) for (j = 0; j < 1000; j++) с[i] += a[i][j] * b[j]; Является ли данная параллельная реализация корректной?
(1) да
(2) нет, в программе будут гонки данных по счетчикам циклов i и j
(3) нет, счетчик цикла j должен быть локализован, например, с использованием параметра private(j). Счетчик i будет локализован автоматически
(4) нет, счетчик цикла i должен быть локализован, например, с использованием параметра private(i). Счетчик j будет локализован автоматически
(5) нет, в программе будет гонка данных по массиву c
Где исполняется код, распараллеленный с помощью технологии OpenMP?
(1) на ядрах вычислительной системы
(2) на процессорах вычислительной системы, если они используют общую память
(3) на процессорах вычислительной системы, если они используют распределенную память
(4) на ядрах графических ускорителей
Пусть есть система с восемью вычислительными элементами. Известно, что доля последовательного кода составляет 20%. Какое максимальное ускорение можно получить с помощью технологии OpenMP?
(1) 5
(2) 3,33
(3) 2
Пусть написана следующая параллельная программа: int *a;= new int [10]; #pragma omp parallel shared(a) { …[num_th] = num_th; … } Какие проблемы могут наблюдаться при выполнении параллельной программы, если num_th это номер потока (потоков меньше 10)?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Для управления распределением итераций цикла между потоками в OpenMP используется параметр schedule директивы for. При типе расписания dynamic:
(1) итерации делятся поровну между потоками
(2) итерации цикла делятся на маленькие блоки. Блоки итераций цикла выполняются в процессе появления свободных вычислительных элементов.
(3) итерации цикла делятся на блоки в начале большого размера. В процессе вычислений размер блока итераций уменьшается.
Пусть написана следующая параллельная программа: int *a; #pragma omp parallel { #pragma omp sections { #pragma omp section { a = new int [10]; delete [] a; } #pragma omp section { a = new int [10]; delete [] a; } } } Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Пусть написана следующая параллельная программа: omp_set_num_threads(4)(“%d”, omp_get_num_threads()); #pragma omp parallel { … } Что выдаст программа на экран?
(1) -1
(2) 0
(3) 1
(4) 4
В программе на MPI, содержащей ввод данных, рассылку данных, вычислительный блок, сбор результатов, необходимо замерить время вычислительного блока. Каким образом это сделать корректно?
(1) замерить время на процессе с рангом 0
(2) замерить время на каждом процессе, взять среднее
(3) замерить время на каждом процессе, взять максимум
(4) поставить MPI_Barrier() перед вычислительным блоком, затем первый замер времени. Поставить MPI_Barrier() после вычислительного блока, затем второй замер времени
Указание используемого коммуникатора является:
(1) обязательным для всех операций передачи данных в MPI
(2) необязательным для некоторых операций передачи данных в MPI
(3) обязательным для некоторых операций передачи данных в MPI
Применение неблокирующего способа выполнения обменов позволяет:
(1) уменьшить потери эффективности параллельных вычислений из-за медленных по сравнению с быстродействием процессоров коммуникационных операций
(2) уменьшить нагрузку на коммуникационную сеть
(3) уменьшить нагрузку на процессоры системы
Сигнатурой производного типа в MPI именуется:
(1) часть карты типа с указанием только типов значений
(2) часть карты типа с указанием только смещений для входящих в тип элементов
(3) размер памяти в байтах, который нужно отводить для одного элемента типа
В функциях приема сообщений MPI структура MPI_Status используется для:
(1) определения количества принятых байт
(2) определения корректности завершения операции принятия данных
(3) определения ранга процесса отправившего данные
(4) определения тега принятого сообщения
Назначение программного продукта Intel Parallel Advisor состоит в следующем:
(1) профилирование многопоточных приложений и помощь разработчику в процессе оптимизации программного кода
(2) помощь в разработке архитектуры параллельной программы
(3) отладка и оптимизация параллельных программ
Признаками наличия неравномерной вычислительной нагрузки между потоками являются:
(1) неправильные результаты расчетов
(2) большая доля последовательного выполнения
(3) малое ускорение по сравнению с последовательной программой
Время, затраченное на следующие операции, может быть причислено к непроизводительным издержкам при работе с потоками:
(1) управление потоками
(2) работа с атомарными функциями ОС
(3) работа с критическими секциями
(4) вычисления в главной функции потока
Сформулируйте метод верхней релаксации. Как вы оцениваете свойства метода с точки зрения его возможного распараллеливания?
(1) метод обладает отличными свойствами для распараллеливания, зависимости данных нет
(2) метод обладает хорошими свойствами для распараллеливания, есть зависимость по данным только между итерациями
(3) метод плохо параллелится в силу зависимости данных не только между итерациями, но и в рамках одной итерации
Что включает в себя контекст потока?
(1) дескриптор процесса
(2) дескриптор потока
(3) аппаратный контекст
(4) контекст ввода-вывода
(5) описание структуры и содержимое виртуального адресного пространства
В каких случаях возможно возникновение гонок (races) при использовании несколькими потоками одного объекта данных?
(1) два или более потоков читают данные
(2) один или более потоков читают данные, один поток изменяет данные
(3) два или более потоков изменяют данные
(4) ни один из перечисленных случаев
Рассмотрим решение задачи взаимного исключения для двух потоков (i - номер потока). Какое из условий постановки задачи взаимного исключения может быть нарушено в предлагаемом решении? bool flag0 = false, flag1 = false;( true ){ while( flag1-i ) ; flagi = true; CSi(); flagi = false; NCSi(); }
(1) одновременно внутри критической секции должно находиться не более одного потока
(2) критические секции не должны иметь приоритета в отношении друг друга
(3) остановка какого-либо потока вне его критической секции не должна влиять на дальнейшую работу потоков по использованию критического ресурса
(4) решение о вхождении потоков в их критические секции не откладывается на неопределенный срок, а является конечным во времени
(5) предлагаемое решение является корректным и не нарушает ни одного из перечисленных условий
Ваша OpenMP-программа содержит две параллельные области. Необходимо, чтобы число потоков в первой из них равнялось трем, а во второй определялось числом процессоров, доступных операционной системе. Отметьте верные варианты:
(1) #pragma omp parallel num_threads(3) ... #pragma omp parallel
(2) omp_set_num_threads(3); #pragma omp parallel ... #pragma omp parallel
(3) omp_set_num_threads(3); #pragma omp parallel ..._set_num_threads(omp_get_num_procs()); #pragma omp parallel
В программе на OpenMP распараллелен следующий цикл #pragma omp parallel(i = 0; i < 1000; i++) #pragma omp for for (j = 0; j < 1000; j++) с[i] += a[i][j] * b[j]; Является ли данная параллельная реализация корректной?
(1) да
(2) нет, в программе будут гонки данных по счетчикам циклов i и j
(3) нет, счетчик цикла i должен быть локализован, например, с использованием параметра private(i). Счетчик j будет локализован автоматически
(4) нет, в программе будет гонка данных по массиву c
Основное предназначение OpenMP?
(1) распараллеливание циклов
(2) распараллеливания рекурсий
(3) организация конвейеров параллельной обработки данных
Пусть есть система с двумя вычислительными элементами. Известно, что доля последовательного кода составляет 40%. Какое максимальное ускорение можно получить с помощью технологии OpenMP?
(1) 1,2
(2) 1,42
(3) 2
Пусть написана следующая параллельная программа: int sum = 0; #pragma omp parallel for for(int i = 0; i < 100; i++) sum++; Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) гонки данных по переменной sum
(2) гонки данных по переменной i
(3) замедление программы
(4) проблем нет
Для управления распределением итераций цикла между потоками в OpenMP используется параметр schedule директивы for. При типе расписания guided:
(1) итерации делятся поровну между потоками
(2) итерации цикла делятся на маленькие блоки. Блоки итераций цикла выполняются в процессе появления свободных вычислительных элементов.
(3) итерации цикла делятся на блоки в начале большого размера. В процессе вычислений размер блока итераций уменьшается.
Пусть написана следующая параллельная программа: #pragma omp parallel { int *a; #pragma omp sections { #pragma omp section { a = new int [10]; delete [] a; } #pragma omp section { a = new int [10]; delete [] a; } } } Какие проблемы могут наблюдаться при выполнении параллельной программы?
(1) утечки памяти
(2) программа аварийно завершит свою работу
(3) гонки данных
(4) проблем нет
Пусть написана следующая параллельная программа: omp_set_num_threads(4) #pragma omp parallel num_threads(3) { … } #pragma omp parallel { … } Сколько потоков будет создано в первой и во второй секции?
(1) 3, 4
(2) 4, 4
(3) 4, 3
В программе на MPI необходимо распределить итерации цикла между процессами, считая, что время выполнения итераций примерно одинаковое
(1) это будет сделано автоматически по общему число процессов
(2) вызвать MPI-функцию, которая для каждого процесса определит, какие итерации цикла должен выполнить данный процесс
(3) разделить общее число итераций цикла на число процессов. По рангу каждого процесса определить начальное и конечное значение счетчика цикла.
Все данные для передачи в качестве сообщения MPI описываются с помощью триады:
(1) адрес памяти, количество и тип элементов данных
(2) адрес памяти, ранг процесса-отправителя, используемый коммуникатор
(3) адрес памяти, ранг процесса-получателя, используемый коммуникатор
Завершение вызова функции неблокирующего обмена приводит:
(1) к инициации запрошенной операции передачи, но ничего не говорит о завершенности обмена
(2) к фактическому выполнению приема данных (для функции неблокирующего приема) или началу фоновой передачи (для функции неблокирующей передачи)
(3) к фактическому выполнению обмена
Протяженность производного типа в MPI это:
(1) размер памяти в байтах, который нужно отводить для одного элемента рассматриваемого типа
(2) число байтов, которые занимает один элемент данных рассматриваемого типа
(3) смещение первого байта значений рассматриваемого типа
Структура MPI_Request используется для:
(1) определения статуса предаваемых данных
(2) ожидания завершения передачи данных
(3) определения ранга процесса отправившего данные
(4) определения тега принятого сообщения
Можно ли применять метод сопряженных градиентов в качестве прямого метода решения системы линейных уравнений? Обоснуйте свой ответ.
(1) да, можно применять для любых систем
(2) да, можно применять только для систем небольшого размера в силу накопления вычислительной погрешности
(3) нет, применять нельзя ни для каких систем
Отметьте действия, не относящиеся к операции создания процесса
(1) обнуление статистике в дескрипторе создаваемого объекта
(2) создание виртуального адресного пространства
(3) создание региона кода в виртуальном адресном пространстве
(4) создание региона стека в виртуальном адресном пространстве
(5) создание и инициализация аппаратного контекста
(6) выделение ресурсов по умолчанию
В каких случаях обязательно возникают гонки (races) при использовании несколькими потоками одного объекта данных?
(1) два или более потоков читают данные
(2) один или более потоков читают данные, один поток изменяет данные
(3) два или более потоков изменяют данные
(4) ни один из перечисленных случаев
Рассмотрим решение задачи взаимного исключения для двух потоков (i - номер потока). Какое из условий постановки задачи взаимного исключения может быть нарушено в предлагаемом решении? bool flag0 = false, flag1 = false;( true ){ flagi = true; while( flag1-i ) ; CSi(); flagi = false; NCSi(); }
(1) одновременно внутри критической секции должно находиться не более одного потока
(2) критические секции не должны иметь приоритета в отношении друг друга
(3) остановка какого-либо потока вне его критической секции не должна влиять на дальнейшую работу потоков по использованию критического ресурса
(4) решение о вхождении потоков в их критические секции не откладывается на неопределенный срок, а является конечным во времени
(5) предлагаемое решение является корректным и не нарушает ни одного из перечисленных условий
Для организации параллельных вычислений в вычислительных системах с распределенной памятью необходимо:
(1) обеспечить информационное взаимодействие между процессорами
(2) выделить информационно независимые фрагменты вычислений, провести их программную реализацию, разместить полученные части программы на разных процессорах и затем организовать информационное взаимодействие между процессорами
(3) распределить исполняемые модули параллельной программы по узлам системы
Процессы, между которыми выполняется передача данных:
(1) обязательно должны принадлежать одному коммуникатору
(2) обязательно должны принадлежать двум коммуникаторам
(3) не обязаны принадлежать одному коммуникатору
Функция блокирующего ожидания завершения одного обмена в MPI называется:
(1) MPI_Wait
(2) MPI_Waitall
(3) MPI_Waitone
При векторном способе новый производный тип создается как:
(1) набор блоков из элементов исходного типа, при этом между блоками могут иметься регулярные промежутки по памяти
(2) непрерывная последовательно элементов исходного типа
(3) набор блоков разного размера из элементов исходного типа, при этом между блоками могут иметься разные промежутки по памяти
Для корректного завершения работы MPI-программы можно вызвать функцию:
(1) MPI_Finalize
(2) MPI_Abort
(3) MPI_Init
(4) MPI_Exit
Отметьте действия, не относящиеся к операции создания потока
(1) обнуление статистике в дескрипторе создаваемого объекта
(2) создание виртуального адресного пространства
(3) создание региона кода в виртуальном адресном пространстве
(4) создание региона стека в виртуальном адресном пространстве
(5) создание и инициализация аппаратного контекста
(6) выделение ресурсов по умолчанию
Укажите положения, верные для решения задачи взаимного исключения, основанного на прерываниях.
(1) можно синхронизировать выполнение потоков разных процессов
(2) требуется наличие разделяемых переменных для синхронизирующихся потоков
(3) можно использовать в прикладных программах современных операционных систем общего назначения (Windows, UNIX,…)
(4) можно использовать на многопроцессорных системах
Рассмотрим решение задачи взаимного исключения для двух потоков (i - номер потока). Какое из условий постановки задачи взаимного исключения может быть нарушено в предлагаемом решении? bool flag0 = true, flag1 = false;( true ){ while( !flagi ) ; CSi(); flagi = false; flag1-i = true; NCSi(); }
(1) одновременно внутри критической секции должно находиться не более одного потока
(2) критические секции не должны иметь приоритета в отношении друг друга
(3) остановка какого-либо потока вне его критической секции не должна влиять на дальнейшую работу потоков по использованию критического ресурса
(4) решение о вхождении потоков в их критические секции не откладывается на неопределенный срок, а является конечным во времени
(5) предлагаемое решение является корректным и не нарушает ни одного из перечисленных условий
Рассмотрим решение задачи взаимного исключения для двух потоков (i - номер потока). Какое из условий постановки задачи взаимного исключения может быть нарушено в предлагаемом решении? bool flag0 = false, flag1 = false;flag2 = 0;( true ){ flagi = true; flag2 = 1 - i; while( flag1-i && flag2 == 1 - i ) ; CSi(); flagi = false; NCSi(); }
(1) одновременно внутри критической секции должно находиться не более одного потока
(2) критические секции не должны иметь приоритета в отношении друг друга
(3) остановка какого-либо потока вне его критической секции не должна влиять на дальнейшую работу потоков по использованию критического ресурса
(4) решение о вхождении потоков в их критические секции не откладывается на неопределенный срок, а является конечным во времени
(5) предлагаемое решение является корректным и не нарушает ни одного из перечисленных условий