Главная /
Программирование /
Программирование на Intel Cilk Plus
Программирование на Intel Cilk Plus - ответы на тесты Интуит
Правильные ответы выделены зелёным цветом.
Все ответы: Курс представляет собой краткое введение в основы программирования на Intel® CilkTM Plus.
Все ответы: Курс представляет собой краткое введение в основы программирования на Intel® CilkTM Plus.
Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
(1)
cilk_spawn
(2)
cilk_init
(3)
cilk_open
(4)
cilk_start
(5)
cilk_send
Что такое редуктор?
(1) "Безопасная" реализация глобальной переменной в Cilk-программах
(2) оператор, выполняющий редукцию массива
(3) операция редукции
(4) локальная переменная в Cilk-программе
Почему использование расширенной индексной нотации в Intel® Cilk™ Plus при работе с массивами позволяет увеличить производительность программы?
(1) операции в расширенной индексной нотации эффективно векторизуются компилятором
(2) выигрыша в эффективности нет, нотация используется для удобства
(3) операции в расширенной индексной нотации заменяются компилятором вызовами функций MPI
(4) операции в расширенной индексной нотации заменяются компилятором вызовами функций
(5) OpenMP
Элементные функции - это функции, которые:
(1) обеспечивают векторизацию вычисления математических функций
(2) реализации элементарных математических функций
(3) скалярные математические функции
Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
(1)
grainsize
(2)
cilk_init
(3)
cilk_open
(4)
cilk_open
(5)
cilk_send
В чём заключается отрицательный эффект "гонок за данными"?
(1) утрата детерминизма в поведении программы
(2) утрата корректности
(3) уменьшение производительности параллельной программы
Третий элемент в расширенной векторной нотации
<1>:<2>[:<3>]
это:
(1) начальное значение индекса
(2) количество элементов в сечении массива
(3) максимальное значение индекса
(4) шаг изменения индекса
Что можно использовать в левой части оператора присваивания
x = sin(b[:]);
?
(1) сечение массива, конформного
b
(2) простую переменную
(3) любой массив
Является ли
cilk_send
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
Может ли влиять на наличие "гонок за данными" уровень оптимизации?
(1) да
(2) нет
Что означает запись
b[:]
?
(1) все элементы массива
b
(2) это недопустимая конструкция
(3) первый элемент массива
b
Какой код генерируется при компиляции кода с вызовом элементных функций?
(1) компилятор генерирует обращения к векторизованным функциям
(2) параллельный OpenMP-код
(3) параллельный код с использованием MPI
Является ли
cilk_spawn
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
В какой момент объединяются изображения переменных?
(1) при объединении потоков
(2) каждые 5 секунд
(3) в точке, заданной специальным оператором
Что означает запись
b[1:3][0:2]
?
(1) элементы
b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]
массива b
(2) элементы
b[0][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]
массива b
(3) элементы
b[1][0], b[2][11], b[2][0], b[2][1], b[3][0], b[3][1]
массива b
(4) элементы
b[1][0], b[1][1], b[2][1], b[2][1], b[3][0], b[3][1]
массива b
(5) элементы
b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][0]
массива b
Допускается ли использование прагм OpenMP в элементных функциях?
(1) нет
(2) да
Поддерживает ли Intel® Cilk™ Plus компилятор
ifort
?
(1) да
(2) нет
Что такое
reducer_list_append
?
(1) гиперобъект
(2) мьютекс
(3) массив
Правильным ли является оператор присваивания
c[1:5] = d[5:5]
?
(1) да
(2) нет
Допускается ли использование циклов
for
в элементных функциях?
(1) нет
(2) да
Что такое "точка порождения"?
(1) в этой точке создаётся новая задача, выполнение которой может быть продолжено данным потоком или захвачено другим потоком
(2) в этой точке создаётся новый процесс, который будет выполняться на том же процессоре
(3) в этой точке создаётся новый процесс, который будет выполняться на другом процессоре
Что такое
reducer_max_index
?
(1) гиперобъект
(2) мьютекс
(3) массив
Какое действие выполняется в следующем выражении
a[:]*b[:]
?
(1) поэлементное умножение массивов
a
и b
(2) это недопустимая конструкция
(3) умножение первых элементов
a
и b
Допускается ли использование 32 битовых переменных с плавающей точкой в элементных функциях?
(1) нет
(2) да
Выполняется ли в конце параллельного цикла барьерная синхронизация?
(1) да
(2) нет
Что такое
reducer_opadd
?
(1) гиперобъект
(2) мьютекс
(3) массив
Является ли правильным следующее выражение
a[:][:] + b[0][1]
?
(1) да
(2) нет
ЯДопускается ли использование указателей на функции в элементных функциях?
(1) нет
(2) да
Являются ли переходы в тело цикла препятствием к распараллеливанию цикла?
(1) да
(2) нет
Сохраняют ли гиперобъекты последовательную семантику программы?
(1) да
(2) нет
Является ли правильным следующий оператор:
a[1:s] = a[0:s] + 1;
?
(1) да
(2) нет
Какое действие выполняет функция
__sec_reduce_add(a[:])
?
(1) суммирование элементов массива a
(2) перемножение элементов массива a
(3) такой функции нет
В каком случае при диспетчеризации задач
Cilk
происходит захват работы?
(1) если есть свободный рабочий поток
(2) в любом случае
Редукторы можно использовать только в циклах.
(1) да
(2) нет
Какое действие выполняет функция
__sec_shift
?
(1) линейный сдвиг массива
(2) циклический сдвиг массива
(3) такой функции нет
Какие операции являются операциями редукции?
(1)
min_ind
(2)
all_zero
(3)
mul
(4)
sin
(5)
cos
(6)
pow
Для того, чтобы обозначить точку синхронизации в Cilk-программе, необходимо:
(1) добавить в соответствующем месте программы
cilk_spawn имя_функции()
(2) добавить в соответствующем месте программы
cilk_sync
Переменная называется локальной, если:
(1) область видимости переменной ограничена
(2) область видимости переменной не ограничена
(3) переменная не является массивом
Какая структура данных чаще всего встречается в вычислительных приложениях?
(1) массив
(2) скалярная переменная
(3) структура
Может ли элементная функция возвращать сечение массива?
(1) да
(2) нет
Какая функция в Cilk-программе называется "порождающей"?
(1) Функция, в которой находится оператор
cilk_spawn
(2) Функция, в которой находится прагма simd
Необходимо ли при использовании редукторов применять мьютексы?
(1) да
(2) нет
Принадлежит ли элемент
b[35]
сечению массива b[9:16]
?
(1) да
(2) нет
Для чего используется оператор
linear
в прагме #pragma simd linear(x,y) reduction(+:sum)
?
(1) для описания индуктивных операций
(2) для решения линейных уравнений
(3) для достижения линейной масштабируемости программы
Допускаются ли вложенные (рекурсивные) ветвления в Intel® Cilk™ Plus?
(1) да
(2) нет
Допустимо ли в программе на C++ использование оператора
cilk::reducer_min_index<size_t, T> r;
?
(1) да
(2) нет
Совпадает ли синтаксис расширенной индексной нотации Intel® Cilk™ Plus и индексной нотации Fortran 90?
(1) да
(2) нет
Может ли пользователь явно управлять балансировкой загрузки в Cilk-программе?
(1) да
(2) нет
Есть два фрагмента кода: 1)
cilk_spawn f(); cilk_spawn g(); cilk_sync;
2) cilk_spawn f(); g(); cilk_sync;
Какой из них является предпочтительным с точки зрения стиля и эффективности?
(1) 1)
(2) 2)
Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор
cilk::reducer_opadd<double> result(0);
?
(1)
reducer_opadd.h
(2)
reducer.h
(3)
cilk_opadd.h
(4)
cilk.h
Могут ли перечисленные операции применяться к сечениям массивов: |,&,,&&?
(1) да
(2) нет
(3) только
Имеются ли в Intel® Cilk™ Plus собственные таймеры?
(1) да
(2) нет
Intel® Cilk™ Plus входит в состав среды разработки Delphi.
(1) да
(2) нет
В программе для многоядерной архитектуры имеется потенциальная опасность гонок за данными. Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы избежать гонок за данными?
(1) редукторы
(2) векторизацию с помощью прагмы simd
(3) расширенную векторную нотацию
Как выполняются операции с разными элементами в выражении a[:] * b[:]?
(1) параллельно
(2) последовательно
Для чего предназначена функция
__cilkrts_get_worker_number()
?
(1) для определения идентификатора исполнителя
(2) для определения количества исполнителей
Intel® Cilk™ Plus поддерживает только векторный параллелизм.
(1) да
(2) нет
Является ли cilk::private гиперобъектом?
(1) да
(2) нет
В Cilk-программе необходимо использовать циклический сдвиг элементов массива. Какую функцию можно использовать для выполнения такого сдвига?
(1)
__sec_rotate(a[:], shift_val)
(2)
__sec_shift(a[:], shift_val)
(3) такой функции нет
Для чего предназначена функция
__cilkrts_get_total_workers()
?
(1) для определения суммарного числа слотов ID, в том числе и тех, которые являются неактивными
(2) для определения суммарного числа активных слотов ID
В чём различие между Cilk™ Plus и Cilk™?
(1) в использовании в Cilk™ Plus расширенной индексной нотации
(2) в использовании прагмы simd
(3) различия нет
(4) в наличии в Cilk™ Plus гиперобъектов
Можно ли избавиться от гонки за данными изменением алгоритма вычислений?
(1) да
(2) нет
Какое действие выполняет следующий оператор:
vx[i:m][j:n] += a*(U[i:m][j+1:n]-U[i:m][j:n]);
?
(1) модификацию подматрицы размером
m x n
, начиная с элемента (i, j)
(2) модификацию подматрицы размером
i x j
, начиная с элемента (S, n)
Какое значение возвращает вызов
__cilkrts_get_nworkers
при выполнении Cilk-программы в последовательном режиме?
(1) 4
(2) 1
(3) 0
(4) 100
Имеется следующий фрагмент кода:
cilk_init();
cilk_spawn f()
…
cilk_sync
В чём состоит ошибка программиста?
(1) в использовании несуществующей конструкции
cilk_init
(2) в неправильной последовательности ключевых слов
(3) в данном контексте нельзя использовать
cilk_spawn
Какое действие выполняет
get_value()
в редукторе?
(1) возвращает значение редуктора
(2) инициализирует редуктор
Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении
a[12:12]*b[1:12]
?
(1) да
(2) нет
Каким будет действие функции
__cilkrts_get_nworkers
, вызов которой размещён после оператора cilk_spawn
?
(1) В этом случае вызов функции
__cilkrts_get_nworkers
не приводит ни к каким действиям
(2) В этом случае вызов функции
__cilkrts_get_nworkers
работает так же, как и при вызове до оператора cilk_spawn
Допустимо ли следующее выражение в Cilk-программе:
var = cilk_spawn (object.*pointer)(args);
?
(1) да
(2) нет
Как влияет на производительность большое количество редукторов?
(1) улучшает
(2) ухудшает
(3) не влияет
В чём различие конструкций cilk_spawn [&]{ g(f()); }(); и cilk_spawn g(f());?
(1) в первом случае обе функции выполняются как порождённые, а во втором случае порождённой является только функция
g()
(2) в первом случае порождённой является только функция
g()
, а во втором случае обе функции выполняются как порождённые
(3) различия нет
Какой редуктор соответствует операции логического исключающего ИЛИ?
(1)
reducer_opxor
(2)
reducer_opand
(3)
reducer_or
(4)
reducer_xor
(5) такого редуктора нет
Допустима ли следующая форма распараллеливания цикла:
cilk_for (unsigned int i, j = 42; j < 1; i++, j++)
?
(1) да
(2) нет
Допустима ли следующая форма распараллеливания цикла:
int i; cilk_for (i = 0; i < 100; i++);
?
(1) да
(2) нет
(3) только в C (не в C++)
Допускается ли использование оператора
goto
в цикле cilk_for
?
(1) да
(2) нет
(3) только если переход происходит внутри цикла
Как влияет на величину накладных расходов большое значение
grainsize
?
(1) уменьшает
(2) увеличивает
Как задаётся "зернистость" распараллеливания цикла по умолчанию?
(1) согласно формуле
grainsize = min(512, N / (8*p))
(2) 1
(3) не определена
Что будет происходить, если "зернистость" распараллеливания цикла в Cilk-программе задана следующим образом:
#pragma cilk grainsize = n/(4*__cilkrts_get_nworkers())
?
(1) "Зернистость" распараллеливания цикла определяется в соответствии с числом исполнителей
(2) такая конструкция недопустима
Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
(1)
cilk_for
(2)
cilk_init
(3)
cilk_open
(4)
cilk_start
(5)
cilk_send
"Параллельные" глобальные переменные, позволяющие избежать гонок за данными в Intel® Cilk™ Plus это:
(1) редукторы
(2) параллели
(3) кондукторы
(4) таких переменных в Intel® Cilk™ Plus нет
Второй элемент в расширенной векторной нотации
<1>:<2>[:<3>]
это:
(1) количество элементов в сечении массива
(2) максимальное значение индекса
(3) шаг изменения индекса
Директива SIMD - это:
(1) подсказка компилятору выполнить векторизацию тех фрагментов кода, которые необходимо векторизовать
(2) подсказка компилятору выполнить OpenMP-распараллеливание тех фрагментов кода, которые необходимо векторизовать
(3) такой директивы в Intel® Cilk™ Plus нет
Является ли
cilk_init
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
"Гонок за данными" можно избежать, используя:
(1) синхронизацию доступа
(2) гиперобъекты Cilk
(3) векторизацию кода
Что обозначает символ :, используемый самостоятельно (без указания длины и шага) в расширенной индексной нотации?
(1) все элементы массива
(2) динамический массив
(3) это недопустимая конструкция
Каким будет результат вычисления следующего выражения
a[:] = pow(b[:], c);
?
(1) массив
b[:]**c
(2) степень
с
суммы элементов массива b
(3) это недопустимая конструкция
(4) массив
c**b[:]
Является ли
cilk_for
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
Относительно какого типа операций задаются редукторы?
(1) ассоциативных
(2) коммутативных
Что означает запись
b[:][5]
?
(1) 5 столбец матрицы
b
(2) 5 строку матрицы
b
(3) это недопустимая конструкция
(4) 5-й элемент одномерного массива b
Допускается ли использование операторов выбора в элементных функциях?
(1) нет
(2) да
Прагма SIMD используется в Intel® Cilk™ Plus для:
(1) векторизации кода
(2) оптимизации кода уровня O2
(3) распараллеливания кода с помощью OpenMP
(4) распараллеливания кода для графических процессоров
Для чего предназначена утилита cilkscreen?
(1) для выявления гонок за данными
(2) для вывода графических изображений в Cilk-программах
(3) такой утилиты нет
Правильным ли является оператор присваивания
c[1:5] = d[1:5]
?
(1) да
(2) нет
Допускается ли использование многопоточности OpenMP в элементных функциях?
(1) нет
(2) да
Поддерживает ли Intel® Cilk™ Plus компилятор
icc
?
(1) да (начиная с версии 12.0)
(2) да (все версии)
(3) нет
Что такое
reducer_list_prepend
?
(1) гиперобъект
(2) мьютекс
(3) массив
Правильным ли является оператор присваивания
c[:] = d[:]
?
(1) Да, если оба массива имеют одинаковое число элементов
(2) Да
(3) Нет
Допускается ли использование выражений с индексной нотацией в элементных функциях?
(1) нет
(2) да
Что такое "точка синхронизации"?
(1) в этой точке выполнение задач синхронизуется
(2) в этой точке выполняется проверка корректности расчётов
(3) в этой точке выполняется сохранение промежуточных результатов вычислений
Что такое
reducer_min?
(1) гиперобъект
(2) мьютекс
(3) массив
Какое действие выполняется в следующем выражении
a[3:2][3:2] + b[5:2][5:2]
?
(1) сложение двух матриц
2x2
(2) это недопустимая конструкция
Допускается ли использование указателей в элементных функциях?
(1) нет
(2) да
Являются ли цикловые зависимости препятствием к распараллеливанию цикла?
(1) да
(2) нет
Что такое
reducer_ostream
?
(1) гиперобъект
(2) мьютекс
(3) массив
Каким будет результат вычисления следующего выражения
a[:][:] + b[0][1]
?
(1) каждый элемент массива
a
суммируется с b[0][1]
(2) поэлементная сумма массивов
a
и b
(3) это недопустимая конструкция
Что является результатом операции редукции?
(1) скалярное значение
(2) массив
(3) сечение массива
Для чего предназначена прагма grainsize?
(1) задаёт гранулярность распараллеливания
(2) задаёт объём памяти
(3) задаёт размер кэш-памяти ядра
Имеется следующий код:
cilk::reducer_opadd<int> sum(3);
void f()
{cilk_spawn g(); sum += 2; cilk_sync;}
void g()
{sum++;}
Каким будет результат вычисления suS, если в процессе выполнения не произошло захвата работы?
(1) 6
(2) 2
(3) 4
(4) 8
Является ли правильным следующий оператор:
a[b[0:s]] = c[:];
?
(1) да
(2) нет
Какое действие выполняет функция
__sec_reduce(f, a[:])
?
(1) редукция массива
a
с помощью функции f
(2) суммирование элементов массива
a
(3) перемножение элементов массива
a
(4) такой функции нет
Как выполняется Cilk-программа, если нет свободных рабочих потоков?
(1) как обычная последовательная программа
(2) как параллельная программа
При использовании редукторов каждый поток имеет доступ к единственному общему экземпляру переменной.
(1) да
(2) нет
Какое действие выполняет функция
__sec_rotate
?
(1) линейный сдвиг массива
(2) циклический сдвиг массива
(3) такой функции нетт
Должен ли программист явным образом задавать способ диспетчеризации параллельной Cilk-программы?
(1) да
(2) нет
В программе имеется оператор
cilk_spawn g()
. Как будет выполняться функция g()
?
(1) как порождённая функция (потомок)
(2) как продолжение
(3) функция
g()
не выполняется Переменная называется глобальной, если
(1) область видимости переменной совпадает со всей программой
(2) область видимости переменной не совпадает со всей программой
(3) переменная является массивом или структурой
Что означает запись
a[17:3:2]
?
(1) элементы массива
a[17], a[19], a[21]
(2) элементы массива
a[17], a[20]
(3) такая запись недопустима
Имеется следующий код:
b[0] = 0; b[1] = 3.14159; с[3:1] = sin(b[:]);
Каким будет результат вычисления c?
(1)
c[3] = 0; c[4] = 0;
(2)
c[3] = 0; c[4] = 1;
(3)
c[3] = 1; c[4] = 0;
Что выполняет балансировку Cilk-программы?
(1) runtime система
(2) брокер ресурсов Cilk
(3) сама программа
Может ли переменная быть описана как редуктор относительно операции объединения списков?
(1) да
(2) нет
Корректен ли оператор
c[2:10:2] = a[1:10] - b[14:10:11]
?
(1) да
(2) нет
Для чего используется оператор
reduction
в прагме #pragma simd linear(x,y) reduction(+:sum)
?
(1) для описания переменной редукции
(2) для описания операции редукции
(3) такого оператора нет
Как в Linux (bash) задать количество исполнителей?
(1)
export CILK_NWORKERS
= количество исполнителей
(2)
NWORKERS
= количество исполнителей
(3)
export CILK
= количество исполнителей Какой заголовочный файл необходимо использовать в программе на C++, если в ней используется оператор
cilk::reducer_min_index<size_t, T> r;
?
(1)
reducer_min.h
(2)
reducer.h
(3)
cilk_reducer_min.h
Могут ли перечисленные операции применяться к сечениям массивов: +, -, *, /?
(1) да
(2) нет
(3) только + и -
Какие средства Intel® Cilk™ Plus Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
(1) расширенную векторную нотацию для массивов
(2) редукторы
(3) специальные ключи компиляции
Intel® Cilk™ Plus является библиотекой, имеющей интерфейсы к языкам программирования Fortran. C/C++, Java?
(1) да
(2) нет
Имеется код
cilk::reducer_opadd<double> result(0);
cilk_for(int i=0; i<data.GetSize(); i++)
result += operation(data[i]);
return xxx;
Что следует подставить вместо xxx?
(1)
result.get_value()
(2) 0
(3)
result_of_op
Могут ли перечисленные операции применяться к сечениям массивов: ++,--, +=, -=?
(1) да
(2) нет
(3) только += и -=
(4) только ++
Имеются ли в Intel® Cilk™ Plus средства обмена сообщениями между процессами?
(1) да
(2) нет
Intel® Cilk™ Plus поддерживается компиляторами Intel версий 10.0 и 11.0.
(1) да
(2) нет
Какую функцию можно использовать для вычисления суммы всех элементов массива?
(1)
__sec_reduce_add(a[:])
(2)
__sec_add(a[:])
(3)
__sec_reduce(a[:])
Правильно ли запрограммировано умножение двух матриц в выражении a[:][:]*b[:][:]?
(1) да
(2) нет
Для чего предназначена функция
__cilkrts_get_nworkers()
?
(1) для определения идентификатора исполнителя
(2) для определения количества исполнителей
Intel® Cilk™ Plus одновременно поддерживает векторный параллелизм и параллелизм типа fork-join.
(1) да
(2) нет
В Cilk-программе необходимо выполнить конкатенацию списков. Какой гиперобъект следует для этого использовать?
(1)
reducer_list_append
(2)
reducer_list_add
(3)
reducer_add
Можно ли использовать сечение массива в качестве аргумента функции?
(1) да
(2) нет
В каком случае в Cilk-программе используется заголовочный файл cilk_api.h?
(1) в случае использования в программе функций прикладного программного интерфейса Cilk
(2) всегда
(3) такого заголовочного файла нет
Должны ли быть определены аргументы порождённой функции в родительском коде до момента порождения потомка?
(1) да
(2) нет
Может ли гонка за данными не влиять на результат работы программы?
(1) да
(2) нет
Имеется следующий фрагмент программы:
if(a[0:n] < b[0:n])
c[0:n] = 0;
else
c[0:n] = 1;
(1) присваивание нулевых значений элементам массива
c
с индексами, для которых a[i]<b[i]
и единицы для всех прочих
(2) присваивание единичных значений элементам массива
c
с индексами, для которых a[i]<b[i]
и нулевых для всех прочих
(3) такая конструкция недопустима
Идентификаторы исполнителей непрерывно заполняют определённый диапазон значений. Верно ли это утверждение?
(1) да
(2) нет
Чему по умолчанию равно количество исполнителей в Cilk-программе?
(1) числу ядер процессора
(2) 1
(3) не определено
Из каких логических частей состоит пользовательский редуктор?
(1) класс
View;
класс Monoid;
гиперобъект, создающий изображения переменной; реализация действий с данными
(2) класс
View;
класс Monoid
(3) класс
View;
класс Monoid;
гиперобъект, создающий изображения переменной Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении
a[12:12]*b[12:15]
?
(1) да
(2) нет
Допустимо ли следующее выражение в Cilk-программе:
cilk_spawn [&]{ g(f()); }();
?
(1) да
(2) нет
Какой редуктор соответствует операции логического ИЛИ?
(1)
reducer_opor
(2)
reducer_or
(3)
reducer_xor
(4) такого редуктора нет
Распространяется ли действие
cilk_sync
на все порождённые функции?
(1) нет, только на потомки той функции, где находится
cilk_sync
(2) да
Какой редуктор соответствует операции конкатенации строк?
(1)
reducer_basic_string
(2)
reducer_string
(3)
reducer_basic
(4) такого редуктора нет
Допустима ли следующая форма распараллеливания цикла:
cilk_for (unsigned int i = 1; i < 16; ++i) i = f();
?
(1) да
(2) нет
Допускается ли использование оператора
break
в цикле cilk_for
?
(1) да
(2) нет
Допустима ли следующая форма распараллеливания цикла:
cilk_for (unsigned int i = 0; i != i; i += 0);
?
(1) да
(2) нет
Как влияет на величину накладных расходов маленькое значение
grainsize
?
(1) уменьшает
(2) увеличивает
Каким будет результат, если задать "зернистость" распараллеливания цикла равной нулю?
(1) будет использоваться значение по умолчанию
(2) "зернистость" будет нулевой
(3) "зернистость" будет равна 1
В каком случае уменьшение "зернистости" распараллеливания цикла приводит к улучшению производительности Cilk-программы?
(1) если объём вычислительной работы значительно меняется от итерации к итерации
(2) если объём вычислительной работы незначительно меняется от итерации к итерации
(3) в любом случае
(4) Не влияет в любом случае
Какие из нижеперечисленных являются ключевыми словами Intel® Cilk™ Plus?
(1)
cilk_sync
(2)
cilk_init
(3)
cilk_open
(4)
cilk_open
(5)
cilk_send
Гонки за данными возникают при:
(1) одновременном доступе из разных потоков к одной переменной
(2) последовательном доступе из разных потоков к одной переменной
(3) одновременном доступе из разных потоков к разным переменным
Первый элемент в расширенной векторной нотации
<1>:<2>[:<3>]
это:
(1) начальное значение индекса
(2) количество элементов в сечении массива
(3) максимальное значение индекса
(4) шаг изменения индекса
Что такое "элементная функция"?
(1) функция, которая формирует результат вычисления скалярной функции для каждого элемента массива-аргумента
(2) таких функций в Intel® Cilk™ Plus нет
Является ли
cilk_start
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
Может ли влиять на наличие "гонок за данными" размер машинного слова?
(1) да
(2) нет
Что означает запись
b[13:57]
?
(1) элементы массива
b
с 13
по 57
(2) элементы массива
b[13]
и b[57]
(3) это недопустимая конструкция
Каким будет результат вычисления следующего выражения
a[:] = pow(c, b[:]);
?
(1) массив
b[:]**c
(2) степень
с
суммы элементов массива b
(3) это недопустимая конструкция
(4) массив
c**b[:]
Является ли
cilk_sync
допустимым ключевым словом Intel® Cilk™ Plus?
(1) да
(2) нет
Что такое "изображение" переменной?
(1) экземпляр переменной
(2) имя переменной
(3) значение переменной
Что означает запись
b[1:3:4]
?
(1) элементы
b[1], b[5], b[9]
массива
(2) элементы
b[1], b[4], b[8], b[11]
массива
(3) первый элемент квадратной 3x3 матрицы b
(4) это недопустимая конструкция
Допускается ли использование ассемблерных вставок в элементных функциях?
(1) нет
(2) да
Поддерживает ли Intel® Cilk™ Plus компилятор
GCC
?
(1) да, начиная с версии 4.7
(2) да, любая версия
(3) нет
Что такое
cilk::reducer
?
(1) гиперобъект
(2) мьютекс
(3) массив
Правильным ли является оператор присваивания
c[1:5] = d[2:15]
?
(1) да
(2) нет
Допускается ли использование многопоточности Cilk в элементных функциях?
(1) нет
(2) да
Назначение переменной окружения
CILK_NWORKERS
:
(1) задание количества потоков
(2) задание количества ядер процессора
(3) задание количества процессов
Что такое
reducer_max
?
(1) гиперобъект
(2) мьютекс
(3) массив
Правильным ли является оператор присваивания
c[:] = d[:][:]
?
(1) да
(2) нет
Допускается ли использование 64 битовых переменных с плавающей точкой в элементных
(1) нет
(2) да
Какое ключевое слово в Intel® Cilk™ Plus используется для распараллеливания цикла
(1)
cilk_for
(2)
cilk_sync
(3)
cilk_spawn
Что такое
reducer_min_index
?
(1) гиперобъект
(2) мьютекс
(3) массив
Является ли правильным следующее выражение
a[0:4][1:2] + b[1:2]
?
(1) да
(2) нет
Допускается ли использование 32 битовых переменных типа
signed int
в элементных функциях?
(1) нет
(2) да
Являются ли переходы из тела цикла препятствием к распараллеливанию цикла?
(1) да
(2) нет
Что такое
reducer_basic_string
?
(1) гиперобъект
(2) мьютекс
(3) массив
Является ли правильным следующий оператор:
a[:] = c;
?
(1) да
(2) нет
Что является аргументом операции редукции?
(1) массив
(2) сечение массива
(3) скалярное значение
(4) функция
Какой из вариантов распараллеливания допускается в Intel® Cilk™ Plus?
(1) замена заголовка цикла for на
cilk_for
(2) использование прагмы распараллеливания цикла
(3) в Intel® Cilk™ Plus циклы не распараллеливаются
Имеется следующий код:
cilk::reducer_opadd<int> sum(3);
void f()
{cilk_spawn g(); sum += 2; cilk_sync;}
void g()
{sum++;}
Каким будет результат вычисления suS, если в процессе выполнения произошёл захват работы?
(1) 6
(2) 2
(3) 4
(4) 8
Является ли правильным следующий оператор:
c[0:s] = a[b[:]];
?
(1) да
(2) нет
Какие операции являются операциями редукции?
(1)
add
(2)
mul
(3)
sin
(4)
cos
(5)
pow
Для того, чтобы обозначить точку порождения в Cilk-программе, необходимо:
(1) добавить в соответствующем месте программы
cilk_spawn имя_функции()
(2) добавить в соответствующем месте программы
cilk_sync
Имеется код
cilk::reducer_opadd<float> sum = 0;
...
cilk_for( size_t i=1; i<n; ++i )
sum += f(i);
... = sum.get_value();
Что произойдёт с переменной sum после порождения новых потоков?
(1) каждый поток получит доступ к собственному "изображению" переменной sum
(2) каждый поток получит доступ к общей переменной sum
(3) переменная sum доступна только из мастер-потока
Какие инструкции порождает компилятор при компиляции кода с использованием векторной нотации?
(1) SSE
(2) AVX
(3) MIMD
(4) SIMD
В каком режиме выполняется программа на Cilk, если нет свободных рабочих потоков?
(1) в последовательном
(2) в параллельном
В программе имеются операторы
cilk_spawn g()
и cilk_sync
. Как будет выполняться фрагмент программы между этими операторами?
(1) как "продолжение"
(2) как потомок
Возникает ли гонка за данными, если два потока выполняют чтение из общей переменной?
(1) да
(2) нет
Принадлежит ли элемент
a[15]
сечению массива a[11:4:3]
?
(1) да
(2) нет
Выберите 3 способа векторизации кода в Cilk-программах.
(1) расширенная векторная нотация
(2) использование элементных функций
(3) прагма SIMD
(4) замена арифметических операций функциями SSE
Может ли произойти возврат из функции, вызванной в одном потоке, в другом потоке?
(1) да, если функция содержит
cilk_spawn
(2) да, в любом случае
(3) нет
Может ли переменная быть описана как редуктор относительно операции возведения в степень?
(1) да
(2) нет
Корректен ли оператор
c[2:10:2] = a[1:10] - b[14:11:10]
?
(1) да
(2) нет
Можно ли использовать прагму
#pragma simd
в цикле с условным оператором (if)
?
(1) да
(2) нет
Как в командной строке Windows задать количество исполнителей?
(1)
set CILK_NWORKERS
= количество исполнителей
(2)
set __NWORKERS
= количество исполнителей
(3)
set CILK_N
= количество исполнителей Сколько изображений переменной, описанной как гиперобъект, будет использоваться в программе, исполняющейся в 5 потоках?
(1) 5
(2) 0
(3) 1
(4) 15
Могут ли перечисленные операции применяться к сечениям массивов: %, <,==,!=,>?
(1) да
(2) нет
(3) только = = и !=
Какие средства Intel® Cilk™ Вы будете использовать для того, чтобы использовать возможности векторной архитектуры?
(1) прагму SIMD
(2) редукторы
(3) специальные ключи компиляции
Intel® Cilk™ Plus поддерживается компиляторами Portland Group.
(1) да
(2) нет
Имеется код
cilk::reducer_opadd<float> sum;
void f( int m ) {
sum += m;
}
float g() {
cilk_spawn f(1);
f(2);
cilk_sync;
return xxx;
}
Что следует подставить вместо xxx?
(1)
sum.get_value()
(2) 0
(3) ничего
Могут ли перечисленные операции применяться к сечениям массивов: *=, /=?
(1) да
(2) нет
(3) только *=
(4) только /=
В Cilk-программе для одномерного массива значений необходимо сформировать одномерный массив синусов. Как это сделать?
(1) использовать соответствующую элементную функцию
(2) использовать цикл и "стандартную" функцию sin
Intel® Cilk™ Plus поддерживает только параллелизм типа fork-join.
(1) да
(2) нет
Является ли
cilk::reducer
гиперобъектом?
(1) да
(2) нет
Какие операции машинного уровня генерирует компилятор для выражений вида a[b[0:s]] = c[:] и c[0:s] = a[b[:]]?
(1) операции распределения и сбора данных для целевой архитектуры
(2) операции редукции
Для чего предназначена функция
__cilkrts_set_param()
?
(1) для задания параметров исполнения Cilk-программы
(2) для задания параметров гиперобъекта
(3) для задания параметров исполнения заданного потока
Что произойдёт при обработке программы с прагмой
#pragma simd
компилятором, не поддерживающим Intel® Cilk™ Plus?
(1) прагма игнорируется
(2) происходит сбой программы
Необходимо ли при использовании редукторов применять блокировки?
(1) да
(2) нет
Какое условие должно выполняться при использовании сечения массива в качестве аргумента функции?
(1) Фактический и формальный аргументы должны быть согласованы
(2) такое использование допустимо в любом случае
Какой заголовочный файл следует использовать в случае использования в программе функций прикладного программного интерфейса Cilk?
(1)
cilk_api.h
(2)
api.h
(3)
cilk.h
(4)
никакой
В Cilk-программе имеется следующий код:
cilk_sync; … cilk_spawn g();
. В чём заключается ошибка?
(1) неправильный порядок
cilk_spawn
и cilk_syn
(2) используются несуществующие ключевые слова
(3) используются несуществующее ключевое слово
Допускается ли в Intel® Cilk™ Plus определение пользовательских гиперобъектов?
(1) да
(2) нет
Правильно ли запрограммировано вычисление скалярного произведения двух векторов в выражении
a[:]*b[:]
?
(1) да, если они содержат одинаковое количество элементов
(2) да
(3) нет
Можно ли изменить число исполнителей после вызова функции
__cilkrts_get_nworkers
?
(1) да
(2) нет
Допустимо ли следующее выражение в Cilk-программе:
g(cilk_spawn f());
?
(1) да
(2) нет
Как ведёт себя редуктор, если не происходит захвата работы?
(1) Как обычная переменная
(2) Поведение редуктора в этом случае не определено
Правильно ли задано сечение массива:
[12:10]
?
(1) да
(2) нет
Допустимо ли следующее выражение в Cilk-программе:
cilk_spawn g(f());
?
(1) да
(2) нет
Какой редуктор соответствует операции логического И?
(1)
reducer_opand
(2)
reducer_and
(3)
reducer_or
(4)
reducer_xor
(5) такого редуктора нет
Как происходит распределение итераций цикла на каждом уровне рекурсии при использовании
cilk_sync
?
(1) половина работы отдаётся потомку, половина выполняется в режиме продолжения
(2) одна итерация отдаётся потомку, остальные выполняются в режиме продолжения
(3) большая часть работы отдаётся потомку, одна итерация выполняется в режиме продолжения
Какой редуктор используется при работе с параллельными потоками?
(1)
reducer_ostream
(2)
reducer_stream
(3)
stream
Допустима ли следующая форма распараллеливания цикла:
cilk_for (unsigned int i = 1; i < x; ++i) x = f();
?
(1) да
(2) нет
Допускается ли использование оператора
return
в цикле cilk_for
?
(1) да
(2) нет
Что определяет величина
grainsize
в параллельных циклах cilk_for
?
(1) количество итераций в отдельной "порции" цикла
(2) размер оперативной памяти компьютера
(3) технологический процесс, по которому выполнено ядро процессора
Как можно задать "зернистость" распараллеливания цикла, равную единице?
(1) с помощью прагмы
#pragma cilk grainsize = 1
(2) с помощью ключа компилятора
(3) с помощью переменной окружения
Каким будет результат, если задать отрицательное значение "зернистость" распараллеливания цикла?
(1) результат не определён
(2) 1
(3) будет использоваться значение по умолчанию
Как следует изменить "зернистость" распараллеливания цикла, если его итерации равномерно малы по объёму вычислительной работы?
(1) уменьшить
(2) увеличить