Arhitektura računala 2, vježba 3
Utjecaj arhitekture na programsku podršku

Predmet ove vježbe su utjecaji arhitektonskih svojstava računala na izvođenje programa u višem programskom jeziku. Po mogućnosti izvedite vježbe na različitim arhitekturama (x86, ARM, ...) te usporedite rezultate.

1. uređaj bajtova u riječi (endianness)

Napisati program kojim se testira način uređenja bajtova u riječi računala. Odrediti kakav uređaj bajtova koristi arhitektura x86 te, po mogućnosti, neka druga arhitektura (npr. ARM).

Uputa: sadržaj pojedinačnih bajtova riječi otkrijte prikladnim pokazivačem.

Napomena: Noviji procesori arhitekture ARM mogu se konfigurirati tako da koriste bilo koji od dva navedena načina uređaja bajta u riječi. Vaš zadatak je otkriti koji način preferiraju prevoditelji.

2. priručne memorije

Cilj vježbe je analizirati utjecaj priručne memorije na performansu programa. Zadatak riješiti po slijedećim točkama:

  1. Odrediti strukturu priručnih memorija (L1, L2) ciljnog računala, tj, kapacitet, širinu linije, i asocijativnost.

    Uputa: Sasvim općenito, model procesora može se odrediti prema modelu računala ili prema računu za računalo kupljeno po komponentama. Parametri priručnih memorija mogu se pronaći na mrežnim stranicama modela procesora ili na specijaliziranim stranicama poput http://wikichip.org.

    Na računalima pod Linuxom tu informaciju možemo dobiti i od operacijskog sustava. Dovoljno je pročitati sistemsku datoteku /proc/cpuinfo ili datoteke iz kazala /sys/devices/system/cpu/ (npr. datoteku cpu0/cache/index2/size).

    cat /proc/cpuinfo

    Još jedna mogućnost je osloniti se na specijalizirane aplikacijske programe. Primjeri takvih programa na inuxu su: hwinfo, lshw , lscpu ili dmidecode. Na Windowsima postoje CPU-Z, System information viewer i x86info. Nedostatak ovog pristupa je potreba za instalacijom programa.

    BONUS Na procesorima s modernim varijantama arhitekture x86, ovaj zadatak možete riješiti i vlastitim programom koji poziva instrukciju CPUID (Wikipedia, Intel).

  2. Napisati program u C-u ili C++-u koji će pokazati razliku brzine pristupa podatcima:

    Uvedimo sljedeće oznake:

    Program treba izmjeriti prosječnu ostvarenu propusnost pristupa bajtovima spremnika tijekom velikog broj izvođenja svakog od sljedeća četiri potprograma:

    Potprogrami B i C koriste memorijski spremnik koji je veći od priručne memorije čije promašaje analiziramo (L1, L2 ili L3), ali ipak manji od kapaciteta memorije na sljedećoj hijerarhijskoj razini (dakle, ako testiramo L1, spremnik je manji od L2).

    Svaki od navedenih potprograma treba pozivati velik broj puta, u programskoj petlji. Vidimo da će potprogram A generirati promašaj priručne memorije L1 relativno rijetko (jednom u b1 pristupa). Potprogram B će generirati promašaj priručne memorije L1 u svakom pristupu, ali će velika većina tih pristupa biti unutar priručne memorije L2. Potprogram C će generirati promašaj priručne memorije L2 u svakom pristupu, ali će velika većina tih pristupa biti unutar priručne memorije L3. Potprogram D će generirati promašaj priručne memorije L3 u svakom pristupu.

    Za svaki potprogram potrebno je odrediti prosječno vrijeme pristupa pojedinom podatku, kao i postignutu propusnost u MB/s. Na temelju dobivenih podataka ocijeniti omjer vremena pristupa pojedinim elementima memorijske hijerarhije: t(L2)/t(L1), t(L3)/t(L2), t(RAM)/t(L3).

    Upute:

  3. Česti su programi koji 2D matrice implementiraju linearnim spremnicima. Ako je buf adresa spremnika, i i j indeksi retka i stupca, a rows i cols dimenzije matrice, onda odgovarajućem elementu pristupamo s buf[i*cols+j]. Često je potrebno istu operaciju primijeniti nad svim elementima matrice u dvostrukoj petlji, npr pri operaciji zbrajanja matrica. Postavlja se pitanje što je bolje, prvo petljati po i pa onda po j ili obratno. Zadatak je eksperimentalno utvrditi ovu činjenicu za velike matrice koje ne mogu stati u memoriju L2. Komentirati rezultate.

    Upute

3. utjecaj tipa podataka na performansu programa

Cilj vježbe je analizirati utjecaj (i) ugrađenog tipa podataka te (ii) odabir elementarne operacije na performansu programa. Vezano uz program iz 2c), potrebno je napraviti sljedeće:

Komentirati rezultate.

4. Upute za predaju u sustav Ferko

Molimo vas da na sustav Ferko postavite izvornu datoteku s rješenjem zadataka 2b. Datoteka treba sadržavati potprograme A, B i C. U zaglavlju datoteke (kao komentar) navedite ime operacijskog sustava na kojem su potprogrami ispitivani, model i ime procesora, radnu frekvenciju, te parametre s1, b1, s2, b2.

Ako procesor kojeg ispitujete ima priručnu memoriju L3, u komentaru uključite i parametre s3, b3, te odredite t(RAM)/t(L3) te t(L3)/t(L2).

Preporučujemo da napravite cijelu pripremu kako biste bili spremni za kolokviranje vježbe.