Главная / Программирование /
Параллельные вычисления и многопоточное программирование / Тест 7
Параллельные вычисления и многопоточное программирование - тест 7
Упражнение 1:
Номер 1
При распараллеливании цикла:
Ответ:
 (1) все итерации выполняются одновременно 
 (2) итерации выполняются последовательно, но в произвольном порядке 
 (3) некоторые итерации выполняются параллельно в произвольном порядке 
 (4) число параллельно выполняемых итераций зависит от числа свободных процессоров 
 (5) некоторые итерации выполняются параллельно, но порядок фиксирован – итерации с меньшими номерами выполняются раньше, чем итерации с большими номерами 
Номер 2
Что происходит при замене обычного цикла for
на его аналог Parallel.For
?
Ответ:
 (1) возникает исключительная ситуация, если итерации цикла являются зависимыми 
 (2) цикл будет выполняться и в случае зависимых итераций, но результаты вычислений всегда будут неверными 
 (3) цикл будет выполняться и в случае зависимых итераций, но результаты вычислений могут быть верными, а могут быть неверными 
Номер 3
Определить, являются ли итерации цикла независимыми, может:
Ответ:
 (1) программист 
 (2) компилятор языка C# 
 (3) JIT компилятор 
 (4) некоторые оптимизирующие компиляторы 
Упражнение 2:
Номер 1
Какой из операторов может встречаться только в итерации обычного цикла for
, но не Parallel.For
?
Ответ:
 (1) Continue
 
 (2) Break
 
 (3) Stop
 
Номер 2
Каких методов нет у класса Parallel
?
Ответ:
 (1) Invoke
 
 (2) ForEach
 
 (3) Wait
 
 (4) Task
 
Номер 3
При распараллеливании цикла сложно:
Ответ:
 (1) заменить цикл for
циклом Parallel.For
 
 (2) оценить накладные расходы 
 (3) выполнить балансировку нагрузки 
Упражнение 3:
Номер 1
Какие методы есть у класса Parallel
?
Ответ:
 (1) For
 
 (2) ForEach
 
 (3) While
 
Номер 2
Каких методов нет у класса Parallel
?
Ответ:
 (1) Invoke
 
 (2) ForEach
 
 (3) Wait
 
 (4) Task
 
Номер 3
Какой из операторов может встречаться только в итерации цикла Parallel.For
, но не в обычном for
?
Ответ:
 (1) Continue
 
 (2) Break
 
 (3) Stop
 
Упражнение 4:
Номер 1
Отметьте высказывания, истинные по отношению к методу, реализующему тело цикла Parallel.For
:
Ответ:
 (1) метод может не иметь параметров 
 (2) метод может иметь один параметр типа int
, задающий номер выполняемой итерации 
 (3) метод может иметь два параметра, - номер выполняемой итерации и параметр типа ParallelLoopState
, позволяющий управлять состоянием итерации 
 (4) метод может иметь два параметра, - номер выполняемой итерации и параметр типа ParallelLoopResult
, позволяющий управлять состоянием итерации 
Номер 2
Метод For
класса Parallel
является:
Ответ:
 (1) статическим 
 (2) динамическим 
 (3) функцией 
 (4) процедурой 
Номер 3
Тело цикла Parallel.For
:
Ответ:
 (1) должно быть методом, соответствующим делегату Action
 
 (2) может быть анонимным методом с соответствующей сигнатурой 
 (3) аналогично телу обычного цикла for
может быть представлено обычным оператором языка C# 
Упражнение 5:
Номер 1
Как узнать при выполнении Parallel.For
номер минимальной итерации, на которой происходит прерывание цикла, инициируемое выполнением оператора (метода) Break
?
Ответ:
 (1) узнать невозможно, поскольку итерации запускаются в произвольном порядке, так что впервые Break
может выполняться на итерации с большим номером 
 (2) необходимо метод, задающий тело цикла, описать как метод с двумя параметрами, что позволит вызвать метод STOP
, прерывающий выполнение итерации 
 (3) следует вызвать метод Break
как функцию, возвращающую в качестве результата номер минимальной итерации 
 (4) метод Parallel.For
следует вызывать как функцию, что позволит, используя свойство LowestBreakIteration
возвращаемого значения, определить номер минимальной итерации, на которой произошло прерывание 
Номер 2
Какие утверждения правильно описывают семантику выполнения метода Parallel.For
:
Ответ:
 (1) при запуске на выполнение метода Parallel.For
параллельно начинают выполняться некоторые итерации, число которых зависит от числа доступных процессоров, и номера которых могут быть произвольными 
 (2) если на одной или нескольких итераций параллельно выполняется метод Break
, то выполнение всех запущенных итераций прерывается и метод Parallel.For
завершает свою работу 
 (3) если на одной или нескольких итераций параллельно выполняется метод Break
, то выполнение всех запущенных итераций продолжается. После завершения всех запущенных итераций метод Parallel.For
завершает свою работу 
 (4) если на одной или нескольких итераций параллельно выполняется метод Break
, то выполнение всех запущенных итераций продолжается. Всегда запускаются все итерации с номерами, меньшими минимального номера итерации, на которой произошло прерывание 
Номер 3
Отметьте высказывания, истинные по отношению к методу Parallel.For
:
Ответ:
 (1) метод может вызываться как оператор 
 (2) метод может вызываться как функция 
 (3) значение, возвращаемое методом, имеет тип ParallelLoopState
 
 (4) значение, возвращаемое методом, имеет тип ParallelLoopResult
 
Упражнение 6:
Номер 1
Какие из следующих высказываний справедливы по отношению к распараллеливанию цикла while
:
Ответ:
 (1) для распараллеливания цикла следует применить метод Parallel.While
 
 (2) точную семантику цикла while
при распараллеливании в общем случае сохранить не удается 
 (3) на практике цикл while
почти всегда можно промоделировать циклом Parallel.For
, введя дополнительное ограничение на максимально возможное число итераций 
Номер 2
Какие высказывания справедливы по отношению к методу Parallel.Invoke
?
Ответ:
 (1) при вызове метода Parallel.Invoke
ему можно передать список методов, которые могут выполняться параллельно в произвольном порядке 
 (2) все методы, передаваемые Parallel.Invoke
, должны быть методами, определенными в одном и том же классе 
 (3) метод Parallel.For
позволяет достаточно просто промоделировать метод Parallel.Invoke
 
Номер 3
Отметьте высказывания, истинные по отношению к семантике двух методов Parallel.For
и Parallel.ForEach
:
Ответ:
 (1) семантика метода Parallel.ForEach
близка к семантике метода Parallel.For
в той же степени, как семантика обычного for
близка к семантике обычного foreach
. Методу, представляющему тело цикла, передается не произвольный номер итерации, а произвольный объект из коллекции, перебираемой в цикле 
 (2) семантики двух методов различаются в ситуации, когда на итерациях возникает прерывание цикла, инициированное выполнением метода Break
. Различие связано с тем, что у метода Parallel.ForEach
нет номера итерации 
 (3) семантики двух методов совпадают и в том случае, когда на итерациях возникает прерывание цикла, инициированное выполнением метода Break
, для метода Parallel.ForEach
используется внутренняя нумерация элементов коллекции 
Упражнение 7:
Номер 1
Какие утверждения справедливы по отношению исключений, выбрасываемых на итерациях циклов Parallel.For
и Parallel.ForEach
:
Ответ:
 (1) какой бы тип исключений не возникал на итерациях цикла, независимо от числа возникших исключений в результате выбрасывается одно агрегированное исключение AggregateException
 
 (2) информация о всех возникших исключениях теряется и не может быть обработана 
 (3) информация о всех возникших исключениях сохраняется и может быть проанализирована и обработана в обработчике исключения AggregateException
 
Номер 2
Какие высказывания истинны для цикла Parallel.ForEach
:
Ответ:
 (1) элементы коллекции доступны как для чтения, так и для записи 
 (2) элемент коллекции, передаваемый методу, выполняющему итерацию цикла, доступен только для чтения. При попытке записи возникает исключительная ситуация 
 (3) элемент коллекции, передаваемый методу, выполняющему итерацию цикла, может быть изменен, но эти изменения носят локальный характер и не отражаются на элементах самой коллекции, поскольку изменяется копия, а не сам элемент 
 (4) если требуется внести изменения в коллекцию, обрабатываемую в цикле, то это можно сделать, лишь создав новую коллекцию 
Номер 3
При выполнении методов Parallel.For
и Parallel.ForEach
на одной или нескольких итерациях могут возникать исключительные ситуации. Правда ли, что:
Ответ:
 (1) в момент возникновения такой ситуации выполнение всех итераций прекращается. Для каждой ситуации должен быть предусмотрен обработчик, перехватывающий выполнение 
 (2) все запущенные итерации продолжают выполняться, после чего запускаются итерации с номерами меньшими минимального номера итерации, на которой возникла исключительная ситуация. Обработчик ситуации следует предусмотреть только для итерации с минимальным номером 
 (3) все запущенные итерации продолжают выполняться, после чего запускаются итерации с номерами меньшими минимального номера итерации, на которой возникла исключительная ситуация. Все возникшие исключительные ситуации перехватываются, на их основе создается новая исключительная ситуация AggregateException
, для которой и следует предусмотреть обработчик ситуации