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