Сертификат "Оптимизация приложений с использованием компиляторов Intel"
  • Сертификат "Оптимизация приложений с использованием компиляторов Intel"
  • Сертификат "Оптимизация приложений с использованием компиляторов Intel"
Сертификат "Оптимизация приложений с использованием компиляторов Intel"
  • Сертификат "Оптимизация приложений с использованием компиляторов Intel"
  • Сертификат "Оптимизация приложений с использованием компиляторов Intel"

Оптимизация приложений с использованием компиляторов Intel

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

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

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

Каким целям служит ALU

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


Системные регистры – это

память ЦП
память для промежуточных данных
память ALU


Устройство управления (CU) предназначено для выполнения следующих функций

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


Пропускная способность (bandwidth) это

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


Системная шина используется для

вычислений команд
передачи данных
связи устройств ЦП
хранения данных


Что такое производительность ЦП?

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


Факторы, влияющие на производитель¬ность процессора x86

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


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

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


Определенный участок памяти внутри ЦП, используемый для хранения информации, обрабатываемой процессором это

оперативная память
системная шина
системные регистры


Тактовая частота процессора это

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


Какие факторы не влияют на производительность процессора?

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


Современные процессоры Intel имеют архитектуру

CISC
гибрид CISC и RISC
RISC


Почему время доступа к регистрам меньше, чем к ячейкам ОЗУ?

доступ к ним осуществляется параллельно с вычислением
регистры ЦП расположены в самом быстром кэше
они располагаются внутри ЦП


Суперскалярность процессора это

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


Время отклика (свойство памяти) — это

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


Суперскалярность – это

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


Для пересылки данных между ЦП и памятью, а также между ЦП и периферийными устройствами используются:

системные регистры
арифметико-логическое устройство (ALU)
системная шина
оперативная память (RAM)


Суперскалярный процессор – это

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


Способность процессора выполнять несколько операций за один такт это

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


Механизм упреждающей выборки (hardware prefetching) необходим для

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


В полностью ассоциативной кэш-памяти

каждый блок может отображаться в одно место
по младшим разрядам определяется строка КЭШа, где может отображаться данная память, выбор из которой проводится на ассоциативной основе
каждый блок может отображаться в любое место КЭШа


Конвейер – это

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


Суперскалярный процессор это

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


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

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


При исполнении с изменением последовательности операций (out-of-order execution) инструкции выполняются

по мере поступления в конвейер
по мере готовности
согласно предсказателю переходов


КЭШ память различных уровней обычно различается

они равноправны и не различаются
скоростью доступа
тем, что в первом уровне скаляры, во втором – суперскаляры, а в третьем – векто
размерностью: одномерный, двумерный и трёхмерный КЭШ


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

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


Вид кэш-памяти, при котором каждый блок может отображаться в любое место КЭШа, это

память с прямым отображением
полностью ассоциативная кэш-память
память с обратным отображением


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

пропускная способность (bandwidth)
объем адресуемой памяти и скорость доступа к внешней памяти
время отклика (latency)


Число циклов процессора, необходимых для передачи единицы данных из памяти — это

пропускная способность (bandwidth)
тактовая частота процессора
время отклика (latency)


Какие требования к программам, анализируемым VTune?

ни один из перечисленных ответов
каждый исходный файл должен занимать не более 150 килобайт
заголовочные файлы должны соответствовать стандарту VTune
использовать только язык С++


Для чего предназначен VTune™ Performance Analyzer?

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


Какую информацию позволяет получить VTune?

где находится лишний код
где нужно улучшать производительность приложения
где тратится основное время
почему программа недостаточно эффективна
где код неправильно отформатирован


Какие возможности предоставляет VTune?

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


VTune поддерживает языки:

только языки, поддерживаемые Microsoft Visual Studio
только C/C++
ни один из перечисленных ответов
только языки, поддерживаемые компилятором Intel


Какие операционные системы поддерживаются VTune?

Windows
VAX-VMS
PDP-11
Linux
OS/2


Что такое профилирование программы?

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


Какие функции выполняет Sampling?

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


Какие инструменты входят в VTune?

Valgrind
Concurrency
Locks and Waits
Hotspots


Какое событие отвечает за количество тактов процессора?

BUS_TRANS_ANY.ALL_AGENTS
CPU_CLK_UNHALTED.CORE
L2_LINES_IN.SELF.DEMAND
ничего из вышеперечисленного


Какое событие отвечает за неправильно предсказанные ветвления?

INST_RETIRED.ANY
L2_LINES_IN.SELF.DEMAND
BR_INST_RETIRED.MISPRED
ничего из вышеперечисленного


За что отвечает Counter monitor?

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


Что может являться причиной плохого использования ресурсов программой?

большое количество зависимостей по данным
однопоточность
«Узкие места» - bottlenecks
конкуренция за ресурсы


Что такое критический код?

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


Какие условия могут помешать векторизации?

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


Выберите случай OUTPUT зависимости между данными?

READ after WRITE
READ after READ
WRITE after WRITE
WRITE after READ


Выберите случай ANTI зависимости между данными?

WRITE after READ
READ after WRITE
READ after READ
WRITE after WRITE


Выберите случай FLOW зависимости между данными?

READ after WRITE
WRITE after WRITE
READ after READ
WRITE after READ


Под какие платформы предоставляются компиляторы Intel?

Solaris
MacOS X
Windows
FreeBSD
Linux


Компиляторы каких языков предоставляет Intel® ?

Oberon
Java
Forth
C#
Fortran
C/C++


Какую задачу выполняет Front End ?

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


Внутреннее представление – это

ассемблерный код
объектный код
чаще всего – граф


Что из перечисленного является скалярной оптимизацией?

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


Выражение (expression) – это

константа
переменная
дерево выражений
присваивание


Анализ потоков данных – это

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


Набор Uses[b], конструирующийся для def-use chain, содержит:

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


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

Reaches[b]
Uses[b]
Killed[b]
Defsout[b]


Узел M доминирует над узлом N, если

все пути из N идут через M
все пути из M идут в N
все пути в N идут через M
существуют пути из M в N
существуют пути из N в M


Граница доминирования – это

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


SSA-представление – это

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


Может ли один компилятор иметь два разных Front End

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


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

Front End
практически все его части
только само представление
Back End
входные данные


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

Back End
Front End
кодогенератор
внутреннее представление
профилировщик


Что из перечисленного относится к синтаксическому анализу в компиляторе

лексический анализ
протаксический анализ
пунктуационный анализ
грамматический анализ
полиморфический анализ


Что из перечисленного относится к синтаксическому анализу в компиляторе

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


Что является входными данными для синтаксического анализа

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


Каким образом утверждения (statements) связываются в компиляторе Intel

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


По какому признаку утверждения (statements) связываются в список в компиляторе Intel

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


Среди утверждений в программе можно установить порядок

графосемантический
семиденотационный
квазиитеративный
лексикографический
полидинамический


К базовым блокам относятся

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


Базовые блоки составляют

граф потока управления
базовый граф вычислений
опорный граф вычислений
граф вычислений
граф базовых блоков (base block graph)


Базовые блоки это

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


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

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


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

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


Вершинами графа потока управления являются

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


Вершинами графа определения/использования являются

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


Базовый блок графа потока управления это

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


Граф потока управления

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


Листы в дереве выражений

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


Константы в дереве выражений

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


Операции в дереве выражений

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


SSA-форма это:

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


Плюсы SSA формы:

используются регистры сопроцессора
программа начинает занимать гораздо меньше места
используются векторные регистры, которые ускоряют вычисления
используются специальные фунции-интриниксы
очевидность def-use цепочек


К скалярным оптимизациям относится:

перераспределение регистров
вынос инвариантов циклов
скоростной инлайниг (high speed inline)
удаление излишних ветвлений
перемещение вычислений за пределы вызова


Аббревиатура SSA означает

Static Single Assignment
Sign Standard Association
Simple Singles Alignment
SSe Alignment


"Мертвый код" может являться результатом

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


Зависимость это

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


Перестановочная оптимизация трансформирует вычисление в эквивалентное если

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


Зависимость между утверждениями S1 и S2 обязательно существует, если

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


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

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


Дерево выражений это

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


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

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


Для чего предназначен Loop Stream Detector?

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


Что такое расщепление цикла?

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


Для чего используется развертка цикла?

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


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

i=0;                                             
do {
a[i]=b[i];                                                
i++; } while(i<U);

for(i=0;i<U;i++) {
a[j]=b[i]; 
j+=c*i; }

for(i=0;i<n;i++) {
a[i]=i;
    if(i<t)   break;     
}

for(i=0;i<U;i++)   
a[i]=b[i];


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

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


Вынесение инвариантов цикла

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


Что такое инвариант цикла?

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


За счет чего может достигаться улучшение производительности при разбиении циклов?

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


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

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


Из-за чего может происходить потеря производительности при работе с большим циклом?

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


Выберите фрагмент кода, получаемый после применения оптимизации расщепления цикла на заданном цикле:

p = 10;
for (i=0; i<10; ++i) {
    y[i] = x[i] + x[p];
   p = i;
}

y[0] = x[0] + x[10];
  for (i=1; i<10; ++i) {
  y[i] = x[i] + x[i-1];
}

p = 10;
  for (i=1; i<9; ++i) {
  y[i] = x[i] + x[p];
  p = i;
}

y[0] = x[0] + x[10];
  for (i=1; i<9; ++i) {
  y[i] = x[i] + x[i-1];
}


Для чего используется полная развертка?

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


Какие из следующих утверждений верны относительно следующего фрагмента программы:

S1 PI = 3.14
S2 R  = 5
S3 AREA = PI*R **2

существует зависимость <S1,S3>
<S1,S2,S3> эквивалентно <S1,S3,S2>
существует зависимость <S2,S3>
существует зависимость <S1,S2>
<S1,S2,S3> эквивалентно <S2,S1,S3>



Как реализуется развертка циклов?

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


Какие из следующих утверждений верны относительно следующего фрагмента программы:

DO I=1,N
  S1 A(I) = B(I) + 1
  S2 B(I+1) = A(I) – 5
END DO

в этом цикле есть зависимость <S1,S2>
в этом цикле есть зависимость по управлению
в этом цикле нет зависимостей
в этом цикле есть цикловая зависимость <S2,S1>
в этом цикле есть зависимость по данным


Необходимым условием существования зависимости по данным между утверждением S1 и S2 являются следующие условия

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


Что такое нормализованный цикл?

цикл от 1 до некоторого N c шагом 1
цикл от 0 до некоторого N с шагом 1
цикл от 1 до некоторого N c произвольным шагом


В каком случае зависимость <S1,S2> называется истинной

S1 X=…
  S2 X=…

S1 …=X
 S2 X=…

S1 X=…
 S2 …=X


В каком случае зависимость <S1,S2> является антизависимостью.

S1 X=…
   S2 X=…

S1 X=…
  S2 …=X

S1 …=X
  S2 X=…

 
В каком случае зависимость <S1,S2> является выходной зависимостью.

S1 X=…
  S2 …=X

 S1 …=X
  S2 X=…

S1 X=…
  S2 X=…
 
 
Необходимым условием существования цикловой зависимости по данным между утверждением S1 и S2 во множестве вложенных циклов являются следующие условия

оба этих утверждения пишут в эту память
одно из этих утверждений пишет в эту память
утверждение S1 на итерации i и утверждение S2 на итерации j обращаются к одной и той же области памяти


Что такое итерационный вектор?

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


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

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


Цикловые оптимизации являются:

перестановочными трансформациями
трансформациями данных
трансформациями переменных


Что такое свёртка констант?

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


Существует ли зависимость в этом фрагменте кода и, если она есть, определите тип зависимости:

DO I=1,N
  S1 A(I)=…
  S2 …=A(I)
END DO

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


Существует ли зависимость в этом фрагменте кода и, если она есть, определите тип зависимости:

DO I=1,N
  S1 A(I+1) =F(I)
  S2 F(I+1) = A(I)
END DO

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


Векторизация циклов - это

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


Технология MMX предоставляет:

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


SSE - это:

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


Что делает возможным проведение векторизации?

отсутствие зависимостей в цикле
подключение модуля <vector>
использование специальный типов данных
сохранение порядка зависимости после векторизации


SIMD - это:

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


Что является с точки зрения компилятора векторной инструкцией

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

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

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

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


Для выполнения векторной операции требуется

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


Какой размер имеют регистры ymm?

256 бит
32 бита
64 бита
128 бит
16 бит


Какой размер имеют регистры xmm?

128 бит
32 бита
64 бита
256 бит
16 бит


Сколько регистров xmm поддерживается в emm64t

32
4
8
16
64


Операции с упакованными типами данных это

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


Что такое упакованный тип данных?

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


Что происходит с нулевыми битами в упакованном типе данных?

векторизуются
скаляризуются
сжимаются методом Хаффмана
незначимые нулевые биты опускаются
ничего особенного


Векторизация – это

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


Для какой цели необходим интринсик __alignof__ ?

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


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

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


Для чего нужна опция /Qvec-report ?

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


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

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


Что такое ядро процессора?

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


На какие типы по использованию памяти делятся многопроцессорные системы?

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


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

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


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

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


Выберите свойство характеризующее вычислительную систему с общей памятью:

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


Какие свойства есть у вычислительных систем с распределенной памятью?

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


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

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


Какие свойства есть у вычислительных систем с общей памятью?

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


Какие недостатки есть у системы с общей памятью?

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


Какие недостатки есть у системы с распределенной памятью?

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


Какие недостатки есть у системы с неоднородным доступом к памяти?

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


Назовите минусы использования многопоточных приложений.

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


Назовите плюсы использования многопоточных приложений.

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


Что сообщает /Qpar-report3?

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


Какой оптимизацией является автопараллелизация в компиляторе Интел?

цикловой неперестановочной
нецикловой перестановочной
нецикловой неперестановочной
цикловой перестановочной


В чем цель автоматической параллелизации?

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


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

#pragma serial
#pragma no concurrentize
#pragma prefer serial
#pragma prefer concurrent


Действительно ли определение выгодности автопараллелизации – сложная задача?

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


Назовите условие необходимое для применения автопараллелизации?

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


С помощью чего реализована автопараллелизация?

с помощью библиотек OpenMP
с помощью VTune
с помощью шаблонов проектирования


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

#pragma prefer concurrent
#pragma prefer serial
#pragma concurrentize
#pragma serial


Какая директива может заставить компилятор параллелизовать следующий цикл?

#pragma serial
#pragma prefer serial
#pragma concurrent call
#pragma concurrentize


Какие аргументы передаются в функцию, реализующую параллелизацию цикла в компиляторе Intel?

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


Как выглядит функция, реализующая параллелизацию цикла в компиляторе Intel?

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


Что такое OpenMP?

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


Что такое "предвыборка"?

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


Как реализуется параллелизация цикла с помощью функции в компиляторе Intel?

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


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

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


В чем заключаются минусы использования техники "предвыборки"?

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


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

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


При использовании технологии OpenMP поведение переменных следующее:

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


Для распараллеливания необходимо:

код для распараллеливания надо заключать в #pragma omp parallel start и end
использовать ключ компилятора -Qomp. Компилятор сам выберет регионы, которые нужно распараллелить
код для распараллеливания надо заключать в блоки, перед которыми надо включить прагму #pragma omp parallel
код для распараллеливания необходимо выделять в отдельные функции, помеченные интриником __omp_parallel


OpenMP - это:

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



OpenMP использует следующую модель распараллеливания:

модель refork: каждый раз при начале параллельного цикла создаются новые потоки
модель queue: все задачи записываются в очередь; создаются несколько "исполнителей"-потоков и выполняют задачи, которые есть в очереди
модель fork-join: потоки создаются при первом вызове параллельного потока; каждый следующий раз используются уже созданные


Для распараллеливания цикла нужно использовать:

#pragma omp parallel while
#pragma omp parallel for
#pragma omp set parallel for
#pragma omp single


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

добавить переменную в список private
добавить переменную в список lastshared
добавить переменную в список lastprivate
технология не позволяет произвести данное действие


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

lastprivate
private
firstprivate
shared


Shedule clause принимает параметром следующие типы:

realtime
static
object
runtime
guided
dynamic
variant
int


Директива nowait используется для:

указания компилятору, что необходимо начинать код, не дожидаясь окончания инициализации
отключения искусственных задержек в потоках
избавления от надписи "Press any key to exit" в конце выполнения программы
отключения неявной синхронизации потоков в конце цикла


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

master
stop
critical
atomic
sync
barrier


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

1
0
возможно произвольное количество, поскольку OpenMP не ограничивает число потоков
2


Какая опция определяет способ распределения итераций цикла по нитям?

THREADS
SCHEDULE
FORALL
TT

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

ONLYONE
OWNER
SUPER
CREATOR
SOLO
MASTER


Какая директива означает последовательное исполнение?

ORDERED
MASTER
SOLO
SERIAL
guided


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

ATOMIC
CHECK SHARED
CONTROL SHARED
TRANSACTION
SEMAPHORE


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

serial
static
nodispatch
dispatch
runtime
ordered


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

guided
round-robin
serial
concurrent
dynamic
random


Что из перечисленного относят к плохому стилю программирования?

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


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

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


Что такое область видимости переменной?

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


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

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


Какие недостатки имеют оптимизации процедурного уровня?

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


Какие недостатки имеют оптимизации процедурного уровня?

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


Какие недостатки имеют оптимизации процедурного уровня?

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


Какую информацию отражают рёбра в графе вызовов?

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


Что является вершиной в графе вызовов?

функция программы
программа без времени вызова
базовый блок
переменная программы
программа с указанным временем вызова


По какой причине граф вызовов может являться не полным?

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


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

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


Статический граф вызовов это

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


Динамический граф вызовов это

граф базовых блоков (base block graph)
граф вызовов, построенный при вызове программы
статический граф, вершины которого – темпоральные данные
граф вызовов, учитывающий переменные типа "указатель"
граф вызовов, который динамически определяет операционную систему и использует требуемые системные вызовы


Динамический граф вызовов

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


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

/Qmulti-file
/Om
/Qipo
/Qipf


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

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


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

/Qno-ipo
/Qip-disable
/Qip-
/Qipo-disable


Совмещение (выявляемое при анализе совмещений) может возникнуть между

любыми функциями
любыми переменными
только переменными типа "указатель"
любыми программами


Анализ указателей (points to analysis) это

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


Что такое анализ совмещений?

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


Что из перечисленного относят к хорошему стилю программирования?

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


Какие минусы у подстановки (inlining) ?

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


Что такое подстановка (inlining) ?

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


Какие цели преследует подстановка (inlining)?

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


Что понимается под устранением неоднозначности при работе с памятью?

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


В каком случае невозможны перестановочные оптимизации?

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


Что принимается во внимание при устранении неоднозначности при работе с памятью?

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


Что требуют правила ANTI aliasing?

указатель может быть разыменован к объекту такого же типа
указатель может быть разыменован к объекту произвольного типа
указатель может быть разыменован к объекту совместимого типа
указатель может быть разыменован к объекту примитивного типа


Для каких целей используется прагма __declspec(align(n)) ?

Указывает компилятору, что программа не должна компилироваться при нарушении выравнивания
Запрещает компилятору выравнивание массивов с менее чем n элементами
Указывает компилятору, что все типы надо выравнивать одинаково
Указывает компилятору, как выравнивать объекты в памяти


Что делает опция - anti-alias?

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


Что объявляет атрибут restrict при объявлении указателя в языке С/С++?

только указатель может ссылаться на память, на которую он указывает
только указатель или выражение базирующееся на этом указателе может ссылаться на память, на которую он указывает
произвольный указатель может ссылаться на память, на которую он указывает


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

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


При анализе программы при помощи приложения VTune одна из функций отсутствует, по какой причине это может произойти?

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


Можно ли влиять на процесс подстановки?

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


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

ключевое слово inline в описании функции
ключ компилятора -Qinline<func>
ключевое слово forceinline в объявлении функции
прагма #pragma inline перед телом функции


Для отключения подстановки используется опция

/Qb<0>
/Qinline<0>
/Qnoinline


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

#pragma inline перед определением
#pragma forceinline перед вызовом
#pragma inline перед вызовом
#pragma forceinline перед определением


Что такое частичная подстановка функции?

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


Что такое клонирование функций?

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


Какая межпроцедурная оптимизация используется в языке C++

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


На основании какой информации статический профилировщик оценивает веса переходов

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


В чем недостаток статического профилировщика

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


Статический профилировщик может использоваться

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


Что требуется для динамической профилировки программы

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


Отличия динамического профилирования от статического

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


Преимущества динамического профилировщика

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


Когда требуются динамические структуры данных?

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


Динамическое выделение памяти

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


В чем неудобства динамического выделения памяти

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


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

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


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

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


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

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


Граф несовместимости строится

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


Что обозначают цвета в графе несовместимости?

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


При распределении регистров выполняется:

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


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

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


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

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


Для чего используется планирование инструкций?

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


Какие цели преследует разбиение структуры данных (structure splitting)?

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


За счет чего перестановка полей структуры может ускорить работу приложения?

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


С какой целью производится удаление излишних ссылок (pointer chasing)?

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


В чем особенность хранения списков в динамической памяти?

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


Статический список лучше динамического потому что

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


Каким образом можно улучшить размещение элементов списка в динамической памяти

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


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

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

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

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

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