АОР2/Јун 2022 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Junski rok prošle godine // Edit via Wikitext Extension for VSCode)
 
м (Ispravka u formatiranju)
Ред 50: Ред 50:
|-
|-
| <code>BSWAP Rx</code>
| <code>BSWAP Rx</code>
| <code>AX = RX << 8 | RX >> 8</code>
| <code>AX = RX << 8 {{!}} RX >> 8</code>
|  
|  
|-
|-

Верзија на датум 22. мај 2023. у 19:45

Овај рок није решен. Помозите SI Wiki тако што ћете га решити.

Јунски рок 2022. године одржан је 11. јуна и трајао је 90 минута. На испиту је такође био подељен подсетник векторских инструкција са документацијом AVX инструкција са Интеловог званичног сајта.

1. задатак

Поставка

Описати технику оптимизације векторских инструкција која се заснива на корачању (Stride) приликом приступа подацима. Дати пример програма код кога се јасно види предност коришћења ове технике.

Решење

2. задатак

Поставка

Дата је функција void scale(const unsigned float* input, int n) која реалне елменте[sic] низа задатог показивачем input и дужине n сразмерно умањује тако да сваки елемент низа буде у опсегу [0, 1]. Сматрати да је n > 0. Елементи низа су реални бројеви float (32 bit). Потребно је преправаити код тако да има исти резултат извршавања коришћењем векторских инструкција које су дате у прилогу испита.

void scale(const unsigned float* input, int n) {
    unsigned float max = input[0];

    for (int i = 1; i < n; i++) {
        if (input[i] > max)
            max = input[i];
    }

    for (int i = 0; i < n; i++) {
        input[i] = input[i] / max;
    }
}

Решење

3. задатак

Поставка

Посматра се предвиђање скока коришћењем предиктора са два нивоа. Описати општи рад овог предиктора. Овај предиктор се може јавити у више варијанти у зависности од тога на који начин је имплементиран сваки ниво. Описати те варијанте и назначити од чега зависе.

Решење

4. задатак

Поставка

Разматра се рачунарски систем у коме се извршавање одређене инструкција одвија у 6 фаза помоћу измењеног процесора са стандардном проточном обрадом (слика 4.1.). У процесор са стандардом проточном обрадом је додата као други степен јединица PD (Instruction PreDecode) који[sic] обавља трансформацију инструкција задате архитектуре у инструкције RISC архитектуре. Сматрати да приступ меморији траје два сигнала такта. Архитектура процесора дефинише 16 регистра[sic] опште намене. Адресе и подаци су величине 16 бита.

Слика 4.1. — организација процесора
  1. Написати секвенцу инструкција (микроинструкција) циљне RISC архитектуре у коју се обавља пресликавање за део инструкцијског сета из табеле 4.1. изворишне CISC архитектуре. Уколико је потребно проширити број регистара опште намене у регистарском фајлу, онда треба за сваки додат регистар написати чему служи. Регистар R13 представља указивач на врх стека (SP) и показује на последњу слободну локацију. Стек расте према вишим адресама. Регистар R14 представља указивач на базну адресу стека (BP). Регистар R0 се користи као акумулатор. Бит PSWI у PSW се налази на позицији 3, бит PSWC у PSW се налази на позицији 2. У табели 4.1. акције нису оптимизовано написане, већ описно.
  2. Нацртати формат инструкција циљне RISC архитектуре (на основу инструкција из табеле 4.1.).
Табела 4.1. — део инструкцијског сета процесора
Асемблерска инструкција Акција Микро инструкције
BSWAP Rx RX >> 8
ENTER immed
PUSH BP
BP = SP
SP = SP + immed
INTE PSWI = 1
LDPC AX = PC
NOT adr AX = !MEM[adr]
LOOPNZ disp
R12 = R12 - 1
IF R12 != 0 THEN
    PC = PC + disp
ST -(Rx)
Rx = Rx - 1
MEM[Rx] = ACC
ADDC (adr)
IF PSWC == 1 THEN
    ACC = ACC + MEM[MEM[adr]] + 1
ELSE
    ACC = ACC + MEM[MEM[adr]]

Решење

Подсетник

У подсетнику је била дата документација за следеће инструкције:

  • _mm256_load_ps
  • _mm256_set_ps
  • _mm256_cmpgt_ps
  • _mm256_mul_ps
  • _mm256_storeu_ps
  • _mm256_blendv_ps
  • _mm256_max_ps

Документација за ове инструкције може се наћи са званичног Интеловог сајта и овде неће бити поновљена.