Εμφάνιση 1-3 από 3

Θέμα: Loop Unrolling C++

  1. #1
    Εγγραφή
    23-06-2020
    Ηλικία
    31
    Μηνύματα
    3
    Downloads
    0
    Uploads
    0
    ISP
    Vodafone
    Μήπως γνωρίζει κάποιος πως βρίσκουμε τον βέλτιστο αριθμό ξετυλίγματος βρόχου για να πετύχουμε καλύτερο χρόνο εκτέλεσης;
    Αφορά το

    for (int i = 0; i < N; ++i)
    Y[i] = k*X[i] + Y[i];

    με το Ν να έχει τιμή 10000 πριν την λούπα.
    Για να κάνω το ξετύλιγμα θα αντικαταστήσω το λουπ με
    i<i+1
    Y[i] = k*X[i] + Y[i];
    επαναλαμβάνοντάς το, τόσες φορές όσες ο βέλτιστος αριθμός ξετυλίγματος?
    Ευχαριστώ

  2. #2
    Εγγραφή
    19-06-2008
    Περιοχή
    127.0.0.1
    Μηνύματα
    1.147
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    14000/700
    ISP
    Conn-x OTE
    Router
    cisco887va+sec-k9
    Path Level
    Fastpath

    Δεν ξέρω για βέλτιστο αριθμό (θα έχει σχέση με χρόνους εκτέλεσης branch command σε machine code)
    αλλά ένα ελαφρώς πιο γρήγορο loop ίσως είναι το παρακάτω:
    Κώδικας:
    #include <stdio.h>
    #include <assert.h>
    
    int k = 3, N = 7, Y[] = {1, 2,3,4,5,6,7,8,9,0,11}, X[] = {2,1,2,1,2,1,2,1,2,1,2,1,2,1};
    
    int main(){
    	assert(N>0);
    	//---------------------------------------
    	int *yy = Y, *yend = Y + N, *xx = X;
    	while( (*yy+=k*(*xx++),++yy) < yend)
    		;
    	//---------------------------------------
    	for(int i=0;i<N;i++)printf("%d->%d\n",i,Y[i]);
    	return 0;
    }
    το παραπάνω comma separated expression βοηθά τον compiler optimizer, διότι δεν θα χρειαστεί να ξαναφορτώσει το yy (υπάρχει σε κάποιον index register εφόσον μόλις έγινε απόδοση τιμής σε αυτό). Επίσης δεν υπάρχουν dereference πίνακα μέσω ακεραίου.

  3. #3
    Εγγραφή
    23-06-2020
    Ηλικία
    31
    Μηνύματα
    3
    Downloads
    0
    Uploads
    0
    ISP
    Vodafone
    Σε ευχαριστώ πολύ!

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας