AOR2/Jul 2022

Izvor: SI Wiki
< АОР2
Datum izmene: 22. maj 2023. u 19:42; autor: KockaAdmiralac (razgovor | doprinosi) (Julski rok prošle godine // Edit via Wikitext Extension for VSCode)
(razl) ← Starija izmena | Trenutna verzija (razl) | Novija izmena → (razl)
Pređi na navigaciju Pređi na pretragu
Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Julski rok 2022. godine održan je 2. jula i trajao je 90 minuta. Na ispitu je takođe bio podeljen podsetnik vektorskih instrukcija sa dokumentacijom AVX instrukcija sa Intelovog zvaničnog sajta.

1. zadatak

Postavka

Opisati tehniku optimizacije vektorskih instrukcija koja se zasniva na dohvatanju izabranih elemenata (Scatter-gather) prilikom pristupa podacima. Dati primer instrukcija procesora koje omogućavaju ovu tehniku i primer programa kod koga se jasno vidi prednost korišćenja ove tehnike.

Rešenje

2. zadatak

Postavka

Data je funkcija int elementsInRange(const unsigned int* input, int n, int min, int max) koja za celobrojne elemente niza zadatog pokazivačem input i dužine n prebrojava koliko ima elemenata u intervalu [min, max]. Smatrati da je n > 0. Elementi niza su celi brojevi int (32 bit).

Potrebno je prepraviti kod tako da ima isti rezultat izvršavanja korišćenjem vektorskih instrukcija koje su date u prilogu ispita.

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

Rešenje

3. zadatak

Postavka

Opisati tehniku korišćenja keša za čuvanje tragova izvršavanja (Trace cache). Dati primer mesta u protočnoj obradi gde se ovaj keš može nalaziti i obrazložiti odgovor. Šta predstavljaju ulazi i izlazi i opisati po čemu se ovaj keš razlikuje od obične keš memorije.

Rešenje

4. zadatak

Postavka

Razmatra se računarski sistem u kome se izvršavanje određene instrukcija odvija u 6 faza pomoću izmenjenog procesora sa standardnom protočnom obradom (slika 4.1.). U procesor sa standardom protočnom obradom je dodata kao drugi stepen jedinica PD (Instruction PreDecode) koji[sic] obavlja transformaciju instrukcija zadate arhitekture u instrukcije RISC arhitekture. Smatrati da pristup memoriji traje dva signala takta. Arhitektura procesora definiše 16 registra[sic] opšte namene. Adrese i podaci su veličine 16 bita.

Slika 4.1. — organizacija procesora
  1. Napisati sekvencu instrukcija (mikroinstrukcija) ciljne RISC arhitekture u koju se obavlja preslikavanje za deo instrukcijskog seta iz tabele 4.1. izvorišne CISC arhitekture. Ukoliko je potrebno proširiti broj registara opšte namene u registarskom fajlu, onda treba za svaki dodat registar napisati čemu služi. Registar R13 predstavlja ukazivač na vrh steka (SP) i pokazuje na poslednju slobodnu lokaciju. Stek raste prema višim adresama. Registar R14 predstavlja ukazivač na baznu adresu steka (BP). Registar R0 se koristi kao akumulator. Bit PSWI u PSW se nalazi na poziciji 3, bit PSWC u PSW se nalazi na poziciji 2. U tabeli 4.1. akcije nisu optimizovano napisane, već opisno.
  2. Nacrtati format instrukcija ciljne RISC arhitekture (na osnovu instrukcija iz tabele 4.1.).
Tabela 4.1. — deo instrukcijskog seta procesora
Asemblerska instrukcija Akcija Mikro instrukcije
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]]

Rešenje

Podsetnik

U podsetniku je bila data dokumentacija za sledeće instrukcije:

  • _mm256_loadu_si256
  • _mm256_set_epi32
  • _mm256_cmpgt_epi32
  • _mm256_mul_epi32
  • _mm256_storeu_epi32
  • _mm256_blendv_epi32
  • _mm256_add_epi32

Dokumentacija za ove instrukcije može se naći sa zvaničnog Intelovog sajta i ovde neće biti ponovljena.