ΗΥ-225: Οργάνωση Υπολογιστών
Άνοιξη 2011
Τμήμα Επιστήμης Υπολογιστών
© Πανεπιστήμιο Κρήτης

Σειρά Ασκήσεων 4:
Παραλληλία και Κωδικοποίηση Εντολών

Προθεσμία έως 14 Μαρτίου 2011, ώρα 17:00

4.1 Οι παρακάτω κώδικες Assembly αποτελούν τμήματα ενός παράλληλου προγράμματος που γράφτηκε για να εκτελεστεί σε 2 πυρήνες με σκοπό να υπολογίσει το ελάχιστο από ένα σύνολο 100 αριθμών που είναι αποθηκευμένοι σε έναν πίνακα ARRAY στη μνήμη, και να αποθηκεύσει το υπολογισμένο ελάχιστο στη θέση μνήμης ΜΙΝ. Οι 2 πυρήνες διαμοιράζονται τη μνήμη δεδομένων του συστήματος, η οποία θεωρούμε ότι έχει αρχικοποιηθεί από τον πρώτο πυρήνα (CORE 0) με δεδομένα. Ο κώδικας εξετάζει αριθμούς που διαβάζει από τον πίνακα και τους συγκρίνει με τον τρέχοντα ελάχιστο αριθμό, που βρίσκεται αποθηκευμένος σε μία θέση μνήμης στην οποία δείχνει ο καταχωρητής $s0.

	#CORE 0
	.data
ARRAY:	.word ... #assume 100 initialized integers
MIN:    .word 0x7ffffff
	.text
	.globl main
main:  la   $s1, ARRAY
       la   $s0, MIN
       addi $t0, $0, 0     #initialize i
       addi $t1, $0, 50    #loop bound of CORE 0 
loop:  sll  $t2, $t0, 2    #multiply i by 4
       add  $t2, $s1, $t2
       lw   $t2, 0($t2)    #load a[i]
       lw   $t3, 0($s0)    #load current minimum
       slt  $t4, $t2, $t3  #if a[i] < current minimum
       beq  $t4, $0, exit
       sw   $t2, 0($s0)    #store a[i] as current minimum
       addi $t0, $t0, 1    #advance i
       bne  $t0, $t1, loop #loop back
exit:  addi $v0, $v0, 10
       syscall


	#CORE 1



	.globl main
main:  la   $s1, ARRAY
       la   $s0, MIN
       addi $t0, $0, 50    #initialize i
       addi $t1, $0, 100   #loop bound of CORE 1 
loop:  sll  $t2, $t0, 2    #multiply i by 4
       add  $t2, $s1, $t2
       lw   $t2, 0($t2)    #load a[i]
       lw   $t3, 0($s0)    #load current minimum
       slt  $t4, $t2, $t3  #if a[i] < current minimum
       beq  $t4, $0, exit
       sw   $t2, 0($s0)    #store a[i] as current minimum
       addi $t0, $t0, 1    #advance i
       bne  $t0, $t1, loop #loop back
exit:  addi $v0, $v0, 10
       syscall

Θα υπολογίσει το παραπάνω πρόγραμμα σωστά το ελάχιστο τον 100 αριθμών; Εξηγείστε την απάντησή σας. Εάν το πρόγραμμα είναι λάθος, τότε δείξτε πώς πρέπει να διορθωθεί για να εκτελεστεί σωστά.

4.2 Η παρακάτω ακολουθία δεκαεξαδικών αριθμών κωδικοποιεί μία ακολουθία εντολών assembly του MIPS. Ποια είναι αυτή η ακολουθία;


0x200900c8
0x8e110000
0x02319020
0x22100004
0x2129ffff
0x1520fffc


Τρόπος Παράδοσης:
Θα παραδώσετε ηλεκτρονικά ένα αρχείο μορφής pdf, με όνομα ex04.pdf που να περιέχει τις απαντήσεις σας. Για να παραδώσετε την άσκηση συνδεθείτε σε ένα μηχάνημα Linux του τμήματος. Ετοιμάστε ένα directory με τα αρχεία που σας ζητάει η άσκηση. Ας υποθέσουμε ότι το όνομα του directory είναι <somepath>/mydir. Μετακινηθείτε στο directory <somepath> και εκτελέστε την εντολή:

/usr/local/bin/submit exercise04@hy225 mydir

Η διαδικασία submit θα σας ζητήσει να επιβεβαιώσετε την αποστολή των αρχείων.

Περισσότερες πληροφορίες και αναλυτικές οδηγίες για τη διαδικασία submit είναι διαθέσιμες εκτελώντας:

man submit

σε κάποιο από τα μηχανήματα Linux του Τμήματος. Σημειώστε ότι η απομακρυσμένη πρόσβαση στα μηχανήματα του Τμήματος γίνεται από 1.2.2010 με νέο ασφαλή τρόπο μέσω gateways.