Введение в принципы функционирования и применения современных
  • Введение в принципы функционирования и применения современных
  • Введение в принципы функционирования и применения современных
Введение в принципы функционирования и применения современных
  • Введение в принципы функционирования и применения современных
  • Введение в принципы функционирования и применения современных

Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi)

700,00 руб.
В течение часа!
Экзамен "Введение в принципы функционирования и применения современных мультиядерных архитектур (на примере Intel Xeon Phi)" для пользователей и системных администраторов.
Количество
Есть в наличии!

Форма сдачи теста: Экстерн
Количество вопросов: 30
Проходной балл: 90% и выше
Срок действия сертификата: неограничен

Сертификат появляется в профиле ресурса INTUIT, и Вы можете заказать его бумажную версию на сайте INTUIT.
10789 шт.
Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!

Одна из формулировок закона Мура гласит:

производительность микропроцессоров удваивается каждые 18 месяцев
производительность микропроцессоров удваивается каждые два года
производительность микропроцессоров удваивается каждый год



Одна из формулировок закона Мура гласит:

число транзисторов в производимых чипах удваивается каждый год
число транзисторов в производимых чипах удваивается каждые 18 месяцев
число транзисторов в производимых чипах удваивается каждые два года



Уменьшение техпроцесса производства процессоров приводит к:

увеличению тепловыделения процессора
увеличению количества транзисторов на кристалле
уменьшению размеров транзисторов



Уменьшение техпроцесса производства процессоров приводит к:

уменьшению количества транзисторов на кристалле
уменьшению тепловыделения процессора
уменьшению размеров транзисторов



Уменьшение техпроцесса производства процессоров приводит к:

увеличению количества транзисторов на кристалле
увеличению размеров транзисторов
уменьшению тепловыделения процессора



Современные персональные компьютеры в основном относятся к:

SMP системам
кластерным системам
MPP системам



Главным преимуществом кластерных систем является:

наличие эффективных систем управления задачами
простота обслуживания.
построение из стандартных массово выпускающихся компонентов



Основным способом построения суперкомпьютеров на данный момент является:

кластеры
SMP системы
MPP системы



Один гигафлопс это?

1012 операций с плавающей запятой в секунду
109 операций с плавающей запятой в секунду
106 операций с плавающей запятой в секунду



Один гигафлопс это?

109 любых вычислительных операций в секунду
109 операций с плавающей запятой в секунду
109 целочисленных операций в секунду



Какой порог производительности преодолевают лидеры списка Top 500?

гигафлопс
терафлопс
петафлопс



К классу систем с неоднородным доступом к памяти (NUMA) относятся:

Кластеры
векторные параллельные процессоры (parallel vector processor, PVP)
симметричные мультипроцессоры (symmetric multiprocessor, SMP)
системы, в которых обеспечивается когерентность локальных кэшей разных процессоров (cache-coherent NUMA)



К классу систем с однородным доступом к памяти (UMA) относятся:

кластеры
векторные параллельные процессоры (parallel vector processor, PVP)
симметричные мультипроцессоры (symmetric multiprocessor, SMP)
системы, в которых обеспечивается когерентность локальных кэшей разных процессоров (cache-coherent NUMA)



Какой порог производительности преодолеют лидеры списка Top 500 в ближайшие годы?

экзафлопс
терафлопс
петафлопс



Информационная целостность (когерентность) кэшей может быть организована на программном уровне.

да
нет



Информационная целостность (когерентность) кэшей может быть организована на аппаратном уровне.

да
нет



К классу мультикомпьютеров относятся:

симметричные мультипроцессоры (symmetric multiprocessor, SMP)
системы, в которых обеспечивается когерентность локальных кэшей разных процессоров (cache-coherent NUMA)
векторные параллельные процессоры (parallel vector processor, PVP)
кластеры



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

некэшируемые данные
бинарные деревья поиска
протоколы на основе справочника
совместно используемая кэш-память



При использовании политики обратной записи (write back) данных из кэша в оперативную память:

данные помещаются только в кэш и переписываются в оперативную память только тогда, когда необходимо освободить строку кэша
все записываемые данные сразу дублируются в оперативную память



При использовании политики сквозной записи (write through) данных из кэша в оперативную память:

данные помещаются только в кэш и переписываются в оперативную память только тогда, когда необходимо освободить строку кэша
все записываемые данные сразу дублируются в оперативную память



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

ассоциативные контейнеры
некэшируемые данные
протоколы наблюдения
хэш-таблицы.



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

списки
протоколы на основе справочника.
протоколы наблюдения
таблицы виртуальных страниц



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

широковещательная запись
таблицы виртуальных методов
файловый ввод-вывод
некэшируемые данные
протоколы на основе справочника



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

широковещательная запись
сегментная адресация
сегментные регистры
протоколы на основе справочника
некэшируемые данные



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

сопроцессор вещественной арифметики
протоколы наблюдения
страничная адресация
некэшируемые данные
протоколы на основе справочника



Информационную целостность (когерентность) кэшей на аппаратном уровне могут обеспечить:

совместно используемая кэш-память
котики
протокол TCP/IP
протоколы на основе справочника



Какие из указанных состояний строки кэша используются в протоколе MESI:

single (данные содержатся только в конкретной строке кэша, в оперативной памяти данных нет)
private (данные этой строки кэша не могут быть использованы другими процессорами)
invalid (строка содержит недостоверные данные)
valid (данные корректны)



Какие из указанных состояний строки кэша используются в протоколе MESI:

valid (данные корректны)
modified (строка была изменена и изменения не отражены в оперативной памяти)
single (данные содержатся только в конкретной строке кэша, в оперативной памяти данных нет)
invalid (строка содержит недостоверные данные)



Какие из указанных состояний строки кэша используются в протоколе MESI:

single (данные содержатся только в конкретной строке кэша, в оперативной памяти данных нет)
shared (данные в строке кэша и оперативной памяти одинаковы, в каких-то других кэшах этих данные тоже присутствуют)
exclusive (данные в строке кэша и оперативной памяти одинаковы, в остальных кэшах этих данных нет)
private (данные этой строки кэша не могут быть использованы другими процессорами)



Какие из указанных состояний строки кэша используются в протоколе MESI:single

(данные содержатся только в конкретной строке кэша, в оперативной памяти данных нет)
valid (данные корректны)
exclusive (данные в строке кэша и оперативной памяти одинаковы, в остальных кэшах этих данных нет)
shared (данные в строке кэша и оперативной памяти одинаковы, в каких-то других кэшах этих данные тоже присутствуют)



Какие из указанных состояний строки кэша используются в протоколе MESI:

shared (данные в строке кэша и оперативной памяти одинаковы, в каких-то других кэшах этих данные тоже присутствуют)
valid (данные корректны)
private (данные этой строки кэша не могут быть использованы другими процессорами)
invalid (строка содержит недостоверные данные)



Необходимыми средствами при реализации одновременной многопоточности (simul-taneous multithreading, SMT) являются:

дополнительные блоки вещественной арифметики
блоки предсказания ветвлений
средства запоминания состояния потоков, схемы контроля одновременного выполнения нескольких потоков и т. д



В каких случаях одновременная многопоточность может положительно сказаться на производительности:

если на одном ядре выполняется несколько потоков с интенсивным вводом-выводом
высокопроизводительные приложения
если на одном ядре выполняются потоки разнотипных приложений (например, просмотр почты и проигрывание музыки)
Теоретическая производительность сопроцессора Intel Xeon Phi больше производительности процессоров общего назначения.
любое приложение работает медленнее на Xeon Phi, чем на менее производительном процессоре общего назначения
приложения из определённого класса задач работают быстрее на Xeon Phi, чем на менее производительном процессоре общего назначения
любое приложение работает быстрее на Xeon Phi, чем на менее производительном процессоре общего назначения



В каких случаях одновременная многопоточность может негативно сказаться на производительности:

высокопроизводительные приложения
если на одном ядре выполняется несколько потоков с интенсивным вводом-выводом
если на одном ядре выполняются потоки разнотипных приложений (например, просмотр почты и проигрывание музыки)


Теоретическая производительность сопроцессора Intel Xeon Phi больше производительности процессоров общего назначения.

любое последовательное приложение работает быстрее на Xeon Phi, чем на менее производительном процессоре общего назначения
любое приложение работает быстрее на Xeon Phi, чем на менее производительном процессоре общего назначения
приложения из определённого класса задач работают медленнее на Xeon Phi, чем на менее производительном процессоре общего назначения



Сколько потоков может одновременно выполняться на сопроцессоре Intel Xeon Phi?

60
244
240
61


Сколько ядер рекомендуется использовать для вычислений на сопроцессоре Intel Xeon Phi?

240
61
60
244


Сколько ядер содержит сопроцессор Intel Xeon Phi?
60
240
244
61


Сколько конвейеров содержит одно ядро сопроцессора Intel Xeon Phi?

8
2
1
4



Сколько контроллеров памяти содержит сопроцессор Intel Xeon Phi?

1
4
8
2



Сколько каналов доступа к памяти включает каждый контроллер памяти сопроцессора Intel Xeon Phi?

4
2
1
3



Какие векторные расширения поддерживает сопроцессор Intel Xeon Phi?

MultiMedia Extension (MMX)
Streaming SIMD Extensions (SSE)
ни одно из перечисленных
Advanced Vector Extensions (AVX)



Поддерживает ли ядро сопроцессора Intel Xeon Phi внеочередное выполнение инструкций?

да
нет



Реализовано ли в ядрах сопроцессора Intel Xeon Phi аппаратное предсказание переходов и спекулятивное выполнение инструкций?

да
нет



На какой конвейер отправляется первая инструкция из пары декодированных?

U-конвейер
V-конвейер
W-конвейер



Какова разрядность блока векторных вычислений сопроцессора Intel Xeon Phi (длина обрабатываемых векторов)?

512 бит
128 бит
256 бит
1024 бит



Блок векторных вычислений:

имеет конвейерную структуру
не конвейеризован



Какую латентность имеют большинство векторных инструкций?

1 такт
2 такта
4 такта
3 такта



Какова теоретическая производительность сопроцессора Intel Xeon Phi для вещественных чисел одинарной точности при использовании 60 ядер?

4224 GFLOPS
2112 GFLOPS
528 GFLOPS
1056 GFLOPS



Какова теоретическая производительность сопроцессора Intel Xeon Phi для вещественных чисел двойной точности при использовании 60 ядер?

1056 GFLOPS
4224 GFLOPS
528 GFLOPS
2112 GFLOPS



Какую латентность имеют большинство инструкций - арифметических операций с целыми числами и масками?

3 такта
1 такт
4 такта
2 такта



Какой размер имеет кеш L2 ядра сопроцессора Intel Xeon Phi?

1024 Кб
256 Кб
128 Кб
512 Кб



Выберите верное утверждения.

ядро сопроцессора Intel Xeon Phi имеет собственные кеши L1 и L2.
ядро сопроцессора Intel Xeon Phi имеет собственный кеш L1 и разделяет кеш L2 с другим ядром/ядрами.
ядро сопроцессора Intel Xeon Phi имеет собственные кеши L1 и L2 и разделяет кеш L3 с другим ядром/ядрами.



Выберите все верные утверждения.

для полной загрузки ядра сопроцессора Intel Xeon Phi необходимо выполнять на нем четыре потока одновременно
на каждом такте ядро сопроцессора Intel Xeon Phi может параллельно выполнять 4 инструкции
для полной загрузки ядра сопроцессора Intel Xeon Phi необходимо выполнять на нем по крайней мере два потока одновременно



Какая архитектура Кеша используется в сопроцессоре Intel Xeon Phi?

эксклюзивная
инклюзивная



Какие схемы взаимодействия между кешем и основной памятью реализованы в сопроцессоре Intel Xeon Phi?

объединенная запись (write-combining, WC)
сквозная запись (write-through, WT), write-combining (WC), and write-protect (WP)]
защита записи (write-protect, WP)
отсутствие кеширования (uncacheable, UC)
отложенная запись (write-back, WB)



Какие размеры страниц поддерживает сопроцессор Intel Xeon Phi?

2 МБ
2 КБ
4 МБ
1 ГБ
4 КБ



Выберите все верные утверждения.

в сопроцессоре Intel Xeon Phi используются отдельные кеши дескрипторов страниц TLB L1 данных и TLB L1 инструкций/1
в сопроцессоре Intel Xeon Phi используются отдельные кеши дескрипторов страниц TLB L2 данных и TLB L2 инструкций/1
в сопроцессоре Intel Xeon Phi используется общий кеш дескрипторов страниц TLB L1
в сопроцессоре Intel Xeon Phi используется общий кеш дескрипторов страниц TLB L2



Какова суммарная пропускная способность всех контроллеров памяти сопроцессора Intel Xeon Phi?

59,7 ГБ/с
244 ГБ/с
392 ГБ/с
352 ГБ/с



Какова латентность доступа к памяти сопроцессора Intel Xeon Phi?

примерно 400 тактов
примерно 200 тактов
примерно 300 тактов
примерно 100 тактов



Выберите верное утверждение.

каждое ядро содержит только каталог содержимого локального кеша L1
каждое ядро содержит часть распределенного каталога кеша L1



Выберите верное утверждение.

каждое ядро содержит часть распределенного каталога кеша L2
каждое ядро содержит только каталог содержимого локального кеша L2



Какова латентность доступа к памяти сопроцессора Intel Xeon Phi?

примерно 400 тактов
примерно 200 тактов
примерно 100 тактов
примерно 300 тактов



Какие базовые операционные системы позволяют использовать сопроцессор Intel Xeon Phi?

ОС семейства Linux и ОС семейства Microsoft Windows
ОС семейства Microsoft Windows.
ОС семейства Linux



Какие дополнительные возможности реализованы в сопроцессоре Intel Xeon Phi по сравнению с процессорами Xeon?

реализованы инструкции, которые позволяют упаковывать в векторы для обработки данные, произвольно расположенные в памяти
увеличен размер векторных регистров
расширен набор команд AVX
реализованы специальные регистры масок, использование которых позволяет осуществлять условное выполнение операций над элементами векторов



Что такое Symmetric Communication Interface API (SCIF API)?

API высокого уровня, обеспечивающее пересылку данных между хост-системой и сопроцессором Intel Xeon Phi
API, обеспечивающее взаимодействие между хост-системой и сопроцессором Intel Xeon Phi
одно из стандартных API разработки высокопроизводительных приложений



Какая операционная система по умолчанию выполняется на и сопроцессоре Intel Xeon Phi?

специализированная версия Linux, основанная на стандартном ядре
операционная система семейства Unix, использующая специализированное ядро
операционная система семейства Windows, использующая специализированное ядро



В каких случаях предпочтительнее использовать DMA-передачу, а не копирование памяти (выберите все подходящие варианты)?

если необходимо передавать большие блоки данных
если необходимо уменьшить нагрузку на процессоры основной системы
если необходимо обеспечить параллельное обслуживание множества запросов



При использовании модели симметричного выполнения (Symmetric model)

MPI-процессы выполняются только на процессорах базовой системы
MPI-процессы выполняются только на сопроцессорах Intel Xeon Phi
MPI-процессы выполняются как на процессорах базовой системы, так и на сопроцессорах Intel Xeon Phi



Как могут использоваться вычислительные мощности системы с установленным сопроцессором Intel Xeon Phi? Выберите все правильные варианты.

могут использоваться вычислительные мощности только процессоров хост-системы
вычислительные мощности сопроцессора Intel Xeon Phi могут использоваться только совместно с вычислительными мощностями процессоров хост-системы
могут использоваться вычислительные мощности только сопроцессора Intel Xeon Phi



Какие режимы выполнения приложений поддерживаются для систем с установленными сопроцессорами Intel Xeon Phi? Выберите все правильные варианты.

MPI
Dynamic
Offload



При использовании режима Offload:

MPI-процессы выполняются только на сопроцессорах Intel Xeon Phi
MPI-процессы выполняются как на процессорах базовой системы, так и на сопроцессорах Intel Xeon Phi
MPI-процессы выполняются только на процессорах базовой системы  
Что происходит, если при вызове offload-кода сопроцессор Intel Xeon Phi оказывается занят?
выполнение версии кода для основного процессора
завершение приложения
ожидание освобождения сопроцессора Intel Xeon Phi



Выберите технологии и API, которые вы можете использовать при программировании для сопроцессора Intel Xeon Phi?

Intel Cilk Plus
pthreads
MPI
Intel TBB
Intel ArBB
OpenMP



При использовании модели симметричного выполнения (Symmetric model) для взаимодействия между процессорами базовой системы, в пределах сопроцессора и между сопроцессором и процессорами базовой системы по умолчанию используется

протокол tcp
механизм разделяемой памяти


При использовании модели использования только сопроцессоров (Coprocessor-only model)

MPI-процессы выполняются как на процессорах базовой системы, так и на сопроцессорах Intel Xeon Phi
PI-процессы выполняются только на процессорах базовой системы
MPI-процессы выполняются только на сопроцессорах Intel Xeon Phi




Можно ли при использовании режима Offload выполнять в Offload-части кода вызовы MPI-функций?

нельзя
можно, для этого существует специальный механизм



Техника двойной буферизации позволяет

уменьшить или полностью компенсировать латентность передачи входных/выходных данных при использовании режима Offload
уменьшить размер необходимой памяти при использовании режима Offload
уменьшить время передачи входных/выходных данных при использовании режима Offload



Сколько этапов (стадий) содержит конвейер сопроцессора Intel Xeon Phi?

9
7
6
8



Технология программирования OpenMP расширяет язык программирования за счет:

новых ключевых слов
новых директив и специальных комментариев
новых библиотечных функций и переменных окружения



Для каких вычислительных систем предназначена технология OpenMP?

для систем с общей памятью
для систем с распределенной памятью



При разработке программ для сопроцессора Intel Xeon Phi

требуется использовать специальный язык программирования
можно использовать языки C\C++ и Fortran



Модели программирования для сопроцессора Intel Xeon Phi это

Offload, MPI
Offload, OpenMP
MPI, OpenMP



При разработке программ для сопроцессора Intel Xeon Phi

можно использовать MPI, OpenMP, Cilk Plus, TBB
требуется использовать специальную библиотеку функций



Что определяет количество потоков в рамках параллельной секции?

вызовы библиотечных функций библиотеки OpenMP
значение переменных окружений
количество вычислительных элементов



Для создания параллельной области необходимо использовать директиву:

#pragma omp parallel
#pragma omp for
#pragma parallel
#pragma omp



Отметьте верные утверждения об OpenMP:

весь параллелизм приложения реализуется только с помощью параллельных циклов
число параллельных потоков OpenMP приложения может определяться переменной окружения
большинство конструкций OpenMP реализуется с помощью директив и/или специальных комментариев
OpenMP ориентирован в первую очередь на написание программ для векторно-конвейерных компьютеров



Какое количество потоков может быть создано в рамках параллельной секции?

большее количества вычислительных элементов
равное количеству вычислительных элементов
меньше количества вычислительных элементов



Как определяется число процессов при запуске MPI-программы?

оно задается непосредственно в коде программы средствами MPI
оно устанавливается через специальную переменную окружения
оно задается явно при запуске MPI-программы
оно будет равно числу узлов в кластере



Под параллельной программой в рамках MPI понимается:

множество одновременно работающих процессоров
множество одновременно выполняемых потоков
множество одновременно выполняемых процессов



Можно ли в OpenMP программе управлять количеством потоков выполняющих работу, не меняя кода программы?

да, если в программе явно не определяется количество потоков
нет, программа сама определяет количество потоков
да, используя переменные окружения



Для распределения итераций цикла между потоками необходимо использовать следующую директиву OpenMP:

#pragma omp parallel for
#pragma omp sections
#pragma parallel for
#pragma omp for, если данная директива находится внутри параллельной области



Минимально необходимый набор операций для организации информационного взаимодействия между процессорами в вычислительных системах с распределенной памятью включает в себя только:

операции передачи данных и коллективные операции
только коллективные операции
операции приема и передачи данных



Процессы параллельной программой в рамках MPI:

могут выполняться только на разных процессорах
могут выполняться на разных процессорах, на одном процессоре могут располагаться несколько процессов
обязательно выполняются на одном процессоре



В программе на MPI необходимо распределить итерации цикла между процессами, считая, что время выполнения итераций примерно одинаковое

это будет сделано автоматически по общему число процессов
разделить общее число итераций цикла на число процессов. По рангу каждого процесса определить начальное и конечное значение счетчика цикла.
вызвать MPI-функцию, которая для каждого процесса определит, какие итерации цикла должен выполнить данный процесс



Сколько потоков для вычислений будет создано библиотекой TBB после выполнения указанного ниже кода?

task_scheduler_init init;
init.initialize(4);     

потоки созданы не будут из-за ошибки повторной инициализации
будет создан 1 поток
количество создаваемых потоков будет определено автоматически
будет создано 4 потока



В Cilk Plus входят:

сопроцессор x87, коммутатор Light Peak, ускоритель графических и физических расчётов
набор редьюсеров, 3 ключевых слова, гиперобъекты и расширенная семантика операций над массивами
библиотека TBB, расширение языка с помощью прагм и комментариев, векторизация
SDK, спецификация промежуточного слоя, библиотеки функций



Код "cilk_for(int i=0; i<maxi; i++) Func(); " позволяет:

распараллелить цикл
векторизовать цикл
определить экстремум функции
распараллелить и векторизовать цикл



Планировщик Cilk Plus основан на распределении работы путём:

захвата доступной работы у случайного потока
распределения "билетиков" из центральной очереди
запроса работы у следующего узла процессора
захвата доступной работы в ближайшем пуле



При реализации функтора для функции parallel_for:

запрещается вызывать напрямую operator() для объекта функтора
сохранять результат работы функтора необходимо в полях функтора
operator() должен принимать в качестве параметра итерационное пространство



#!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic

Данный скрипт используется для компиляции программы, которая должна исполняться в режиме:

offload
исполнения только на сопроцессоре
симметричном



Какой из представленных ниже скриптов обеспечивает запуск программы в режиме offload:

#!/bin/sh
mpiexec.hydra –perhost 1 ./program_name

#!/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

#!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic



Для чего предназначена операция расщепления в итерационном пространстве?

для разделения итерационного пространство на два одинаковых подмножества
для разделения итерационного пространство на два подмножества
для порождения копии итерационного пространства


Планирование вычислений в функции parallel_for:

статическое и определено разработчиками библиотеки TBB
динамическое, размер порции вычислений определяется параметром grainsize
определяется используемым итерационным пространством



Intel Cilk Plus – это:

виртуальная машина, векторизующая параллельные программы
новая модель процессоров Intel, созданная специально для параллельных программ
библиотека, независимая от компилятора
расширение языка С и С++, поддерживаемое компилятором Intel



В коде "cilk_spawn F1(); F2(); cilk_sync;"

обе функции всегда будут выполняться параллельно друг другу
функция F1 будет выполнена текущим потоком, а F2 может быть подхвачена другим потоком
функция F2 будет выполнена текущим потоком, а F1 может быть подхвачена другим потоком
будет произведена дефрагментация стэка для F1, что позволит векторизовать F2



Какой ключ компилятора icc следует использовать для компиляции программы, исполняемой в режиме offload:

дополнительного ключа не требуется
-mic
-offload
-mmic



Какой ключ компилятора icc следует использовать для компиляции программы, если она должна запускаться только на сопроцессоре:

дополнительного ключа не требуется
-offload
-mic
-mmic



Код на сопроцессоре Intel Xeon Phi исполняется в

асинхронном режиме, т.е. при вызове функции управление передается сопроцессору, выполнение основной программы продолжается
синхронном режиме, т.е. при вызове функции управление передается сопроцессору, а выполнение основной программы блокируется, пока сопроцессор не завершит свою работу



Какой из представленных ниже скриптов обеспечивает запуск программы в режиме исполнения только на сопроцессоре:

#!/bin/sh
mpiexec.hydra –perhost 1 ./program_name

#!/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

#!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic



Для компиляции программы, исполняемой в режиме offload, следует использовать скрипт:

#!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic

#!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic

#!/bin/sh
mpicc -02 -openmp main.cpp –o program_name



Для компиляции программы, исполняемой в симметричном режиме, следует использовать скрипт:

#!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic

#!/bin/sh
mpicc -02 -openmp main.cpp –o program_name

#!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic



Какая директива OpenMP может быть использована для синхронизации потоков?

#pragma omp barrier
#pragma omp waitall
#pragma omp wait



Какой из представленных ниже скриптов обеспечивает запуск программы в симметричном режиме:

#!/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

#!/bin/sh
mpiexec.hydra –perhost 1 ./program_name

#!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic



#!/bin/sh
mpiexec.hydra –perhost 1 ./program_name

Данный скрипт обеспечивает запуск программы в режиме:

offload
исполнения только на сопроцессоре
симметричном



#!/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

Данный скрипт обеспечивает запуск программы в режиме:

offload
исполнения только на сопроцессоре
симметричном



#!/bin/sh
export MICperNODE=1
sbatch –N 4 –-gres=mic:2 native_run.sh ./program_name

Данный скрипт обеспечивает запуск программы в режиме исполнения только на сопроцессоре на кластере с системой управления SLURM. Сколько процессов на узел будет создано при запуске программы?


8
2
4
1




Какой скрипт обеспечивает получение монопольного доступа к двум узлам кластера, на каждом из которых установлено не менее двух сопроцессоров? Работа ведется на кластере с системой управления SLURM.

#!/bin/sh
sbatch –N 2 –-gres=mic:1#!/bin/shsalloc


–N 1 --gres=mic:2#!/bin/sh

sbatch –N 2 –-gres=mic:2#!/bin/shsalloc


–N 2 --gres=mic:2#!/bin/shexport




MICperNODE=2
sbatch –N 2 –-gres=mic:4 native_run.sh ./program_name

Данный скрипт обеспечивает запуск программы в режиме исполнения только на сопроцессоре на кластере с системой управления SLURM. Сколько всего процессов будет создано при запуске программы?

2
1
4
8



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. Сколько всего процессов будет создано при запуске программы?

8
4
1
2



#!/bin/sh
mpiexec.hydra –host mic0 –n 1 –perhost 1 ./program_name.mic

Данный скрипт обеспечивает запуск программы в режиме:

исполнения только на сопроцессоре
offload
симметричном



Следующая функция

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) уменьшит время

не изменит время работы
увеличит время работы
уменьшит время работы



Следующая функция

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.   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;


раскладывает число number на сумму простых слагаемых
вычисляет факториал числа number
раскладывает число number на простые сомножители



Задача факторизации натурального числа N состоит в

разложении на простые сомножители
разложении на сумму простых слагаемых
вычислении факториала N!



Следующая функция

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) приведет к

увеличит время работы
не изменит время работы
уменьшит время работы



Следующий код

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--;
      }
    }

раскладывает число number на сумму простых слагаемых
вычисляет факториал числа number
раскладывает число number на простые сомножители



Пусть разработан код представленный ниже:

  F1(); 
#pragma offload target(mic:0)  signal(s1)
  {
  F2(p1, p2);
  }

В каком порядке будут исполняться функции F1 и F2?

вначале F2, затем F1
асинхронно F1 и F2
вначале F1, затем F2



Пусть разработан код представленный ниже:

  #pragma offload target(mic:0) wait (s1)
  {
  F1(p1, p2);
  }
  F2();

В каком порядке будут исполняться функции F1 и F2?

вначале F1, затем F2
вначале F2, затем F1
асинхронно F1 и F2



Пусть разработан код представленный ниже:

int r = 0;

int main()
{

  #pragma offload target(mic:0)
  {
    setR();
  }
  printf("%d", r);
}
...
setR()
{
  r = 1;
}

Что будет выведено на экран?

1
результат не определен
0



Пусть разработан код представленный ниже:

  #pragma offload target(mic:0)  signal(s1)
  {
  F1(p1, p2);
  }
  F2();

В каком порядке будут исполняться функции F1 и F2?

асинхронно F1 и F2
вначале F2, затем F1
вначале F1, затем F2



Пусть разработан код представленный ниже:

  F1(); 
#pragma offload target(mic:0) wait(s1)
  {
  F2(p1, p2);
  }

В каком порядке будут исполняться функции F1 и F2?

асинхронно F1 и F2
вначале F2, затем F1
вначале F1, затем F2



Пусть разработан код представленный ниже:

  #pragma offload target(mic:0)
  {
  F1(p1, p2);
  }
  F2();

В каком порядке будут исполняться функции F1 и F2?

асинхронно F1 и F2
вначале F1, затем F2
вначале F2, затем F1

Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!

Для компиляции программы, исполняемой только на сопроцессоре, следует использовать скрипт:

#!/bin/sh
mpicc -02 -openmp main.cpp –o program_name

#!/bin/sh
mpicc –O2 –openmp main.cpp –o ./program_name
mpicc –O2 –openmp –mmic main.cpp –o ./program_name.mic

#!/bin/sh
mpicc -02 -openmp -mmic main.cpp –o program_name.mic



Подход, основанный на организации вычислений с использованием команд SIMD (SSE, SSE2, etc.), называется:

комбинация
интерполяция
модуляция
векторизация



Суть парадигмы SIMD заключается в следующем:

одновременное выполнение операции над разными данными
одновременное выполнение разных операций над одними и теми же данными
многократное выполнение одинаковых операций над одними и теми же данными
одновременное выполнение разных операций над разными данными



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 24

int rr[LOOP_SIZE];

p = 1;
for(int k = 0; k < LOOP_SIZE; k++)
{
  p *= rr[k];
}

Какого следует ожидать ускорения в результате векторизации по сравнению со скалярной версией на Intel Xeon Phi?

<12
>12
8
16



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 24

int rr[LOOP_SIZE];
for(int k = 0; k < LOOP_SIZE; k++)
{
  rr[k] = number % k;
}

Какого следует ожидать ускорения в результате векторизации по сравнению со скалярной версией на Intel Xeon Phi?

<12
16
8
>12




Пусть в программе присутствует следующий код:

#define LOOP_SIZE 16

int rr[LOOP_SIZE];

p = 1;
for(int k = 0; k < LOOP_SIZE; k++)
{
  p *= rr[k];
}

Какого следует ожидать ускорения в результате векторизации по сравнению со скалярной версией на Intel Xeon Phi?

8
16
>16
<16



Размер векторного регистра для хранения данных с плавающей запятой в наборе команд Intel Xeon Phi составляет:

32 байт
16 байт
64 байт
8 байт



Размер векторного регистра для хранения данных с плавающей запятой в наборе команд AVX составляет:

8 байт
64 байт
32 байт
16 байт



Размер векторного регистра для хранения данных с плавающей запятой в наборах команд SSE составляет:

64 байт
32 байт
8 байт
16 байт



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами одинарной точности, на сопроцессоре Intel Xeon Phi

4 раза
2 раза
16 раз
8 раз



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами одинарной точности, с использованием расширения SSE на процессоре Intel Xeon

4 раза
16 раз
2 раза
8 раз



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами одинарной точности, с использованием расширения AVX на процессоре Intel Xeon

16 раз
4 раза
2 раза
8 раз



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами двойной точности, на сопроцессоре Intel Xeon Phi

2 раза
4 раза
8 раз
16 раз



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами двойной точности, с использованием расширения SSE на процессоре Intel Xeon

16 раз
2 раза
4 раза
8 раз



Какого потенциального ускорения можно добиться при векторизации функции, работающей с вещественными числами двойной точности, с использованием расширения AVX на процессоре Intel Xeon

4 раза
16 раз
2 раза
8 раз



Какой процент от пиковой производительности можно получить в функции, работающей с вещественными числами одинарной точности, без использования векторных расширений на процессоре Intel Xeon

до 25%
до 6.25%
до 100%
до 50%
до 12.5%



Какой процент от пиковой производительности можно получить в функции, работающей с вещественными числами одинарной точности, без использования векторных расширений на сопроцессоре Intel Xeon Phi

до 25%
до 50%
до 100%
до 6.25%
до 12.5%



Какое из следующих замечаний является верным:

использование векторного кода на Intel Xeon Phi не позволит добиться хорошей производительности (в процентах от пика)
использование скалярного кода на Intel Xeon Phi не позволит добиться хорошей производительности (в процентах от пика)



Какое из следующих утверждений является верным?

инструкция вида FMA позволяет выполнить 3 арифметических операции с округлением в конце
инструкция вида FMA позволяет выполнить 3 арифметических операции за один такт
инструкция вида FMA позволяет выполнить 2 арифметических операции без потери точности
инструкция вида FMA позволяет выполнить 2 арифметических операции с округлением в конце



Инструкция вида FMA позволяет выполнить следующую операцию:

a = a * b * c;
a = a + b * c
a = a + b / c;
a = a + b



Как реализована расширенная поддержка математических функций в Xeon Phi?

основные математические функции вычисляются без потери точности
4 математические функции реализованы аппаратно для одинарной точности
основные математические функции реализованы аппаратно для одинарной точности
основные математические функции вычисляются аппаратно



Каким образом возможно использование векторных инструкций в программе?

только при их автоматической генерации компилятором при векторизации циклов
при автоматической генерации компилятором или вручную
только при вызове специальных функций-интринсик вручную
только при использовании специальных векторных языков программирования



Какие из перечисленных директив компилятора предназначены для векторизации кода?

#pragma cilk_for
#pragma simd
#pragma omp parallel for
#pragma ivdep



Векторизация является параллелизмом на уровне:

параллельной работы нескольких процессов
параллельной работы нескольких ядер
параллельной работы нескольких потоков
параллельного исполнения операций на одном ядре



Для данного цикла определите, зависимы ли его итерации. При наличии зависимости охарактеризуйте ее характер. Массивы a, b не пересекаются.

for (int i = 0; i < n; i++)
    a[i] = b[i] * 2 + 8;


каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до b[i]
каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до a[i]
каждая итерация зависит от предыдущей: a[i] не может быть вычислено до b[i]
итерации независимы



Для данного цикла определите, зависимы ли его итерации. При наличии зависимости охарактеризуйте ее характер.

for (int i = 0; i < n – 1; i++)
    a[i + 1] = a[i] * 2 – 5;


каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до a[i]
каждая итерация зависит от предыдущей: a[i] не может быть вычислено до a[i - 1]
каждая итерация зависит от следующей: a[i + 1] не может быть вычислено до a[i]
итерации независимы



Для данного цикла определите, зависимы ли его итерации. При наличии зависимости охарактеризуйте ее характер.

for (int i = 0; i < n – 2; i++)
    a[i + 2] = a[i] * 3 + 1;


все четные итерации зависимы между собой, все нечетные итерации зависимы между собой, четные и нечетные итерации независимы
каждая итерация зависит от предыдущей: a[i + 2] не может быть вычислено до a[i]
каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до a[i]
итерации независимы



Для данного цикла определите, зависимы ли его итерации. При наличии зависимости охарактеризуйте ее характер. Массивы a, b не пересекаются.

for (int i = 0; i < n - 2; i++)
    a[i] = b[i + 2] * 4 - 5;

каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до a[i]
итерации независимы
все четные итерации зависимы между собой, все нечетные итерации зависимы между собой, четные и нечетные итерации независимы
каждая итерация зависит от предыдущей: a[i] не может быть вычислено до b[i + 2]


Для данного цикла определите, зависимы ли его итерации. При наличии зависимости охарактеризуйте ее характер. Массивы a, b, c не пересекаются.

for (int i = 1; i < n - 2; i++)
    a[i] = b[i + 2] * c[i – 1];

каждая итерация зависит от следующей: a[i] не может быть вычислено до c[i – 1]
каждая итерация зависит от предыдущей: a[i + 1] не может быть вычислено до a[i]
каждая итерация зависит от предыдущей: a[i] не может быть вычислено до b[i + 2]
итерации независимы


Код «D[:] = sin(S[:]);» в Cilk Plus приведёт к:

потере времени
ошибке компиляции
инверсии операций
векторизации



Следующую функцию

void GetOptionPricesV4(float *pT, float *pK, float *pS0, float *pC)
{
  int i;
  float d1, d2, erf1, erf2;

#pragma simd
  for (i = 0; i < N; i++)
  {
    d1 = (logf(pS0[i] / pK[i]) + (r + sig * sig * 0.5f) *
         pT[i]) / (sig * sqrtf(pT[i]));
    d2 = (logf(pS0[i] / pK[i]) + (r - sig * sig * 0.5f) *
         pT[i]) / (sig * sqrtf(pT[i]));
    erf1 = 0.5f + 0.5f * erff(d1 / sqrtf(2.0f));
    erf2 = 0.5f + 0.5f * erff(d2 / sqrtf(2.0f));
    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *
            pT[i]) * erf2;
  }
}

требуется собрать с поддержкой векторного набора команд AVX. Какие ключи компилятора необходимо использовать

-O3
-mavx
никаких, достаточно указания #pragma simd




Следующую функцию

void GetOptionPricesV7(float *pT, float *pK, float *pS0, float *pC)
{
  int i;
  float d1, d2, erf1, erf2, invf;
  float sig2 = sig * sig;

#pragma omp parallel for private(invf, d1, d2, erf1, erf2)
  for (i = 0; i < N; i++)
  {
    invf = invsqrtf(sig2 * pT[i]);
    d1 = (logf(pS0[i] / pK[i]) + (r + sig2 * 0.5f) *
         pT[i]) * invf;
    d2 = (logf(pS0[i] / pK[i]) + (r - sig2 * 0.5f) *
         pT[i]) * invf;
    erf1 = 0.5f + 0.5f * erff(d1 * invsqrt2);
    erf2 = 0.5f + 0.5f * erff(d2 * invsqrt2);
    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *
            pT[i]) * erf2;
  }
}

требуется собрать с поддержкой векторного набора команд AVX (ключ –mavx). Нужно ли модифицировать код?

да, добавить прагму simd перед циклом
да, добавить ключевое слово restrict в объявления параметров в функции
нет, все, что необходимо компилятору для векторизации, в коде присутствует




Какие ключи компилятора необходимо указать для корректной компиляции следующей функции

void GetOptionPrices(
  float * restrict pT, float * restrict pK,
  float * restrict pS0, float * restrict pC)
{
  int i;
  float d1, d2, erf1, erf2;

  for (i = 0; i < N; i++)
  {
    d1 = (logf(pS0[i] / pK[i]) + (r + sig * sig * 0.5f) *
         pT[i]) / (sig * sqrtf(pT[i]));
    d2 = (logf(pS0[i] / pK[i]) + (r - sig * sig * 0.5f) *
         pT[i]) / (sig * sqrtf(pT[i]));
    erf1 = 0.5f + 0.5f * erff(d1 / sqrtf(2.0f));
    erf2 = 0.5f + 0.5f * erff(d2 / sqrtf(2.0f));
    pC[i] = pS0[i] * erf1 - pK[i] * expf((-1.0f) * r *
            pT[i]) * erf2;
  }
}


-restrict
-O2
-debug
никаких, достаточно ключевого слова restrict



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 130

int rr[LOOP_SIZE];
for(int k = 0; k < LOOP_SIZE; k++)
{
  rr[k] = number % k;
}

Возможна ли векторизация данного цикла средствами компилятора, для исполнения на Intel Xeon Phi?

нет, длина цикла не кратна 2
векторизация возможна для части цикла
нет, между итерациями есть зависимость
нет, длина цикла мала




Пусть в программе присутствует следующий код:

    for (int j = 2; j < 1000; j++)
    {
      if (number == 1) break;
      int r;
      r = number % j;
      if (r == 0)
      {
        number /= j;
        divisors[idx].push_back(j);
        j--;
      }
    }   

Возможна ли векторизация данного цикла средствами компилятора для исполнения на Intel Xeon Phi?

нет, длина цикла не кратна 2
нет, между итерациями есть зависимость
векторизация возможна




Пусть в программе присутствует следующий код:

#define LOOP_SIZE 128

int rr[LOOP_SIZE];
for(int k = 0; k < LOOP_SIZE; k++)
{
  rr[k] = number % k;
}

Возможна ли векторизация данного цикла средствами компилятора для исполнения на Intel Xeon Phi?

векторизация возможна
нет, между итерациями есть зависимость
нет, длина цикла мала




Пусть в программе присутствует следующий код:

#define LOOP_SIZE 128

int rr[LOOP_SIZE];

p = 1;
for(int k = 0; k < LOOP_SIZE; k++)
{
  p *= rr[k];
}

Возможна ли векторизация данного цикла средствами компилятора, для исполнения на Intel Xeon Phi?

нет, длина цикла мала
векторизация возможна
нет, между итерациями есть зависимость  



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 16

int rr[LOOP_SIZE];

p = 1;
for(int k = 0; k < LOOP_SIZE; k++)
{
  p *= rr[k];
}

Возможна ли векторизация данного цикла средствами компилятора, для исполнения на Intel Xeon Phi?

векторизация возможна
нет, между итерациями есть зависимость
нет, длина цикла мала



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 16

int rr[LOOP_SIZE];
for(int k = 0; k < LOOP_SIZE; k++)
{
  rr[k] = number % k;
}

Возможна ли векторизация данного цикла средствами компилятора, для исполнения на Intel Xeon Phi?

векторизация возможна
нет, длина цикла мала
нет, между итерациями есть зависимость  



Пусть в программе присутствует следующий код:

#define LOOP_SIZE 30

int rr[LOOP_SIZE];

p = 1;
for(int k = 0; k < LOOP_SIZE; k++)
{
  p *= rr[k];
}

Возможна ли векторизация данного цикла средствами компилятора, для исполнения на Intel Xeon Phi?

нет, длина цикла мала
нет, между итерациями есть зависимость
векторизация возможна для части цикла



Выберите синтаксическую конструкцию, которая бы обеспечивала запуск участка кода на сопроцессоре (язык C/C++):

#pragma offload_attribute
#pragma offload_transfer
__attribute__((target(mic)))
#pragma offload



Выберите синтаксические конструкции, посредством которых выделяются те участки кода, которые должны быть скомпилированы для выполнения на сопроцессоре:

__attribute__((target(mic)))
#pragma offload_transfer
#pragma offload
#pragma offload_attribute



Выберите синтаксические конструкции, которые позволяют обеспечить обмен данными между процессором и сопроцессором:

#pragma offload_attribute
__attribute__((target(mic)))
#pragma offload
#pragma offload_transfer



В системе доступно 3 сопроцессора. Директива #pragma offload target(mic:0) обеспечивает

выполнение следующего за ней блока кода на сопроцессоре 0
приводит к ошибке времени исполнения
выполнение следующего за ней блока кода на сопроцессоре 2
выполнение следующего за ней блока кода на сопроцессоре 1



В системе доступно 3 сопроцессора. Директива #pragma offload target(mic:5) обеспечивает:

выполнение следующего за ней блока кода на сопроцессоре 2
выполнение следующего за ней блока кода на сопроцессоре 0
приводит к ошибке времени исполнения
выполнение следующего за ней блока кода на сопроцессоре 1



В системе доступно 3 сопроцессора. Директива #pragma offload target(mic:6) обеспечивает:

выполнение следующего за ней блока кода на сопроцессоре 0
выполнение следующего за ней блока кода на сопроцессоре 2
приводит к ошибке времени исполнения
выполнение следующего за ней блока кода на сопроцессоре 1



В системе доступно 3 сопроцессора. Директива #pragma offload target(mic:4) обеспечивает:

приводит к ошибке времени исполнения
выполнение следующего за ней блока кода на сопроцессоре 1
выполнение следующего за ней блока кода на сопроцессоре 0
выполнение следующего за ней блока кода на сопроцессоре 2



Директива #pragma offload target(mic) обеспечивает:

выполнение следующего за ней блока кода на одном из доступных сопроцессоров, а в случае их отсутствия либо занятости приводит к ошибке времени исполнения
выполнение следующего за ней блока кода на одном из доступных сопроцессоров, а в случае их отсутствия либо занятости - на центральном процессоре
выполнение следующего за ней блока кода на нулевом сопроцессоре
выполнение следующего за ней блока кода на центральном процессоре



Какой параметр директивы #pragma offload используется для копирования данных с хоста на сопроцессор?

signal
out
target
in



Какой параметр директивы #pragma offload используется для явного указания, где запускать код?

in
signal
out
target



Какой параметр директивы #pragma offload используется для копирования данных с сопроцессора на хост?

in
signal
out
target



Какой параметр директивы #pragma offload используется для асинхронного выполнения кода на сопроцессоре?

out
in
signal
target




При использовании директивы #pragma offload с параметром in для каких данных поддерживается копирование?

для структур с полями любых типов
для скалярных переменных всех встроенных типов данных
для статических массивов с элементами встроенных типов данных



При использовании директивы #pragma offload с параметром in для каких данных поддерживается копирование?

для статических массивов
для скалярных переменных всех встроенных типов данных
для структур, не содержащих полей-указателей



При использовании директивы #pragma offload с параметром in для каких данных поддерживается копирование?

для динамических массивов, при указании размера
для динамических массивов с элементами типа структур, не содержащих полей-указателей, при указании размера
для структур, не содержащих полей-указателей



При использовании директивы #pragma offload с параметром in для каких данных поддерживается копирование?

для скалярных переменных всех встроенных типов данных
для статических массивов с элементами встроенных типов данных
для динамических массивов с элементами типа структур, не содержащих полей-указателей, при указании размера
для структур, не содержащих полей-указателей



При использовании директивы #pragma offload с параметром in для каких данных поддерживается копирование?

для статических массивов с элементами встроенных типов данных
для статических массивов с элементами типа структур, не содержащих полей-указателей
для динамических массивов, при указании размера



Какие из приведенных ниже ключевых слов расширения Intel Cilk Plus позволяют выполнить функцию на сопроцессоре:

_Cilk_shared
_Cilk_spawn
_Cilk_offload
_Cilk_offload_to



Какое из приведенных ниже ключевых слов расширения Intel Cilk Plus отвечает за неблокирующее выполнение кода на сопроцессоре (центральный процессор не ждет, пока сопроцессор закончит свою работу):

_Cilk_spawn
_Cilk_offload_to
_Cilk_shared
_Cilk_offload



Какое из приведенных ниже ключевых слов расширения Intel Cilk Plus позволяет объявить переменную, которая будет доступна как на процессоре, так и на сопроцессоре:

_Cilk_offload_to
_Cilk_spawn
_Cilk_shared
_Cilk_offload




__attribute__((target(mic))) void func(float* a,
    float* b, int count, float c, float d)
{
    #pragma omp parallel for
    for (int i = 0; i < count; ++i)
    {
        a[i] = b[i]*c + d;
    }
}

int main()
{
    const int count = 100;
    float a[count], b[count], c, d;
    …
    #pragma offload target(mic) [Параметры]
        func(a, b, count, c, d);
    …
}

Какие параметры нужно добавить в соответствующее место в приведенном выше коде (вместо "[Параметры]"), чтобы обеспечить корректное и эффективное выполнение кода:

in(a) inout(b)
inout(a, b)
nocopy(a, b)
in(a) out(b)



Использование какого ключевого слова в языках программирования C/C++ позволяет сказать компилятору о том, что доступ к некоторой памяти возможен с использованием только одного указателя (нет перекрытий по памяти с другими указателями)?

restrict
auto
extern
register



Какие из приведенных ниже языков программирования поддерживают неявную схему работы с памятью в режиме offload:FortranCC++C#







Какие из приведенных ниже языков программирования поддерживают явную схему работы с памятью в режиме offload:FortranC++CC#







Какая директива предназначена для безусловной векторизации цикла?

#pragma omp
#pragma simd
#pragma ivdep
#pragma vector aligned




Какая директива предназначена для того, чтобы сообщить компилятору об отсутствии зависимостей в цикле?

#pragma simd
#pragma ivdep
#pragma vector aligned
#pragma omp



Технология Array Notation в Intel Cilk Plus используется для

упрощения кода
векторизации кода
распараллеливания кода



Дан массив A размером 100 элементов. Как с помощью технологии Array Notation получить доступ к элементам 2, 4, 6, 8, 10:

A[2:10]
A[2:2:10]
A[2:2:5]
A[2:5:2]



Отметьте некорректные выражения с точки зрения использования технологии Array Notation:a

[0:4] = b[i];
b[i] = a[0:4];
a[0:4] = 5;
a[0:5] = b[0:6];



Отметьте корректные выражения с точки зрения использования технологии Array Notation:a

[0:4] = b[i];
a[0:4] = 5;
b[i] = a[0:4];
a[0:5] = b[0:6];



Дан массив A размером 100 элементов. Как с помощью технологии Array Notation получить доступ к элементам 10, 11, 12, 13, 14:

A[10:4]
A[10:14]
A[10:13]
A[10:5]




Дан массив A размером 100 элементов. Как с помощью технологии Array Notation получить доступ ко всем элементам массива:

A[0:100]
A[0:100:1]
A[100]
A[:]/1




Ключ компилятора Intel -vec-report6 позволяет получить сообщения о невозможности векторизовать цикл вида:

loop was not vectorized
loop was not vectorized: unsupported data type
vectorization support: type TTT is not supported for operation OOO



Можно ли при использовании режима Offload организовать передачу между хостом и сопроцессором сложных структур данных, например, использующих указатели?

нельзя
можно, для этого существует специальный механизм



Ключ компилятора Intel -vec-report3 позволяет получить сообщения о невозможности векторизовать цикл вида:

loop was not vectorized: unsupported data type
loop was not vectorized
vectorization support: type TTT is not supported for operation OOO



Отметьте некорректное утверждение касательно правил вызова элементарных функций (технология Elemental Functions):

передача структур по ссылке запрещена
непрямые вызовы запрещены
синхронизация запрещена
передача структур по значению запрещена



Отметьте корректные утверждения касательно правил вызова элементарных функций (технология Elemental Functions):

непрямые вызовы запрещены
передача структур по ссылке запрещена
синхронизация запрещена
передача структур по значению запрещена



Какой ключ компилятора Intel позволяет получить наиболее полный отчет о векторизации вашего кода:

–vec-report6
–vec-report3
–vec-report5
–vec-report1



Какая из предложенных ниже синтаксических конструкций говорит компилятору о том, все массивы в рамках цикла выровнены?

__declspec(align(64)) или __attribute__((aligned(64)))
__assume_aligned(A, 64)
_mm_malloc(bufsize, 64)
#pragma vector aligned
__assume(n1%16==0)



Какая из предложенных ниже синтаксических конструкций обеспечивает выравнивание динамических массивов?

#pragma vector aligned
__assume_aligned(A, 64)
__declspec(align(64)) или __attribute__((aligned(64)))
_mm_malloc(bufsize, 64)
__assume(n1%16==0)



Какая из предложенных ниже синтаксических конструкций говорит компилятору о том, что данный адрес выровнен по границе в 64 байта?

__assume(n1%16==0)
__declspec(align(64)) или __attribute__((aligned(64)))
_mm_malloc(bufsize, 64)
__assume_aligned(A, 64)
#pragma vector aligned




Какая из предложенных ниже синтаксических конструкций обеспечивает выравнивание статических массивов?

__declspec(align(64)) или __attribute__((aligned(64)))
__assume_aligned(A, 64)
__assume(n1%16==0)
_mm_malloc(bufsize, 64)
#pragma vector aligned



Какая из предложенных ниже синтаксических конструкций говорит компилятору о том, что значение данной переменной кратно 16?

__assume_aligned(A, 64)
_mm_malloc(bufsize, 64)
__declspec(align(64)) или __attribute__((aligned(64)))
__assume(n1%16==0)
#pragma vector aligned



Опция компилятора Intel -vec-report позволяет получить:

руководство по дополнительной оптимизации. Позволяет получить ряд советов касательно модификации вашего кода с тем, чтобы компилятор мог лучше его оптимизировать
руководство по векторизации. Позволяет получить рекомендации по изменению кода, которые позволят компилятору найти больше возможностей для векторизации
отчет о векторизации. Позволяет получить информацию о том, какой код был векторизован, для какого кода это сделать не удалось и почему
отчет об оптимизации. Информирует программиста о том, как компилятор модифицирует код, пытаясь сгенерировать наиболее оптимальную его версию


Опция компилятора Intel -guide позволяет получить:

руководство по векторизации. Позволяет получить рекомендации по изменению кода, которые позволят компилятору найти больше возможностей для векторизации
руководство по дополнительной оптимизации. Позволяет получить ряд советов касательно модификации вашего кода с тем, чтобы компилятор мог лучше его оптимизировать
отчет о векторизации. Позволяет получить информацию о том, какой код был векторизован, для какого кода это сделать не удалось и почему
отчет об оптимизации. Информирует программиста о том, как компилятор модифицирует код, пытаясь сгенерировать наиболее оптимальную его версию



Опция компилятора Intel -opt-report позволяет получить:

руководство по векторизации. Позволяет получить рекомендации по изменению кода, которые позволят компилятору найти больше возможностей для векторизации
руководство по дополнительной оптимизации. Позволяет получить ряд советов касательно модификации вашего кода с тем, чтобы компилятор мог лучше его оптимизировать
отчет об оптимизации. Информирует программиста о том, как компилятор модифицирует код, пытаясь сгенерировать наиболее оптимальную его версию
отчет о векторизации. Позволяет получить информацию о том, какой код был векторизован, для какого кода это сделать не удалось и почему



Опция компилятора Intel -guide-vec позволяет получить:

отчет об оптимизации. Информирует программиста о том, как компилятор модифицирует код, пытаясь сгенерировать наиболее оптимальную его версию
руководство по векторизации. Позволяет получить рекомендации по изменению кода, которые позволят компилятору найти больше возможностей для векторизации
руководство по дополнительной оптимизации. Позволяет получить ряд советов касательно модификации вашего кода с тем, чтобы компилятор мог лучше его оптимизировать
отчет о векторизации. Позволяет получить информацию о том, какой код был векторизован, для какого кода это сделать не удалось и почему



Признаками наличия неравномерной вычислительной нагрузки между потоками являются:

малое ускорение по сравнению с последовательной программой
неправильные результаты расчетов
большая доля последовательного выполнения



Алгоритм распределения потоков по ядрам сопроцессора Intel Xeon Phi, максимально заполняющий ядра потоками (часть ядер при этом может быть свободна), можно задать как:

KMP_AFFINITY=”scatter”
KMP_AFFINITY=”compact”
KMP_AFFINITY=”balanced”



К чему приводит неравномерное распределение вычислительной нагрузки между потоками?

к нехватке памяти
к ошибкам в процессе вычислений
к неэффективной работе программы



Вы написали программу на языке C. Эта программа работает корректно на подготовленных тестовых данных, но скорость работы вас не устраивает. Каким инструментом, входящим в комплект поставки Intel Parallel Studio, вы воспользуетесь для определения участка программы, на выполнение которого расходуется наибольшее количество времени?

Parallel Composer
Parallel Adviser
Parallel Amplifier
Parallel Inspector



Какова цель балансировки нагрузки между потоками:

обеспечить корректность работы параллельной программы
повысить производительность параллельной программы
обеспечить максимальную утилизацию вычислительных ресурсов



На эффективность работы параллельной программы существенное влияние оказывают следующие факторы:

минимизация непроизводительных издержек при работе с потоками
выбор примитивов синхронизации
доля времени, которое приложение проводит в режиме последовательного выполнения
наличие синхронизации между потоками
объем исходного кода программы
балансировка вычислительной загрузки



Вы написали программу на языке C. Эта программа работает корректно на подготовленных тестовых данных, но скорость работы вас не устраивает. Какими инструментами, входящими в комплект поставки Intel Parallel Studio, вы воспользуетесь для увеличения скорости работы вашей программы?

Parallel Adviser
Parallel Composer
Parallel Amplifier
Parallel Inspector


Вы можете обратится к нам напрямую, через:

skype По Skype: molodoyberkut
telegram По Telegram: @MolodoyBerkut
icq По ICQ: 657089516

Или через форму обратной связи на нашем сайте
Пока сочиняется...
4.png