АОР2/Јул 2022
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Јулски рок 2022. године одржан је 2. јула и трајао је 90 минута. На испиту је такође био подељен подсетник векторских инструкција са документацијом AVX инструкција са Интеловог званичног сајта.
1. задатак
Поставка
Описати технику оптимизације векторских инструкција која се заснива на дохватању изабраних елемената (Scatter-gather) приликом приступа подацима. Дати пример инструкција процесора које омогућавају ову технику и пример програма код кога се јасно види предност коришћења ове технике.
Решење
2. задатак
Поставка
Дата је функција int elementsInRange(const unsigned int* input, int n, int min, int max)
која за целобројне елементе низа задатог показивачем input
и дужине n
пребројава колико има елемената у интервалу [min, max]
. Сматрати да је n > 0. Елементи низа су цели бројеви int
(32 bit).
Потребно је преправити код тако да има исти резултат извршавања коришћењем векторских инструкција које су дате у прилогу испита.
int elementsInRange(const unsigned int* input, int n, int min, int max) {
int result = 0;
for (int i = 0; i < n; i++) {
if (input[i] >= min && input[i] <= max)
result = result + 1;
}
return result;
}
Решење
3. задатак
Поставка
Описати технику коришћења кеша за чување трагова извршавања (Trace cache). Дати пример места у проточној обради где се овај кеш може налазити и образложити одговор. Шта представљају улази и излази и описати по чему се овај кеш разликује од обичне кеш меморије.
Решење
4. задатак
Поставка
Разматра се рачунарски систем у коме се извршавање одређене инструкција одвија у 6 фаза помоћу измењеног процесора са стандардном проточном обрадом (слика 4.1.). У процесор са стандардом проточном обрадом је додата као други степен јединица PD (Instruction PreDecode) који[sic] обавља трансформацију инструкција задате архитектуре у инструкције RISC архитектуре. Сматрати да приступ меморији траје два сигнала такта. Архитектура процесора дефинише 16 регистра[sic] опште намене. Адресе и подаци су величине 16 бита.
- Написати секвенцу инструкција (микроинструкција) циљне RISC архитектуре у коју се обавља пресликавање за део инструкцијског сета из табеле 4.1. изворишне CISC архитектуре. Уколико је потребно проширити број регистара опште намене у регистарском фајлу, онда треба за сваки додат регистар написати чему служи. Регистар R13 представља указивач на врх стека (SP) и показује на последњу слободну локацију. Стек расте према вишим адресама. Регистар R14 представља указивач на базну адресу стека (BP). Регистар R0 се користи као акумулатор. Бит PSWI у PSW се налази на позицији 3, бит PSWC у PSW се налази на позицији 2. У табели 4.1. акције нису оптимизовано написане, већ описно.
- Нацртати формат инструкција циљне RISC архитектуре (на основу инструкција из табеле 4.1.).
Асемблерска инструкција | Акција | Микро инструкције |
---|---|---|
ADDB Rx
|
AX15..8 = 0 AX7..0 = AX7..0 + Rx7..0 |
|
ENTER immed
|
PUSH BP BP = SP SP = SP + immed |
|
INTD
|
PSWI = 0
|
|
POPPC
|
POP PC
|
|
SUB (adr)
|
AX = AX - MEM[MEM[adr]]
|
|
LOOPZ disp
|
R12 = R12 - 1 IF R12 == 0 THEN PC = PC + disp |
|
LD +(Rx)
|
Rx = Rx - 1 ACC = MEM[Rx] |
|
SUBC (adr)
|
IF PSWC == 1 THEN ACC = ACC - MEM[MEM[adr]] - 1 ELSE ACC = ACC - MEM[MEM[adr]] |
Решење
Подсетник
У подсетнику је била дата документација за следеће инструкције:
_mm256_loadu_si256
_mm256_set_epi32
_mm256_cmpgt_epi32
_mm256_mul_epi32
_mm256_storeu_epi32
_mm256_blendv_epi32
_mm256_add_epi32
Документација за ове инструкције може се наћи са званичног Интеловог сајта и овде неће бити поновљена.