Главная / Программирование /
Параллельное программирование для многоядерных процессоров / Тест 9
Параллельное программирование для многоядерных процессоров - тест 9
Упражнение 1:
Номер 1
Какой уровень параллелизма в библиотеке PFX является базовым?
Ответ:
 (1) уровень декларативной обработки данных 
 (2) уровень императивной обработки данных 
 (3) уровень императивной работы с задачами 
Номер 2
Какой уровень параллелизма в библиотеке PFX является универсальный и более гибкий?
Ответ:
 (1) уровень императивной обработки данных на базе конструкций Parallel.For/ForEach/InvokeБ
 
 (2) уровень императивной работы с задачами (tasks) 
 (3) уровень декларативной обработки данных  
Номер 3
Укажите уровень параллелизма библиотеки PFX использующий PLINQ
Ответ:
 (1) уровень императивной работы с задачами 
 (2) уровень императивной обработки данных 
 (3) уровень декларативной обработки данных 
Упражнение 2:
Номер 1
Укажите правильное объявление функции запроса потока у пула с использованием библиотеки PFX:
Ответ:
 (1)
Task.CreateThread(delegate { ... });
 
 (2)
Task.New(delegate { ... });
 
 (3)
Task.Create(delegate { ... });
 
Номер 2
Укажите что выполняет следующий пример:
Task t1 = Task.Create(delegate { A(); });
Task t2 = Task.Create(delegate { B(); });
Task t3 = Task.Create(delegate { C(); });
t1.Wait();
t2.Wait();
t3.Wait();
Ответ:
 (1) последовательное выполнение трёх задач и ожидание завершения их выполнения 
 (2) параллельное выполнение трёх задач и ожидание завершения их выполнения 
 (3) последовательное выполнение двух задач с ожиданием третьей 
Номер 3
Аналогом какого класса является класс System.Threading.Tasks.Task
?
Ответ:
 (1) System.Threading.ThreadPool
 
 (2) System.Threading.Parallel
 
 (3) System.Threading.Pool
 
Упражнение 3:
Номер 1
Что происходит при вызове метода Task.Create
?
Ответ:
 (1) задача запускается на выполнение сразу после вызова этого метода 
 (2) задача помещается в очередь планировщика задач 
 (3) задача запускается на выполнение и после этого помещается в очередь планировщика 
Номер 2
Какие методы отменяют выполнение задачи?
Ответ:
 (1) Task.Cancel
 
 (2) Task.WaitAll
 
 (3) Task.CancelAndWait
 
Номер 3
Укажите параметры передаваемые планировщику задач бибилиотеки PFX:
Ответ:
 (1) minProcessors
 
 (2) maxProcessors
 
 (3) maxStackSize
 
 (4) idealThreadsPerProcessor
 
 (5) threadPriority
 
Упражнение 4:
Номер 1
В Чём отличие класса System.Threading.Tasks.Future<T>
от классаSystem.Threading.Taks.Task
?
Ответ:
 (1) класс Future<T>
может возвращать значение 
 (2) объекты класса Future<T>
могут создаваться без указания тела задачи 
 (3) класс Future<T>
не может возвращать значение 
Номер 2
Укажите в каком примере происходит распараллеливание выполнения функции, вычисляющей количество узлов в бинарном дереве
Ответ:
 (1)
int CountNod(Tree<int> node)
{
if (node == null)
return 0;
return 1 + CountNod(node.Left) + CountNod(node.Right);
}
 
 (2)
int CountNod(Tree<int> node)
{
if (node == null)
return 0;
return CountNod(node.Left) + CountNod(node.Right);
}
 
 (3)
int CountNod(Tree<int> node)
{
if (node == null)
return 0;
var left = Future.Create(() => CountNod(node.Left));
int right = CountNod(node.Right);
return 1 + left.Value + right;
}
 
Номер 3
Укажите в каком примере происходит распараллеливание с применением PLINQ?
Ответ:
 (1)
var q = (from d in _doubles.AsParallel()
where Test(d)
orderby d
select d).ToArray();
 
 (2)
var q = (from d in _doubles
where Test(d)
orderby d
select d).ToArray();
 
 (3)
var q = (from e in _ent
where TestForEntity(e)
select e).ToArray();
 
Упражнение 5:
Номер 1
Укажите правильный вариант распараллеливания запроса LINQ в PLINQ:
IEnumerable<T> data = ...;
var q = data.Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
foreach (var e in q) a(e);
Ответ:
 (1)
IEnumerable<T> data = ...;
var q = data.AsParallel().Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
foreach (var e in q) a(e);
 
 (2)
IEnumerable<T> data = ...;
var q = from x in data.AsParallel() where p(x) orderby k(x) select f(x);
foreach (var e in q) a(e);
 
 (3)
IEnumerable<T> data = ...;
var q = data.Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
Parallel.foreach (var e in q) a(e);
 
Номер 2
Укажите правильные утверждения в отношении PLINQ
Ответ:
 (1) это механизм выполнения запросов, принимающий любые запросы LINQ 
 (2) PLINQ автоматически использует несколько процессоров или ядер для исполнения 
 (3) параллелизм данных, лежащий в основе PLINQ, гарантирует, что программы сохранят масштабируемость по мере роста наборов данных 
Номер 3
К чему приводит использование распараллеливания легковесных операций с применением Future<T>
?
Ответ:
 (1) увеличению времени работы параллельной программы 
 (2) ростом дополнительных издержек на создание объектов класса Future<T>
 
 (3) значительному выделению памяти 
Упражнение 6:
Номер 1
Что обеспечивает класс BlockingCollection<T>
библиотеки PFX?
Ответ:
 (1) блокирование потребителей при отсутствии данных в очереди 
 (2) блокирование производителей при достижении определенного объема данных в очереди 
 (3) возможность параллельной работы с несколькими очередями 
Номер 2
Какой потокобезопасный вариант стандартного стека используется в библиотеке PFX?
Ответ:
 (1) System.Threading.Collections.ConcurrentStack<T>
 
 (2) System.Collections.Generics.Stack<T>
 
 (3) System.Threading.Collections.ConcurrentQueue<T>
 
Номер 3
Укажите что выполняет следующий код класса ConcurrentQueue<T>
:
Data dt;
while(queue.TryDequeue(out dt))
{
Func(dt);
}
Ответ:
 (1) помещает елементы в очередь 
 (2) извлекает елементы из очереди 
 (3) помещает елементы в стек 
Упражнение 7:
Номер 1
С помощью какого метода происходит распараллеливание запроса PLINQ?
Ответ:
 (1) Range()
 
 (2) AsParallel()
 
 (3) ParallelLINQ(...)
 
Номер 2
В какую библиотеку встроена реализация параллельного интегрированного языка запросов PLINQ?
Ответ:
 (1) System.Linq
 
 (2) System.Threading
 
 (3) System.PLinq
 
Номер 3
Укажите вариант правильного распараллеливания следующего запроса (схематично):
IEnumerable<T> Data = …;
var query = from x in Data where p(x) orderby k(x)
select f(x);
foreach (var e in query)
func(e);
Ответ:
 (1)
IEnumerable<T> Data = …;
var query = from x in Data.AsParallel() where p(x) orderby k(x)
select f(x);
foreach (var e in query)
func(e);
 
 (2)
IEnumerable<T> Data = …;
var query = from x in Data
select f(x);
foreach (var e in query)
func(e);
 
Упражнение 8:
Номер 1
Укажите правильное определение операции агрегирования в LINQ:
Ответ:
 (1) это операция выполняющая сортировку в последовательности элементов 
 (2) это операция определяющая размер некоторой последовательности элементов 
 (3) это операция вычисления некоторого суммарного, сводного значения по некоторому множеству элементов 
Номер 2
Какая функция-шаблон ипользуется в языке LINQ для операций агрегирования
Ответ:
 (1) Aggregate
 
 (2) Parallel.For
 
 (3) Parallel.ForEach
 
Номер 3
Укажите примеры операций агрегирования:
Ответ:
 (1) вычисление суммы последовательности чисел 
 (2) определение минимального или максимального значения последовательности 
 (3) вычисление суммы квадратов последовательности 
 (4) возведение в степень некоторого числа 
Упражнение 9:
Номер 1
Какие параметры необходимо указать при использовании функции Aggregate
в LINQ?
Ответ:
 (1) исходную обрабатываемую последовательность 
 (2) начальное значение переменной-аккумулятора 
 (3) конечное значение переменной-аккумулятора 
 (4) вычислительную функцию 
 (5) функцию пост-обработки результата 
Номер 2
Что является необходимым условием корректности параллельного вычисления операции агрегирования?
Ответ:
 (1) коммутативность и ассоциативность функции пост-обработки результата 
 (2) коммутативность и ассоциативность функции редукции 
 (3) указания начального значения seed
переменной-аккумулятора 
Номер 3
Может ли любая операция агрегирования корректно вычислена с помощью шаблонов типа Aggregate в PLINQ?
Ответ:
 (1) может всегда 
 (2) может, если заранее результат моделирования шагов вычисления дает корректный результат 
Упражнение 10:
Номер 1
Какова особенность исключений в параллельных приложениях?
Ответ:
 (1) исключительные ситуации могут возникнуть только в потоке имеющем наибольший приоритет 
 (2) обработка возникших исключительных ситуаций может выполняться в отдельном потоке 
 (3) исключительные ситуации могут возникнуть одновременно в разных потоках 
Номер 2
Что происходит при одновременном возникновении нескольких исключительных ситуаций при использовании библиотеки PFX?
Ответ:
 (1) все возникшие исключения собираются в единое исключение типа System.Threading.AggregateException
 
 (2) все исключения обрабатываются средствами самой библиотеки 
 (3) все возникшие исключения собираются в единое исключение типа System.Exception
 
Номер 3
Какой общий принцип перехвата исключений в параллельной программе?
Ответ:
 (1) перехват исключительных ситуаций необходимо выполнять как можно дальше от места их возникновения 
 (2) перехват исключительных ситуаций необходимо выполнять как можно ближе к месту их возникновения 
 (3) перехват исключительных ситуации осуществляется только средствами библиотеки PFX, без применения дополнителной обработки 
Упражнение 11:
Номер 1
Какие координационные структуры данных PFX используются для безопасного применения в многопоточной среде?
Ответ:
 (1) ConcurrentQueue<T>
 
 (2) Queue<T>
 
 (3) ConcurrentStack<T>
 
Номер 2
Возможна ли модификация объектов классов ConcurrentQueue<T>
и СoncurrentStack<T>
в цикле foreach
?
Ответ:
 (1) возможна 
 (2) невозможна 
Номер 3
Укажите в каком из примеров выполнение кода вызовет исключительную ситуацию?
Ответ:
 (1)
var q = new Queue<int> (new[] {1, 2, 3, 4, 5});
foreach (var item in q)
{
if (item <= 2) q.Enqueue(item * 2);
}
 
 (2)
var q = new ConcurrentQueue<int> (new[] {1, 2, 3, 4, 5});
foreach (var item in q)
{
if (item <= 2)
q.Enqueue(item * 2);
}
 
 (3)
var s = new ConcurrentQueue<int> (new[] {1, 2, 3, 4, 5});
foreach (var item in s)
{
s.Enqueue(item * 2);
}
 
Упражнение 12:
Номер 1
Какие координирующие структуры данных используются в библиотеке PFX?
Ответ:
 (1) System.Threading.LazyInit<T>
 
 (2) System.Threading.WriteOnce<T>
 
 (3) System.Threading.Collections.BlockingCollection<T>
 
Номер 2
Какой класс библиотеки PFX используется для того чтобы отложить создание объекта, до того момента когда он действительно потребуется?
Ответ:
 (1) System.Threading.LazyInit<T>
 
 (2) System.Threading.WriteOnce<T>
 
 (3) System.Threading.Collections.ConcurrentQueue<T>
 
Номер 3
Какой класс библиотеки PFX используется для работы с полями допускающими однократное присваивание.
Ответ:
 (1) System.Threading.Collections.ConcurrentStack<T>
 
 (2) System.Threading.LazyInit<T>
 
 (3) System.Threading.WriteOnce<T>