Главная / Программирование /
Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi) / Тест 3
Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi) - тест 3
Упражнение 1:
Номер 1
Модели программирования для сопроцессора Intel Xeon Phi это
Ответ:
 (1) Offload, OpenMP 
 (2) Offload, MPI 
 (3) MPI, OpenMP 
Номер 2
При разработке программ для сопроцессора Intel Xeon Phi
Ответ:
 (1) требуется использовать специальный язык программирования 
 (2) можно использовать языки C\C++ и Fortran 
Номер 3
При разработке программ для сопроцессора Intel Xeon Phi
Ответ:
 (1) требуется использовать специальную библиотеку функций 
 (2) можно использовать MPI, OpenMP, Cilk Plus, TBB 
Номер 4
Для каких вычислительных систем предназначена технология OpenMP?
Ответ:
 (1) для систем с общей памятью 
 (2) для систем с распределенной памятью 
Номер 5
Технология программирования OpenMP расширяет язык программирования за счет:
Ответ:
 (1) новых ключевых слов 
 (2) новых библиотечных функций и переменных окружения 
 (3) новых директив и специальных комментариев 
Упражнение 2:
Номер 1
Отметьте верные утверждения об OpenMP:
Ответ:
 (1) OpenMP ориентирован в первую очередь на написание программ для векторно-конвейерных компьютеров 
 (2) большинство конструкций OpenMP реализуется с помощью директив и/или специальных комментариев 
 (3) число параллельных потоков OpenMP приложения может определяться переменной окружения 
 (4) весь параллелизм приложения реализуется только с помощью параллельных циклов  
Номер 2
Для создания параллельной области необходимо использовать директиву:
Ответ:
 (1) #pragma parallel
 
 (2) #pragma omp parallel
 
 (3) #pragma omp
 
 (4) #pragma omp for
 
Номер 3
Какое количество потоков может быть создано в рамках параллельной секции?
Ответ:
 (1) меньше количества вычислительных элементов 
 (2) большее количества вычислительных элементов 
 (3) равное количеству вычислительных элементов 
Номер 4
Что определяет количество потоков в рамках параллельной секции?
Ответ:
 (1) количество вычислительных элементов 
 (2) значение переменных окружений 
 (3) вызовы библиотечных функций библиотеки OpenMP 
Упражнение 3:
Номер 1
Для распределения итераций цикла между потоками необходимо использовать следующую директиву OpenMP:
Ответ:
 (1) #pragma omp parallel for
 
 (2) #pragma omp for
, если данная директива находится внутри параллельной области 
 (3) #pragma parallel for
 
 (4) #pragma omp sections
 
Номер 2
Какая директива OpenMP может быть использована для синхронизации потоков?
Ответ:
 (1) #pragma omp barrier
 
 (2) #pragma omp waitall
 
 (3) #pragma omp wait
 
Номер 3
Можно ли в OpenMP программе управлять количеством потоков выполняющих работу, не меняя кода программы?
Ответ:
 (1) нет, программа сама определяет количество потоков 
 (2) да, если в программе явно не определяется количество потоков 
 (3) да, используя переменные окружения 
Номер 4
Под параллельной программой в рамках MPI понимается:
Ответ:
 (1) множество одновременно выполняемых процессов 
 (2) множество одновременно выполняемых потоков 
 (3) множество одновременно работающих процессоров 
Номер 5
Как определяется число процессов при запуске MPI-программы?
Ответ:
 (1) оно будет равно числу узлов в кластере 
 (2) оно задается непосредственно в коде программы средствами MPI 
 (3) оно задается явно при запуске MPI-программы 
 (4) оно устанавливается через специальную переменную окружения 
Упражнение 4:
Номер 1
В программе на MPI необходимо распределить итерации цикла между процессами, считая, что время выполнения итераций примерно одинаковое
Ответ:
 (1) это будет сделано автоматически по общему число процессов 
 (2) вызвать MPI-функцию, которая для каждого процесса определит, какие итерации цикла должен выполнить данный процесс 
 (3) разделить общее число итераций цикла на число процессов. По рангу каждого процесса определить начальное и конечное значение счетчика цикла.  
Номер 2
Процессы параллельной программой в рамках MPI:
Ответ:
 (1) могут выполняться на разных процессорах, на одном процессоре могут располагаться несколько процессов 
 (2) могут выполняться только на разных процессорах 
 (3) обязательно выполняются на одном процессоре 
Номер 3
Минимально необходимый набор операций для организации информационного взаимодействия между процессорами в вычислительных системах с распределенной памятью включает в себя только:
Ответ:
 (1) операции приема и передачи данных 
 (2) операции передачи данных и коллективные операции 
 (3) только коллективные операции 
Номер 4
Intel Cilk Plus – это:
Ответ:
 (1) библиотека, независимая от компилятора 
 (2) расширение языка С и С++, поддерживаемое компилятором Intel 
 (3) виртуальная машина, векторизующая параллельные программы 
 (4) новая модель процессоров Intel, созданная специально для параллельных программ  
Упражнение 5:
Номер 1
В Cilk Plus входят:
Ответ:
 (1) библиотека TBB, расширение языка с помощью прагм и комментариев, векторизация 
 (2) сопроцессор x87, коммутатор Light Peak, ускоритель графических и физических расчётов 
 (3) набор редьюсеров, 3 ключевых слова, гиперобъекты и расширенная семантика операций над массивами 
 (4) SDK, спецификация промежуточного слоя, библиотеки функций 
Номер 2
Планировщик Cilk Plus основан на распределении работы путём:
Ответ:
 (1) захвата доступной работы у случайного потока 
 (2) распределения "билетиков" из центральной очереди 
 (3) запроса работы у следующего узла процессора 
 (4) захвата доступной работы в ближайшем пуле 
Номер 3
В коде "cilk_spawn F1(); F2(); cilk_sync;"
Ответ:
 (1) функция F1 будет выполнена текущим потоком, а F2 может быть подхвачена другим потоком 
 (2) функция F2 будет выполнена текущим потоком, а F1 может быть подхвачена другим потоком 
 (3) обе функции всегда будут выполняться параллельно друг другу 
 (4) будет произведена дефрагментация стэка для F1, что позволит векторизовать F2 
Номер 4
Код "cilk_for(int i=0; i<maxi; i++) Func(); "
позволяет:
Ответ:
 (1) распараллелить и векторизовать цикл 
 (2) распараллелить цикл 
 (3) векторизовать цикл 
 (4) определить экстремум функции 
Номер 5
Сколько потоков для вычислений будет создано библиотекой TBB после выполнения указанного ниже кода?
task_scheduler_init init;
init.initialize(4);
Ответ:
 (1) будет создано 4 потока 
 (2) количество создаваемых потоков будет определено автоматически 
 (3) потоки созданы не будут из-за ошибки повторной инициализации 
 (4) будет создан 1 поток 
Упражнение 6:
Номер 1
Для чего предназначена операция расщепления в итерационном пространстве?
Ответ:
 (1) для порождения копии итерационного пространства 
 (2) для разделения итерационного пространство на два подмножества 
 (3) для разделения итерационного пространство на два одинаковых подмножества 
Номер 2
Планирование вычислений в функции parallel_for
:
Ответ:
 (1) статическое и определено разработчиками библиотеки TBB 
 (2) динамическое, размер порции вычислений определяется параметром grainsize 
 (3) определяется используемым итерационным пространством 
Номер 3
При реализации функтора для функции parallel_for
:
Ответ:
 (1) запрещается вызывать напрямую operator()
для объекта функтора 
 (2) сохранять результат работы функтора необходимо в полях функтора 
 (3) operator()
должен принимать в качестве параметра итерационное пространство 
Номер 4
Планирование вычислений в функции parallel_for
:
Ответ:
 (1) статическое и определено разработчиками библиотеки TBB 
 (2) динамическое, размер порции вычислений определяется параметром grainsize 
 (3) определяется используемым итерационным пространством 
Упражнение 7:
Номер 1
Код на сопроцессоре Intel Xeon Phi исполняется в
Ответ:
 (1) синхронном режиме, т.е. при вызове функции управление передается сопроцессору, а выполнение основной программы блокируется, пока сопроцессор не завершит свою работу 
 (2) асинхронном режиме, т.е. при вызове функции управление передается сопроцессору, выполнение основной программы продолжается 
Номер 2
Какой ключ компилятора icc следует использовать для компиляции программы, исполняемой в режиме offload:
Ответ:
 (1) -mmic
 
 (2) -mic
 
 (3) дополнительного ключа не требуется 
 (4) -offload
 
Номер 3
Какой ключ компилятора icc следует использовать для компиляции программы, если она должна запускаться только на сопроцессоре:
Ответ:
 (1) -mmic
 
 (2) -mic
 
 (3) дополнительного ключа не требуется 
 (4) -offload
 
Номер 4
#!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic
Данный скрипт используется для компиляции программы, которая должна исполняться в режиме:
Ответ:
 (1) offload 
 (2) исполнения только на сопроцессоре 
 (3) симметричном 
Упражнение 8:
Номер 1
Для компиляции программы, исполняемой в режиме offload, следует использовать скрипт:
Ответ:
 (1) #!/bin/sh
mpicc -02 -openmp main.cpp –o program_name 
 (2) #!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic 
 (3) #!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic 
Номер 2
Для компиляции программы, исполняемой только на сопроцессоре, следует использовать скрипт:
Ответ:
 (1) #!/bin/sh
mpicc -02 -openmp main.cpp –o program_name
 
 (2) #!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic
 
 (3) #!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic
 
Номер 3
Для компиляции программы, исполняемой в симметричном режиме, следует использовать скрипт:
Ответ:
 (1) #!/bin/sh
mpicc -02 -openmp main.cpp –o program_name
 
 (2) #!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic
 
 (3) #!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic
 
Номер 4
Какой из представленных ниже скриптов обеспечивает запуск программы в режиме offload:
Ответ:
 (1) #!/bin/sh
mpiexec.hydra –perhost 1 ./program_name
 
 (2) #!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic
 
 (3) #!/bin/sh
mpiexec.hydra –hosts 2 node0 node1 –n 2 –perhost 1 ./program_name: \
–hosts 4 mic0 mic1 mic2 mic3 –n 4 –perhost 1 ./program_name.mic
 
 (4)  
Номер 5
Какой из представленных ниже скриптов обеспечивает запуск программы в режиме исполнения только на сопроцессоре:
Ответ:
 (1) #!/bin/sh
mpiexec.hydra –perhost 1 ./program_name
 
 (2) #!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic
 
 (3) #!/bin/sh
mpiexec.hydra –hosts 2 node0 node1 –n 2 –perhost 1 ./program_name: \
–hosts 4 mic0 mic1 mic2 mic3 –n 4 –perhost 1 ./program_name.mic
 
Упражнение 9:
Номер 1
Какой из представленных ниже скриптов обеспечивает запуск программы в симметричном режиме:
Ответ:
 (1) #!/bin/sh
mpiexec.hydra –perhost 1 ./program_name
 
 (2) #!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic
 
 (3) #!/bin/sh
mpiexec.hydra –hosts 2 node0 node1 –n 2 –perhost 1 ./program_name: \
–hosts 4 mic0 mic1 mic2 mic3 –n 4 –perhost 1 ./program_name.mic
 
Номер 2
#!/bin/sh
mpiexec.hydra –perhost 1 ./program_name
Данный скрипт обеспечивает запуск программы в режиме:
Ответ:
 (1) offload 
 (2) исполнения только на сопроцессоре 
 (3) симметричном 
Номер 3
#!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic
Данный скрипт обеспечивает запуск программы в режиме:
Ответ:
 (1) offload 
 (2) исполнения только на сопроцессоре 
 (3) симметричном 
Номер 4
#!/bin/sh
mpiexec.hydra –hosts 2 node0 node1 –n 2 –perhost 1 ./program_name: \
–hosts 4 mic0 mic1 mic2 mic3 –n 4 –perhost 1 ./program_name.mic
Данный скрипт обеспечивает запуск программы в режиме:
Ответ:
 (1) offload 
 (2) исполнения только на сопроцессоре 
 (3) симметричном 
Упражнение 10:
Номер 1
#!/bin/sh
export MICperNODE=1
sbatch –N 4 –-gres=mic:2 native_run.sh ./program_name
Данный скрипт обеспечивает запуск программы в режиме исполнения только на сопроцессоре на кластере с системой управления SLURM.
Сколько процессов на узел будет создано при запуске программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 4 
 (4) 8 
Номер 2
#!/bin/sh
export MICperNODE=2
sbatch –N 2 –-gres=mic:4 native_run.sh ./program_name
Данный скрипт обеспечивает запуск программы в режиме исполнения только на сопроцессоре на кластере с системой управления SLURM.
Сколько всего процессов будет создано при запуске программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 4 
 (4) 8 
Номер 3
S,N,1,2.0.0.
#!/bin/sh
export PPN=2
export MICperNODE=2
sbatch –N 2 –-gres=mic:2 symmetric_run.sh ./program_name
Данный скрипт обеспечивает запуск программы в симметричном режиме на кластере с системой управления SLURM.
Сколько всего процессов будет создано при запуске программы?
Ответ:
 (1) 1 
 (2) 2 
 (3) 4 
 (4) 8 
Номер 1
Какой скрипт обеспечивает получение монопольного доступа к двум узлам кластера, на каждом из которых установлено не менее двух сопроцессоров?
Работа ведется на кластере с системой управления SLURM.
Ответ:
 (1) #!/bin/sh
sbatch –N 2 –-gres=mic:1
 
 (2) #!/bin/sh
salloc –N 1 --gres=mic:2
 
 (3) #!/bin/sh
salloc –N 2 --gres=mic:2
 
 (4) #!/bin/sh
sbatch –N 2 –-gres=mic:2
 
Упражнение 11:
Номер 1
Задача факторизации натурального числа N состоит в
Ответ:
 (1) вычислении факториала N! 
 (2) разложении на простые сомножители 
 (3) разложении на сумму простых слагаемых 
Номер 3
Следующий псевдокод
1. i number;
2. for j = 2 to number
3. if (i == 1) break;
4. r i % j;
5. if (r == 0)
6. i i / j;
7. save_divisor(number, j);
8. j j - 1;
Ответ:
 (1) раскладывает число number на простые сомножители 
 (2) раскладывает число number на сумму простых слагаемых 
 (3) вычисляет факториал числа number 
Номер 2
Следующий кодint idx = number;
for (int j = 2; j < number; j++)
{
if (idx == 1) break;
int r;
r = idx % j;
if (r == 0)
{
idx /= j;
divisors[number].push_back(j);
j--;
}
}
Ответ:
 (1) раскладывает число number на сумму простых слагаемых 
 (2) вычисляет факториал числа number 
 (3) раскладывает число number на простые сомножители 
Номер 3
Следующая функцияvoid factorization()
{
#pragma omp parallel for
for (int i = 1; i < NUM_NUMBERS; i++)
{
int number = i;
int idx = number;
for (int j = 2; j < idx; j++)
{
if (number == 1) break;
int r;
r = number % j;
if (r == 0)
{
number /= j;
divisors[idx].push_back(j);
j--;
}
}
}
}
факторизует числа в диапазоне от 1 до NUM_NUMBERS
. Добавление к прагме parallel
параметра schedule(static, 1)
приведет к
Ответ:
 (1) уменьшит время работы 
 (2) не изменит время работы 
 (3) увеличит время работы 
Номер 4
Следующая функция void factorization()
{
#pragma omp parallel for
for (int i = 1; i < NUM_NUMBERS; i++)
{
int number = i;
int idx = number;
for (int j = 2; j < idx; j++)
{
if (number == 1) break;
int r;
r = number % j;
if (r == 0)
{
number /= j;
divisors[idx].push_back(j);
j--;
}
}
}
}
факторизует числа в диапазоне от 1 до NUM_NUMBERS
. Добавление к прагме parallel
параметра schedule(dynamic)
уменьшит время
Ответ:
 (1) уменьшит время работы 
 (2) увеличит время работы 
 (3) не изменит время работы 
Номер 5
Следующая функция void factorization()
{
#pragma omp parallel for
for (int i = 1; i < NUM_NUMBERS; i++)
{
int number = i;
int idx = number;
for (int j = 2; j < idx; j++)
{
if (number == 1) break;
int r;
r = number % j;
if (r == 0)
{
number /= j;
divisors[idx].push_back(j);
j--;
}
}
}
}
факторизует числа в диапазоне от 1 до NUM_NUMBERS
. Добавление к прагме parallel
параметра schedule(static, chunk)
при правильном выборе chunk
Ответ:
 (1) уменьшит время работы 
 (2) увеличит время работы 
 (3) не изменит время работы 
Упражнение 12:
Номер 1
Пусть разработан код представленный ниже: #pragma offload target(mic:0) signal(s1)
{
F1(p1, p2);
}
F2();
В каком порядке будут исполняться функции F1 и F2?
Ответ:
 (1) вначале F1, затем F2 
 (2) вначале F2, затем F1 
 (3) асинхронно F1 и F2 
Номер 2
Пусть разработан код представленный ниже: #pragma offload target(mic:0)
{
F1(p1, p2);
}
F2();
В каком порядке будут исполняться функции F1 и F2?
Ответ:
 (1) вначале F1, затем F2 
 (2) вначале F2, затем F1 
 (3) асинхронно F1 и F2 
Номер 3
Пусть разработан код представленный ниже: #pragma offload target(mic:0) wait (s1)
{
F1(p1, p2);
}
F2();
В каком порядке будут исполняться функции F1 и F2?
Ответ:
 (1) вначале F1, затем F2 
 (2) вначале F2, затем F1 
 (3) асинхронно F1 и F2 
Номер 4
Пусть разработан код представленный ниже: F1();
#pragma offload target(mic:0) signal(s1)
{
F2(p1, p2);
}
В каком порядке будут исполняться функции F1 и F2?
Ответ:
 (1) вначале F1, затем F2 
 (2) вначале F2, затем F1 
 (3) асинхронно F1 и F2 
Номер 5
Пусть разработан код представленный ниже: F1();
#pragma offload target(mic:0) wait(s1)
{
F2(p1, p2);
}
В каком порядке будут исполняться функции F1 и F2?
Ответ:
 (1) вначале F1, затем F2 
 (2) вначале F2, затем F1 
 (3) асинхронно F1 и F2 
Номер 6
Пусть разработан код представленный ниже:int r = 0;
int main()
{
#pragma offload target(mic:0)
{
setR();
}
printf("%d", r);
}
...
setR()
{
r = 1;
}
Что будет выведено на экран?
Ответ:
 (1) 0 
 (2) 1 
 (3) результат не определен