Dhrystone-MIPS und Transistorcount

Auch heute wieder ein Computerthema auf das ich beim Schreiben gekommen bin, demnach hat nach meinen Recherchen ein Rechner in der Penryn Architektur (Core 2) Geschwindigkeit von bis zu 18.000 MIPS, also Millionen Instruktionen pro Sekunde. Das sind pro Kern (wahrscheinlich auf ein 4-Kernsystem bezogen) bei 3,2 GHz Takt 1,4 Instruktionen pro Sekunde, und auch in der ct‘ hat man bei einer neuen Architektur namens VISC 5,24 DMIPS/Takt, allerdings wahrscheinlich auf zwei Kerne bezogen.

Nun was sind MIPS – es ist die Abkürzung von Millionen Instruktionen pro Sekunde. Das scheint ein einfaches Kriterium zu sein, ist es aber nicht. Zum einen ist es schwer Instruktionen zu zählen. Natürlich kann man ein Benchmark erstellen, denn Assemblerquelltext ansehen und dann vor allem bei Schleifen die Instruktionen zählen, mit den Durchläufen multiplizieren. Doch jenseits künstlicher kleiner Inhalte, bei konkreten größeren Problemen wird das schwer.

Das zweite ist das man ja damit auch Prozessoren und Rechner vergleichen will, und dann wird es schwer weil die Instruktionen verschiedener CPU unterschiedlich mächtig sind. Das sieht man schon bei der x86 Architektur: Eine Instruktion ist eine einfache Register-Register Bewegung von 32 Bit Daten wie „MOV EAX,EBX“ aber auch die kombinierte Addition und Multiplikation von acht Einfach genauen Fließkommazahlen (vfmaddps %ymm0, %ymm1, %ymm2, %ymm3).

Continue reading „Dhrystone-MIPS und Transistorcount“

Die Pipeline

So, ich komme mal Niels Wunsch nach mehr Grundlagenaufsätzen zum Thema Computeerarchitekturen nach. Heute geht es um die Pipeline. Nein es handelt sich nicht um ein Spiel wo ein Klempner lecke Rohre verbinden muss und auch nicht um den Ukraine-Gas Konflikt. Es handelt sich um eine Maßnahme dem Prozessor Beine zu machen.

Die erste Verbesserung der Geschwindigkeit hat mit der Verarbeitung der Befehle zu tun. Dies ist für jeden Befehl folgender Ablauf:

  • Hole den Befehl (oder bei CISC Architekturen oft auch nur das erste Byte des Befehls) vom Speicher. Dies wird als Fetch bezeichnet.

  • Dekodiere den Befehl (decode)

  • Eventuell, hole weitere Daten, die zum Befehl gehören. (Get Data, Memory Read)

  • Führe den Befehl aus (Execute)

  • Lege Daten im Zielregister ab (Write Back)

Continue reading „Die Pipeline“