X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=1_isacmp%2Fppc.tex;h=b12fe38d9616b5c42cc6ceae40346e27334bdbd6;hb=8baad9f9283eab93bc49d1c82f1534c48af0f594;hp=79cd18dad4a791305277d0155bbb2c7c1df5c300;hpb=dea82aa381c0e119cf2b52e9e352c4b295d86352;p=calu.git diff --git a/1_isacmp/ppc.tex b/1_isacmp/ppc.tex index 79cd18d..b12fe38 100644 --- a/1_isacmp/ppc.tex +++ b/1_isacmp/ppc.tex @@ -1 +1,126 @@ \section{PowerPC} +% Does it describe a CISC or RISC architecture? +Die PowerPC Architektur wurde 1991 durch ein Konsortium aus Apple, IBM und +Motorola spezifiziert. PowerPC steht dabei f\"ur \textit{\textbf{P}erformance +\textbf{o}ptimization \textbf{w}ith \textbf{e}nhanced \textbf{R}ISC +\textbf{P}erformance \textbf{C}hip} und ist, wie der Name schon sagt, eine RISC +% Does the ISA describe an accumulator, a register, or a stack machine? +und eine Load-Store Architektur. Je nach Bedarf kann eine konkrete +Implementierung 32- oder 64-Bit sein; hier wollen wir nur auf 32-Bit eingehen. + + +% Where are processors that implement the ISA deployed? In embedded systems +% (micro- controllers, communication, multimedia), in servers, in desktop +% computers? +\subsection{Einsatzgebiete und Ziele} +PowerPC wurde mit dem Ziel entwickelt m\"oglichst skalierbar und flexibel zu +sein, da die tats\"achlichen Anwendungsgebiete recht unterschiedlich sind. +Man findet diese Architektur daher in verschiedenen Bereichen: +\begin{description} +\item[Desktop] Apple verwendete PowerPC, aber mittlerweile von \texttt{x86} +verdr\"angt +\item[Embedded] Routern von Cisco, teilweise auf FPGAs von Xilinx und Altera zu +finden +\item[Multimedia] Prominentes Beispiel: d-box 2 +\item[Spielekonsolen] GameCube/Wii, Xbox 360 oder PS3\footnote{obwohl die Cell +Architektur weit mehr ist} +\item[Server] Vertreten durch beispielsweise POWER7 oder BlueGene +\end{description} +% What are the goals of the architecture? Performance, die area, energy +% efficiency, code size, . . . ? +% How are these goals reflected in the ISA? +Die PowerPC Architektur ist also recht vielf\"altig und es gibt daher nicht +\textit{das} Einsatzgebiet. Im Speziellen gibt es verschiedene \textit{Books} +die unterschiedliche Bereiche abdecken und je nach den Bed\"urfnissen des CPU +Herstellers implementiert werden k\"onnen. +Darunter fallen Themen wie Floating Point, Signal Processing oder +Vector Operationen. Weiters gibt eine sogenannte Basiskategorie die von allen +Implementierung umgesetzt werden muss. + +\subsection{Beschreibung} +Bei den meisten Befehle der ISA handelt es sich um Register-zu-Register +Operationen im Drei-Register Format. Jede Instruktion ist vier Byte gro\ss. +Durch Load bzw. Store Operationen besteht, wie in jeder Load/Store-Architektur, +die M\"oglichkeit am Speicher zu operieren -- die Adressierungsarten sind +hierbei \"au\ss erst eingeschr\"ankt: Zum Beispiel l\"adt die Instruktion +\mbox{\texttt{lwz r3,4(r1)}} den Inhalt an der Speicherstelle \texttt{r1+4} in +das Register \texttt{r3}. Weiters kann man die Basisadresse nach der +Speicheroperationen noch updaten, zum Beispiel: \texttt{stwu r3,4(r1)} speichert +den Inhalt von \texttt{r3} an die Speicherstelle \texttt{r1+4} und setzt weiters +\texttt{r1 := r1 + 4}. + +Typische Register, plus Erkl\"arung, die in einer PowerPC Implementierung +vorhanden sind, findet man in Tabelle \ref{tab:ppcreg}. +\begin{table}[ht!] + \begin{tabular}{lp{3cm}p{9cm}} + \textbf{Register} & \textbf{Beschreibung} & \textbf{Kommentar}\\ + \hline + \texttt{r0-r31} & General Purpose Register & 32 32-Bit Register\\ + \texttt{cr0-cr7} & Condition \mbox{Register} Field & PowerPC besitzt acht + CRs. Bei einer Instruktion die ein Ergebnis in ein CR ablegt, kann man ein + gew\"unschtes CR angeben. Vielen Branchbefehlen kann man ebenfalls ein CR + \"ubergeben.\\ + \texttt{lr} & Link Register & Bei Calls wird die Returnadresse in LR + hinterlegt. Bei bestimmten Branchbefehlen kann man angeben ob zu LR + gesprungen werden soll (das kann auch mit einem CR verkn\"upft werden).\\ + \texttt{ctr} & Counter \mbox{Register} & Mit CTR k\"onnen viele Schleifen + realisiert werden; es gibt spezielle Branchbefehle die am CTR operieren und + z.B. bei ungleich Null einen Sprung durchf\"uhren. Dadurch k\"onnen + Spr\"unge sehr gut vorausgesagt werden.\\ + \end{tabular} +\centering +\caption{Register in der PowerPC Architektur} +\label{tab:ppcreg} +\end{table} +% Are latencies handled by the hardware or are they visible at the ISA level? +% For example, branch delay slots expose the latencies of branches at the ISA +% level. + +Latenzen sind auf ISA Niveau nicht sichtbar, man kann dem Prozessor aber +Voraussagen mitteilen. Beispielsweise ist bei der gegebenen Funktion +\texttt{sum()} die L\"ange auf Null zu pr\"ufen. Da im allgemeinen Fall ein Wert +ungleich Null erwartet wird, kann dem Sprung eine Voraussage mitteilen, wobei +\texttt{-} f\"ur Sprung wird nicht ausgef\"uhrt und \texttt{+} f\"ur das +Gegenteil steht. In manchen F\"allen, wie z.B. Branchoperationen auf das CTR +machen solche Voraussagen nur wenig Sinn, da die Hardware den Sprung ohnehin +sehr fr\"uh berechnen kann. + +% Are conditional branches (compute condition and jump) performed in a single +% step, or are testing and branching unbundled? +Weiters k\"onnen Conditional Branches je nach Inhalt eines CR ausgef\"uhrt +werden. Wie bei vielen anderen ISAs k\"onnen CRs mit Befehlen wie \texttt{cmp} +gesetzt werden, aber auch mit dem sogenannten \textit{dot suffix}, der bei +vielen Befehlen wie z.B. \texttt{add}, optional vorhanden ist. Dieser verursacht +implizit ein Update auf ein CR (meistens CR0). + +\subsection{Perlen und W\"unsche} +% Which features of the ISA do you like, which features would you change? +\begin{itemize} +\item \textbf{Gute Branchpreditcion}: Durch die schon genannten Feature wie LR und +Counter Register sind Spr\"unge fr\"uh in der Pipeline erkennbar. +\item \textbf{\texttt{rlwinm}}: \textit{Rotate Left Word Immediate then AND with +Mask}. Ein sehr m\"achter und in verschiedensten Variante oft verwendeter +Befehl. Um die Funktionsweise zu demonstrieren: Der Aufruft \mbox{\texttt{rlwinm +rA,rS,SH,MB,ME}}, wobei \mbox{$0 \le \text{SH,MB,ME} \le 31$} gilt, nimmt den +Inhalt aus \texttt{rS} und rotiert diesen um \texttt{SH} nach links. Danach wird +auf das Ergebnis mit einer Maske verundet. Die angesprochene Maske ist 32-Bit +gro{\ss} und von der Stelle MB bis ME mit 1er und ansonsten 0er belegt. Sollte +$\text{MB} > \text{ME}$ sein, so werden die Stellen ME bis MB mit 0er belegt +und die anderen Stellen mit 1er. Das Ergebnis wird in \texttt{rD} gespeichert. +\item +\textbf{\texttt{cntlzw}}: \textit{Count Leading Zeros Word} +\item \dots{} +\end{itemize} +% TODO wenn mir noch was einfaellt +W\"unsche: Keine. + +\subsection{Listing} +\lstinputlisting[caption=PowerPC Code]{ppc.s} +In der Schleife werden also drei Befehle ausgef\"uhrt, wobei \texttt{lwzu} zwei +Taktzyklen ben\"otigt und \texttt{add} einen Zylus braucht. \texttt{bdnz} +braucht im allgemeinen Fall \textit{keinen} Zyklus, da die Hardware den Sprung +schon sehr fr\"uh in der Pipeline berechnen kann +\footnote{Zyklendauer aus dem Datenblatt des PowerPC 750CXe entnommen}. +Die Codegr\"o\ss{}e der +Schleife betr\"agt 12 Byte, da jede Instruktion 4 Byte gross ist. +