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. Na procesorima s modernim varijantama arhitekture x86, to se može utvrditi korištenjem instrukcije CPUID [1, 2] odnosno alata koji tu instrukciju koriste [3, 4]. Za ostale procesore, tu informaciju je potrebno pronaći na mrežnim stranicama proizvođača.

    Konkretno, na različitim varijantama UNIX-a (Linux, MacOSx), tip računala dobivamo naredbom:

     $ uname -a

    Model procesora možemo naći pretraživanjem prema modelu računala [5], programom fpversion (ako je dostupan) ili programom prtconf:

     $/usr/sbin/prtconf -pv | grep cache 

    Podatci o priručnoj memoriji (L1,L2) konkretnog modela procesora mogu se naći pretraživanjem prema imenu procesora [5].

    Na računalima pod Linuxom sličnu informaciju moguće je pročitati iz direktorija /proc/ (datoteka cpuinfo) i /sys/devices/system/cpu/ (npr. datoteka cpu0/cache/index2/size).

    cat /proc/cpuinfo

    Druga mogućnost je koristiti programe hwinfo, lshw lscpu ili dmidecode kojima možemo dobiti detaljnije informacije o sustavu. Na Windowsima možete koristiti program CPU-Z.

  2. Napisati program 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 tri potprograma:

    Potprogrami B i C koriste memorijski spremnik koji je točno dva puta veći od priručne memorije čije promašaje analiziramo (L1 ili L2). Takvim odabirom postižemo da spremnik nije veći od kapaciteta memorije na sljedećoj hijerarhijskoj razini (dakle, ako testiramo L1, spremnik je manji od L2).

    Svaki od navedena tri 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.

    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(RAM)/t(L2)).

    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.

Reference

[1] Wikipedia: CPUID

[2] Intel Processor Identification and the CPUID Instruction

[3] x86info

[4] System Information Viewer

[5] Sun Fire V880 CINT2000 Result

[6] L1 memory cache on Intel x86 processors

posljednja promjena: 14. siječnja 2013.