|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2006
Messaggi: 6
|
[C] Principio di località
Salve, ho un problema per un esercizio di un esame
![]() int main() { int a[1000] = {…}; int b[1000][1000] = {…}; int c[1000]; int i,j; for (i = 0; i < 1000; i++) { c[i] = 0; for (j = 0; j < 1000; j++) { c[i] = c[i] + a[i] * b[j][j]; } } } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Codice:
int main() { int a[1000] = {…}; int b[1000][1000] = {…}; int c[1000]; int i,j; for (i = 0; i < 1000; i++) { c[i] = 0; for (j = 0; j < 1000; j++) { c[i] = c[i] + a[i] * b[j][j]; } } } ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
b è una matrice da 1000x1000, cioè un milione di elementi, di cui però ne usi solamente 1000 (quelli della diagonale); io a sto punto avrei fatto un array da 1000x1
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non conosco la località delle istruzioni per cui dico la mia solo relativamente ai dati.
Quei cicli sfruttano la località temporale per c e a Se scambiassimo il ciclo interno col ciclo esterno: Codice:
for(int j = 0; j < 1000; j++) { for(int i = 0; i < 1000; i++) { c[i] = 0; c[i] = c[i] + a[i] * b[j][j]; } } Codice:
for(int j = 0; j < 1000; j++) { for(int ii = 0; ii < 1000; ii += B) { for(int i = ii; i < min(ii + B, 1000); i++) { c[i] = 0; c[i] = c[i] + a[i] * b[j][j]; } } } Per le istruzioni non saprei che dire. E tieni conto che anche quello che ho detto va preso coi molloni. ![]()
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:09.