Главная / Программирование /
Оптимизация приложений с использованием компиляторов Intel / Тест 4
Оптимизация приложений с использованием компиляторов Intel - тест 4
Упражнение 1:
Номер 1
Для чего предназначен Loop Stream Detector?
Ответ:
 (1) позволяет разбивать большие циклы на последовательность циклов меньшего размера 
 (2) позволяет избавиться от циклов 
 (3) позволяет ускорить исполнение циклов 
 (4) позволяет отказаться от выборки и декодирования инструкций для маленьких циклов 
Номер 2
Укажите условия, необходимые для применения большинства оптимизаций циклических конструкций
Ответ:
 (1) циклы должны иметь определенное количество итераций 
 (2) циклы не должны иметь переходов за пределы цикла  
 (3) в цикле не должны быть использованы условные операторы 
 (4) в циклах не должно быть вызовов неизвестных функций 
Номер 3
Выберите фрагменты кода, пригодные для большинства цикловых оптимизаций
Ответ:
 (1) for(i=0;i<U;i++)
a[i]=b[i];  
 (2) i=0;
do {
a[i]=b[i];
i++; } while(i<U); 
 (3) for(i=0;i<U;i++) {
a[j]=b[i];
j+=c*i; } 
 (4) for(i=0;i<n;i++) {
a[i]=i;
if(i<t) break;
} 
Упражнение 2:
Номер 1
Вынесение инвариантов цикла
Ответ:
 (1) находит и удаляет выражения независящие от индексных переменных цикла 
 (2) находит и выносит за пределы цикла выражения независящие от индексных переменных цикла 
 (3) находит и выносит инварианты цикла в другой цикл 
 (4) ничего из вышеперечисленного не делает 
Номер 2
Почему происходит улучшение производительности при вынесении инвариантов циклов?
Ответ:
 (1) потому что инварианты не несут смысловой нагрузки в цикле – их можно удалить 
 (2) потому что инварианты цикла эффективнее пересчитывать в отдельном цикле 
 (3) потому что инварианты цикла неизменны на каждой итерации – их можно вычислить один раз 
Номер 3
Что такое инвариант цикла?
Ответ:
 (1) выражения, независящие от индексных переменных цикла 
 (2) выражение, неизменное на каждой итерации 
 (3) выражение, используемое для проверки остановки выполнения цикла 
 (4) выражение, содержащее глобальные переменные 
Упражнение 3:
Номер 1
Какая оптимизация является обратной к объединению циклов?
Ответ:
 (1) вынесение условных переходов 
 (2) расщепление цикла 
 (3) перестановка циклов 
 (4) развертка цикла 
 (5) разбиение цикла 
Номер 2
За счет чего может достигаться улучшение производительности при разбиении циклов?
Ответ:
 (1) за счет улучшения работы с памятью 
 (2) за счет уменьшения количества итераций 
 (3) за счет работы с большим количеством массивов одновременно 
Номер 3
Из-за чего может происходить потеря производительности при работе с большим циклом?
Ответ:
 (1) из-за большого количества арифметических операций 
 (2) если цикл работает с большим количеством различных массивов, то может происходить вытеснение из кеша необходимых для последующих операций адресов  
 (3) из-за вытеснения регистров по причине большого количества инвариантов цикла  
Упражнение 4:
Номер 1
Что такое расщепление цикла?
Ответ:
 (1) оптимизация, которая расщепляет один цикл на два и более 
 (2) оптимизация, которая пытается упростить цикл "отщеплением" ненужных итераций 
 (3) оптимизация, которая пытается упростить цикл "отщеплением" крайних итераций 
Номер 2
Выберите фрагмент кода, получаемый после применения оптимизации расщепления цикла на заданном цикле:
p = 10;
for (i=0; i<10; ++i) {
y[i] = x[i] + x[p];
p = i;
}
Ответ:
 (1) p = 10;
for (i=1; i<9; ++i) {
y[i] = x[i] + x[p];
p = i;
}  
 (2) y[0] = x[0] + x[10];
for (i=1; i<10; ++i) {
y[i] = x[i] + x[i-1];
} 
 (3) y[0] = x[0] + x[10];
for (i=1; i<9; ++i) {
y[i] = x[i] + x[i-1];
} 
Номер 3
Для чего используется развертка цикла?
Ответ:
 (1) для уменьшения количества условных переходов в цикле 
 (2) для разбиения большого цикла на последовательное выполнение большого числа маленьких циклов 
 (3) для уменьшения количества вложенных циклов 
 (4) для удаления вызовов функций 
Упражнение 5:
Номер 1
Как реализуется развертка циклов?
Ответ:
 (1) большой цикл разбивается на последовательное выполнение большого числа маленьких циклов 
 (2) за счет объединения нескольких итераций цикла в одну 
 (3) за счет подстановки тел функций вместо вызовов функций 
Номер 2
Для чего используется полная развертка?
Ответ:
 (1) нет такой оптимизации 
 (2) для развертки небольших циклов 
 (3) для развертки больших циклов 
Номер 3
Какие из следующих утверждений верны относительно следующего фрагмента программы:
S1 PI = 3.14
S2 R = 5
S3 AREA = PI*R **2
Ответ:
 (1) <S1,S2,S3>
эквивалентно <S1,S3,S2>
 
 (2) <S1,S2,S3>
эквивалентно <S2,S1,S3>
 
 (3) существует зависимость <S1,S3>
 
 (4) существует зависимость <S1,S2>
 
 (5) существует зависимость <S2,S3>
 
Упражнение 6:
Номер 1
Какие из следующих утверждений верны относительно следующего фрагмента программы:
DO I=1,N
S1 A(I) = B(I) + 1
S2 B(I+1) = A(I) – 5
END DO
Ответ:
 (1) в этом цикле есть зависимость <S1,S2>
 
 (2) в этом цикле есть цикловая зависимость <S2,S1>
 
 (3) в этом цикле есть зависимость по данным 
 (4) в этом цикле есть зависимость по управлению 
 (5) в этом цикле нет зависимостей 
Номер 2
Необходимым условием существования зависимости по данным между утверждением S1
и S2
являются следующие условия
Ответ:
 (1) оба утверждения обращаются к одной и той же области памяти и модифицируют эту память 
 (2) оба утверждения обращаются к одной и той же области памяти и по крайней мере одно из них пишет в память 
 (3) существует возможный путь при исполнении программы от выражения S1
к выражению S2
 
 (4) не существует пути при исполнении программы от выражения S1
к выражению S2
 
Номер 3
Что такое нормализованный цикл?
Ответ:
 (1) цикл от 0 до некоторого N с шагом 1 
 (2) цикл от 1 до некоторого N c произвольным шагом 
 (3) цикл от 1 до некоторого N c шагом 1 
Упражнение 7:
Номер 1
В каком случае зависимость <S1,S2>
является антизависимостью.
Ответ:
 (1) S1 X=…
S2 …=X 
 (2) S1 …=X
S2 X=… 
 (3) S1 X=…
S2 X=… 
Номер 2
В каком случае зависимость <S1,S2>
является выходной зависимостью.
Ответ:
 (1) S1 X=…
S2 …=X 
 (2) S1 …=X
S2 X=… 
 (3) S1 X=…
S2 X=… 
Номер 3
В каком случае зависимость <S1,S2>
называется истинной
Ответ:
 (1) S1 X=…
S2 …=X 
 (2) S1 …=X
S2 X=… 
 (3) S1 X=…
S2 X=… 
Упражнение 8:
Номер 1
Что такое итерационный вектор?
Ответ:
 (1) вектор целых чисел, каждое из которых представляет значение итерационной переменной для каждого цикла в порядке вложенности 
 (2) вектор целых чисел, каждое из которых представляет значение итерационной переменной для каждого цикла в порядке возрастания 
 (3) вектор целых чисел, каждое из которых представляет значение некоторой переменной после последовательности итераций 
Номер 2
Необходимым условием существования цикловой зависимости по данным между утверждением S1 и S2 во множестве вложенных циклов являются следующие условия
Ответ:
 (1) утверждение S1 на итерации i и утверждение S2 на итерации j обращаются к одной и той же области памяти 
 (2) одно из этих утверждений пишет в эту память 
 (3) оба этих утверждения пишут в эту память 
Номер 3
Для чего используются нормализованные циклы?
Ответ:
 (1) для упрощения вычислений 
 (2) для повышения читаемости кода 
 (3) для приведения циклов к общему виду 
Упражнение 9:
Номер 1
Что такое свёртка констант?
Ответ:
 (1) замена векторов скалярами 
 (2) одна из скалярных оптимизаций 
 (3) операция обратная векторизирующей развёртке 
 (4) уменьшение размерности пространства итераций при константных границах 
Номер 2
Цикловые оптимизации являются:
Ответ:
 (1) перестановочными трансформациями 
 (2) трансформациями данных 
 (3) трансформациями переменных 
Номер 3
Существует ли зависимость в этом фрагменте кода и, если она есть, определите тип зависимости:
DO I=1,N
S1 A(I+1) =F(I)
S2 F(I+1) = A(I)
END DO
Ответ:
 (1) зависимости нет 
 (2) зависимость превносимая циклом 
 (3) зависимость независимая от цикла 
Номер 4
Существует ли зависимость в этом фрагменте кода и, если она есть, определите тип зависимости:
DO I=1,N
S1 A(I)=…
S2 …=A(I)
END DO
Ответ:
 (1) зависимости нет 
 (2) зависимость превносимая циклом 
 (3) зависимость независимая от цикла