Difference between revisions of "LU-MOP-b13"

From DiLab
Jump to: navigation, search
(Mājas darbi)
(MD2)
Line 179: Line 179:
Matricu reizināšana.
Matricu reizināšana.


Termiņš: 14.jūnijs, 2013.g., 12:00.
Jums līdzīgi kā MD1 jāizstradā asemblera programma '''matmul()''', kas reizina divas 2D matricas, un rezultātu ieliek trešajā.

Jums, līdzīgi kā MD1, jāizstrādā asemblera procedūra '''matmul()''', kas reizina divas 2D matricas, un rezultātu ieliek trešajā.
Jūsu asemblera programma tiks izsaukta no C valodā rakstītas, tātad parametriem jābūt atbilstošiem.
Jūsu asemblera programma tiks izsaukta no C valodā rakstītas, tātad parametriem jābūt atbilstošiem.


$> md2 < infile.txt > outfile.txt
Skaitlis n tiek padots kā parametrs.

Jāizstrādā un jāiesniedz:
Jāizstrādā un jāiesniedz sekojoši faili (visi papildus faili tiks ignorēti):
# '''Makefile''' - fails, kas ļauj kompilēt jūsu programmu
# '''Makefile''' - fails, kas ļauj kompilēt jūsu programmu
# '''md2.h''' - pirmkoda fails ar funkcijas prototipu, ko iekļaus gan C gan asemblera faili.
# '''md2.h''' - pirmkoda fails ar funkcijas prototipu, ko iekļaus gan C gan asemblera faili.
Line 190: Line 193:


Testējot, matricas jāievada no komandu rindas.
Testējot, matricas jāievada no komandu rindas.
Matricas tiek padotas caur ''stdin'', piemēram, no komandu rindas straumējot no teksta faila.
Rezultējošā matrica tiek izvadīta uz ''stdout'', ko arī var straumēt uz teksta failu.




Programas prototips:
Procedūras '''matmul''' prototips:
int matmul( int w1, int h1, int *m1, int w2, int h2, int *m2, int *m3 );
int matmul( int w1, int h1, int *m1, int w2, int h2, int *m2, int *m3 );


* Programmas parametri: w1 un w2 ir matricas platums un h1 un h2 ir augstums attiecīgi pirmajai un otrajai matricām m1 un m2.
* Procedūras parametri: ''w1'' un ''w2'' ir matricas platums un ''h1'' un ''h2'' ir augstums attiecīgi pirmajai un otrajai matricām ''m1'' un ''m2''.
* Trešās matricas m3 dimensijas nosaka matricu reizinājuma operācija.
* Trešās matricas ''m3'' dimensijas nosaka matricu reizinājuma operācija.
* Matricu elementi atmiņā glabājas kā divdimensiju masīvs: Int elementi. Piemēram, matrica
* Matricu elementi atmiņā glabājas kā divdimensiju masīvs: Int elementi. Piemēram, 2x3 matrica
1 2 3
1 2 3
4 5 6
4 5 6
atmiņā glabājas kā 6 int elementi, katrs izmērā 4 baiti: { 1, 2, 3, 4, 5, 6 }
atmiņā glabājas lineāri, kā 6 ''int'' elementi, katrs izmērā 4 baiti: { 1, 2, 3, 4, 5, 6 }


Visi datu izmēri saiet parastajā int reģistrā, tātad neparsniedz 4 baitu garumu.
Visi datu izmēri (atsevišķie skaitļi) saiet ''int'' reģistrā, tātad nepārsniedz 4 baitu garumu.


----
----
Risinājumam jābūt testētam, un jādarbojās uz asm1.linux.edu.lv servera (arm platformai, emulācijas režīmā).
Risinājumam jābūt testētam, un jādarbojās uz ''asm1.linux.edu.lv'' servera, lietojot ARM emulatoru qemu-arm.
Bez tam, tas, ka risinājums darbojas uz ''asm1'' servera, nenozīmē, ka tajā nav kļūdas un ka par to automātiski pienāktos maksimālais vērtējums. Pieredze rāda, ka reizēm "paveicas", un risinājums darbojas, lai arī tajā ir kļūdas. Testējot vai lietojot to nākamreiz vai uz citas aparatūras tas var nestrādāt. Tāpēc lūdzu pieiet savam kodam kritiski. Piemēram, vai esat saglabājuši un atjaunojuši visus izmantotos reģistrus, sākot no R4 un uz augšu? Šī ir tipiska kļūda, kas var reizēm nostrādāt un reizēm nē.


Risinājumu jāiesūta elektroniski.
Risinājumu jāiesūta elektroniski.
Risinājumam ar visiem failiem jābūt uz servera <code>asm1.linux.edu.lv</code> jūsu konta direktorijā md1:
Risinājumam ar visiem failiem jābūt uz servera <code>asm1.linux.edu.lv</code> jūsu konta direktorijā md2:


~/md1/
~/md2/


Uzskaitītie faili tiks izkopēti no minētas direktorijas MD termiņa beigās.
Uzskaitītie faili tiks izkopēti no minētas direktorijas MD termiņa beigās.


Jautājumus un neskaidrības par MD lūdzu iesūtīt kursa google grupā.
Jautājumus un neskaidrības par MD lūdzu iesūtīt kursa google-grupā.


== Literatūra ==
== Literatūra ==

Revision as of 09:28, 21 May 2013

Mašīnorientētā programmēšana (MOP)

LU DF bakalaura studiju kurss DatZ4017, meklēt eStudijās.


  • Pasniedzējs: Leo Seļāvo (epasts: vards.uzvards @ gmail.com)



Kalendārs

Datums, nedēļa Kursa saturs Uzdevumi
04.02.2013.

Ievads kursā. Kursa mērķi. Iegultās un mazo procesoru sistēmas. ARM arhitektūra. Mācību izstrādes vide.

11.02.2013.

Sešpadsmitnieku un citas skaitīšatas sistēmas datoriem. Pārveidojumi starp dažādām sistēmām, aritmētiskās darbības. Biti, baiti, vārdi, nibbles.

18.02.2013. Lekcija pārcelta.
25.02.2013.

Procesora uzbūve. Operatīvā atmiņa. Procesora un atmiņas sadarbība. Adreses. Reģistri. Procesora režīmi.

  • Kontroldarbs MK1
04.03.2013.

Skaitļu attēlošana papildkodā.

Programmu izstrādes vide.

11.03.2013.

Programmu izstrādes vide.

"asm1" serveris praktiskajiem darbiem.

  • Kontroldarbs MK2
  • Notiek praktiskie darbi
18.03.2013.

Komandu pieraksts, aritmētiskās un bitu operācijas.

Notiek praktiskie darbi
25.03.2013.

Lieldienu brīvdienas

01.04.2013.

Lieldienu brīvdienas

08.04.2013.

Vadības maiņas komandas, testi, bitu operācijas.

15.04.2013.

Adresācijas režīmi, darbs ar atmiņu.

Kontroldarbs MK3
22.04.2013.

Apakašprogrammu izsaukumi, saskarne ar "C".

29.04.2013.

Simboliskie dati, kodu tabulas.

06.05.2013.

Brīvdiena - jo 4.maijs ir sestdiena

MD1 termiņš 12:00

13.05.2013.

Izteiksmes un makro valoda.

Iekļautais asemblers.

MD1 atkartotas iesūtīšanas termiņš: trešdien, 15.maijā 12:00, (rezultāts*=0.7)

20.05.2013.

Lielais kontroldarbs KD1

27.05.2013.

Programmatūras izstrādē lietoto rīku darbības principi.

Instrukciju izpildes laiki.

Sistēmas sāknēšana, priviliģētās operācijas.

Kursa vielas pārskats.

xx.06.2013. Eksāmens

 

Kontroldarbi


Mājas darbi

MD1

Termiņš: 6.maijs, 12:00

Izveidot programmiņu asemblerā, kas aprēķina aritmētiskās progresijas summu no 1 līdz n ar soli 1.

Skaitlis n tiek padots kā parametrs. Jāizstrādā un jāiesniedz:

  1. Makefile - fails, kas ļauj kompilēt jūsu programmu
  2. md1.h - pirmkoda fails ar funkcijas prototipu, ko iekļaus gan C gan asemblera faili.
  3. md1.s - programmu asemblerā, kas aprēķina aritmētiskās progresijas summu.
  4. md1_main.c - programmu C valodā, kas izsauc asamblera programmu un padod tai parametru n un saņem rezultātu, ko izdrukā uz ekrāna.

Testējot, parametrs n jāpadod no komandu rindas, līdzīgi kā praktisko darbu piemēros.

Tātad, jums būs jāizveido md1_main.c programma, kas saņem parametru caur argv[1], pārveido to par "int", un šis veselais skaitlis jāpadod kā parametrs funkcijai asum(), kas realizēta asemblera kodā, failā md1.s

Rezultāts jāsaņem atpakaļ C programmā un jāizdrukā, piemēram, ar printf() funkciju. Jāizdrukā tikai skaitlis un rindas beigu simbols '\n'.

Piemērs izsaukumam (tam, kā jūsu programma tiks testēta, tikai ar citiem skaitļiem):

leo@asm1:~/work/md1$>  qemu-arm  ./md1 10
55

Risinājums nedrīkst izmantot reizināšanas instrukcijas!

Risinājumam jābūt testētam, un jādarbojās uz asm1.linux.edu.lv servera (arm platformai, emulācijas režīmā).

Risinājumu jāiesūta elektroniski. Risinājumam ar visiem failiem jābūt uz servera asm1.linux.edu.lv jūsu konta direktorijā md1:

~/md1/ 

Uzskaitītie faili tiks izkopēti no minētas direktorijas MD termiņa beigās.

Jautājumus un neskaidrības par MD lūdzu iesūtīt kursa google grupā.


MD2

Matricu reizināšana.

Termiņš: 14.jūnijs, 2013.g., 12:00.

Jums, līdzīgi kā MD1, jāizstrādā asemblera procedūra matmul(), kas reizina divas 2D matricas, un rezultātu ieliek trešajā. Jūsu asemblera programma tiks izsaukta no C valodā rakstītas, tātad parametriem jābūt atbilstošiem.

$> md2 < infile.txt > outfile.txt

Jāizstrādā un jāiesniedz sekojoši faili (visi papildus faili tiks ignorēti):

  1. Makefile - fails, kas ļauj kompilēt jūsu programmu
  2. md2.h - pirmkoda fails ar funkcijas prototipu, ko iekļaus gan C gan asemblera faili.
  3. md2.s - programmu asemblerā, kas aprēķina matricu reizinājumu.
  4. md2_main.c - programmu C valodā, kas izsauc asamblera programmu un padod tai matricas, saņem rezultātu, ko izdrukā uz ekrāna.

Testējot, matricas jāievada no komandu rindas. Matricas tiek padotas caur stdin, piemēram, no komandu rindas straumējot no teksta faila. Rezultējošā matrica tiek izvadīta uz stdout, ko arī var straumēt uz teksta failu.


Procedūras matmul prototips:

int matmul( int w1, int h1, int *m1, int w2, int h2, int *m2, int *m3 );
  • Procedūras parametri: w1 un w2 ir matricas platums un h1 un h2 ir augstums attiecīgi pirmajai un otrajai matricām m1 un m2.
  • Trešās matricas m3 dimensijas nosaka matricu reizinājuma operācija.
  • Matricu elementi atmiņā glabājas kā divdimensiju masīvs: Int elementi. Piemēram, 2x3 matrica
1  2  3
4  5  6

atmiņā glabājas lineāri, kā 6 int elementi, katrs izmērā 4 baiti: { 1, 2, 3, 4, 5, 6 }

Visi datu izmēri (atsevišķie skaitļi) saiet int reģistrā, tātad nepārsniedz 4 baitu garumu.


Risinājumam jābūt testētam, un jādarbojās uz asm1.linux.edu.lv servera, lietojot ARM emulatoru qemu-arm. Bez tam, tas, ka risinājums darbojas uz asm1 servera, nenozīmē, ka tajā nav kļūdas un ka par to automātiski pienāktos maksimālais vērtējums. Pieredze rāda, ka reizēm "paveicas", un risinājums darbojas, lai arī tajā ir kļūdas. Testējot vai lietojot to nākamreiz vai uz citas aparatūras tas var nestrādāt. Tāpēc lūdzu pieiet savam kodam kritiski. Piemēram, vai esat saglabājuši un atjaunojuši visus izmantotos reģistrus, sākot no R4 un uz augšu? Šī ir tipiska kļūda, kas var reizēm nostrādāt un reizēm nē.

Risinājumu jāiesūta elektroniski. Risinājumam ar visiem failiem jābūt uz servera asm1.linux.edu.lv jūsu konta direktorijā md2:

~/md2/ 

Uzskaitītie faili tiks izkopēti no minētas direktorijas MD termiņa beigās.

Jautājumus un neskaidrības par MD lūdzu iesūtīt kursa google-grupā.

Literatūra

Grāmatas un citi resursi

  • ARM Architecture Reference Manual, ARM DDI 0100I, ARM Limited, 2005.
  • Intel R XScaleTM Microarchitecture Assembly Language Quick Reference Card ARM Instruction Set, Intel Corporation, 2001
  • Intel XScale R Core Developer’s Manual, ON: 273473-002, Intel Corporation, 2004
  • Intel R IXP42X Product Line of Network Processors and IXC1100 Control Plane Processor Developer’s Manual, ON: 252480-006US, Intel Corporation, 2006
  • Patterson and Hennessy, Computer Organization and Design, 4th Edition (@Amazon)
  • "Building Embedded Linux Systems" O'Reilly Media, 2008, ISBN 0596529686

Pamācības

Saites

Atziņas