ÊáëçìÝñá óáò. Óôï ðáñÜñôçìá Á ôùí åêöùíÞóåùí ôçò 4çò óåéñÜò áñ÷éêïðïéåßôå ôïõò ðßíáêåò ùò åîÞò:
init_matrix(A, N); init_matrix(B, N); init_matrix(C, N);
Ôá óôïé÷åßá ôïõ ðßíáêá C üìùò äåí èá ðñÝðåé íá áñ÷éêïðïéçèïýí óôï 0; Ãéáôß Ýôóé üëá ôá óôïé÷åßá ðëçí ôïõ C[0][0] åßíáé ìç ìçäåíéêÜ êáé ëüãù ôïõ "C[i][j] +=" ðïõ Ýðåôáé, ôï áðïôÝëåóìá ðïõ ðñïêýðôåé åßíáé ïõóéáóôéêÜ C=A*A+A áíôß ãéá C=A*A. Áí êáé áõôü êáíïíéêÜ äåí áíáìÝíåôáé íá åðçñåÜóåé ôá áðïôåëÝóìáôÜ ìáò, óùóôÜ;
Åðß ôç åõêáéñßá óôéò äéáöÜíåéåò ôçò "Lec6-caches-10.pdf", óåë. 33, õðÜñ÷åé ôï åîÞò: for (j = jj; j < min(jj+B-1,N); j = j+1) Ôï óùóôü äåí èá Ýðñåðå íá åßíáé: for (j = jj; j < min(jj+B,N); j = j+1) ??
×áñáêôçñéóôéêü ðáñÜäåéãìá üôáí B=1, jj<N ôüôå äåí ðñïêýðôåé êáíÝíá iteration ãéáôß ãßíåôáé: for (j = jj; j < jj; j = j+1)
Åõ÷áñéóôþ
---------------------------------------- e-mail se latinikous xarakthres ----------------------------------------
Kalhmera sas. Sto pararthma A twn ekfwnhsewn ths 4hs seiras arxikopoieite tous pinakes ws ekshs:
init_matrix(A, N); init_matrix(B, N); init_matrix(C, N);
Ta stoixeia tou pinaka C omws den 8a prepei na arxikopoih8oun sto 0? Giati etsi ola ta stoixeia plhn tou C[0][0] einai mh mhdenika kai logw tou "C[i][j] +=" pou epetai, to apotelesma pou prokuptei einai ousiastika C=A*A+A anti gia C=A*A. An kai auto kanonika den anamenetai na ephreasei ta apotelesmata mas, swsta?
Epi th eukairia stis diafaneies ths "Lec6-caches-10.pdf", sel. 33, uparxei to ekshs: for (j = jj? j < min(jj+B-1,N)? j = j+1) To swsto den 8a eprepe na einai: for (j = jj? j < min(jj+B,N)? j = j+1) ?
Xarakthristiko paradeigma otan B=1, jj<N tote den prokuptei kanena iteration giati ginetai: for (j = jj; j < jj; j = j+1)
Euxaristw
Καλημέρα,
On 06/18/2010 04:47 AM, Georgios Ioannidis wrote:
Καλημέρα σας. Στο παράρτημα Α των εκφωνήσεων της 4ης σειράς αρχικοποιείτε τους πίνακες ως εξής:
init_matrix(A, N); init_matrix(B, N); init_matrix(C, N);
Τα στοιχεία του πίνακα C όμως δεν θα πρέπει να αρχικοποιηθούν στο 0; Γιατί έτσι όλα τα στοιχεία πλην του C[0][0] είναι μη μηδενικά και λόγω του "C[i][j] +=" που έπεται, το αποτέλεσμα που προκύπτει είναι ουσιαστικά C=A*A+A αντί για C=A*A. Αν και αυτό κανονικά δεν αναμένεται να επηρεάσει τα αποτελέσματά μας, σωστά;
Σε παραπέμπω σε αντίστοιχη ερώτηση που είχε γίνει για το ίδιο θέμα πέρυσι: http://lists.cslab.ece.ntua.gr/pipermail/advcomparch/2009-June/000290.html Η ουσία είναι ότι η αρχικοποίηση με αυτό τον τρόπο αποτρέπει τυχόν "απρόοπτες" βελτιστοποιήσεις από τον compiler, που ενδεχομένως να επηρέαζαν τον κώδικα που σε ενδιαφέρει να αξιολογήσεις. Προφανώς, αν σε ενδιαφέρει το αποτέλεσμα του πολλαπλασιασμού ο C θα πρέπει να είναι αρχικοποιημένος σε 0.
Επί τη ευκαιρία στις διαφάνειες της "Lec6-caches-10.pdf", σελ. 33, υπάρχει το εξής: for (j = jj; j< min(jj+B-1,N); j = j+1) Το σωστό δεν θα έπρεπε να είναι: for (j = jj; j< min(jj+B,N); j = j+1) ??
Σωστά. Θα το διορθώσουμε.
Ν.
advcomparch@lists.cslab.ece.ntua.gr