<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<font face="sans-serif">- Στην υλοποίηση του gshare predictor υπάρχει
ένα left shift του history register πριν το XOR με το masked PC. Το
left shift αυτό χρησιμεύει σε περίπτωση που τα bits του history
register είναι λιγότερα από αυτά του table index. Επειδή για να
πιάσουμε τα 32Kbits που είναι το επιθυμητό hardware overhead θα
χρειαστεί να μειώσουμε τα bits του index, το history πλέον θα είναι
μακρύτερο από το index, με αποτέλεσμα το left shift αυτό να έχει πλέον
αρνητικό όρισμα (με history length = table index length = 15 όπως είναι
αρχικά, το όρισμα προκύπτει μηδέν). Αυτό, όμως, σύμφωνα με το ANSI C
πρότυπο (βλ. ελληνικό K&amp;R σ. 282) δίνει UNDEFINED συμπεριφορά*
(όπως θα γκρινιάξει και ο g++). Οπότε είτε θα πρέπει να μειωθεί και το
history length για να γίνει &lt;= του table index length είτε να
αλλάξει ο κώδικας σε αυτό το σημείο και να παίρνει περιπτώσεις αναλόγως
του ποιο είναι μακρύτερο. Τι προτείνετε εσείς?<br>
- Η υλοποίηση του BTB που μας δίνεται χρησιμοποιεί πέραν των 2 unsigned
integers (PCs) ανά cell και έναν ακόμα integer, που χρησιμοποιείται για
να πετύχουμε αντικατάσταση LRU σε κάθε update. Το overhead των LRU
registers αυτών θα το αγνοήσουμε?<br>
<br>
<br>
*Το οποίο σε αυτή την περίπτωση δεν είναι υπερβολή, καθώς ο παρακάτω
κώδικας σε εμένα τυπώνει 0 αντί για το αναμενόμενο 1:<br>
<br>
#include &lt;stdio.h&gt;<br>
int main ()<br>
{<br>
  unsigned int x = 2;<br>
  printf("%u\n",x &lt;&lt; (-1));<br>
  return 0;<br>
}<br>
<br>
</font>
</body>
</html>