C ++ χρόνο εκτέλεση κώδικα εξαρτάται από τον κωδικό structre

ψήφοι
0

Ήρθα σε όλη αυτή τη μεγάλη youtube φροντιστήριο και σε μία από τις διαφάνειες που είδα κάτι που δεν κατάλαβα. Γιατί συμβαίνει αυτό? Σχετίζεται με αυτό το μεταγλωττιστή;

Έκδοση # 1 μοιάζει με αυτό:

const int N = 5000;
float a [N*N];

for (int x=0; x<n; ++x)
     for(int y=0; y<N; ++y)
          sum+=a[x+y*N];

και διαρκεί περίπου 239.4ms να εκτελέσει.

Και έκδοση # 2 μοιάζει με αυτό:

const int N = 5000;
float a [N*N];

for (int y=0; y<n; ++y)
     for(int x=0; x<N; ++x)
          sum+=a[x+y*N];

και διαρκεί περίπου 79.5ms να εκτελέσει. Γιατί συμβαίνει αυτό?

Δημοσιεύθηκε 20/10/2018 στις 12:50
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
5

Το δεύτερο παράδειγμα δείχνει καλύτερη τοποθεσία των δεδομένων, δεδομένου ότι έχει πρόσβαση σε στοιχεία στην ίδια γραμμή. Βασικά εκτελεί διαδοχική ανάγνωση μνήμης, ενώ το πρώτο παράδειγμα άλματα πάνω από sizeof(float) * Nbytes σε κάθε επανάληψη την τοποθέτηση επιπλέον άγχος για CPU cache / μνήμης.

Απαντήθηκε 20/10/2018 στις 12:57
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more