Home Site Map Sonstige Aufsätze Weblog und Gequassel counter

Web Log Teil 391: 7.7.2014 - 16.8.2014

11.7.2014: Neues von SpaceX, ULA und der Air Force

Es war kein einfacher Termin für SpaceX - die erste Prelaunch Press Conference. Es gab ja schon einige vorher, doch waren die immer wegen NASA Missionen mehr oder weniger vorgeschrieben, das war nun die erste die es bei einem "normalen" kommerziellen Start gab. Wie bei SpaceX üblich geschah alles über elektronischem Weg. Wer als Editor bei SpaceX registriert war bekam den Link zum Videostream, einige Journalisten dürften auch über Skype Gegenfragen stellen, aber alle wohl nicht. Zumindest habe ich keine Einladung bekommen.

Neben verschiedenen Fragen über die Startverzögerungen, Plänen zur Falcon heavy (wo sich Musk und Shotwell nicht auf ein Datum für den Jungfernflug einlassen wollten) ging es natürlich um den Prozess gegen die Air Force, die Auseinandersetzungen mit ULA und die Pläne für die nächste Zukunft. Musk spulte wieder mal die Litanei herunter. seine Raketen seien die besten ("100% Mission Success") und die billigsten und er verstehe nicht warum man die ISS versorgen können aber keine Aufträge vom Militär ginge. Einer traute sich nachzufragen, warum man so spät protestierte und nicht schon 2012 versucht habe am Block-Buy etwas zu ändern, sodass man sich mit zertifizierten Raketen bewerben könne. Die Frage muss irgendwie an ihm vorbeigegangen sein, denn er sprach nur davon dass man jetzt Raketen habe und starten könne und man so bis 2017 von Starts ausgeschlossen wäre.

Doch dann wurde es interessant. Ein Journalist fragte Musk wie er denn überhaupt noch zusätzliche Starts aufnehmen wolle angesichts der Verzögerungen dieses Jahr und dem übervollen Startmanifest. Die langfriste Lösung wäre ein weiterer rein privater Spaceport, für den man nun auch den Standort gefunden und in Texas Land erworben habe. Die Startabwicklung wäre der Flaschenhals bei SpaceX.  Man könne 40 Cores pro Jahr produzieren, aber brauche einen Monat für den Start und wäre so derzeit auf maximal 24 Starts pro Jahrbeschränkt. Bei Vandenberg und dem CCAF kämen Verzögerungen durch die Range Services hinzu, die ausfallen würden oder nach jedem Start von ULA um konfiguriert werden müssten. Daher wolle man auch alle GTO Missionen vom neuen Startplatz aus durchführen und nur noch ISS/SSO Missionen vom Cape / Vandenberg aus.

Für den Nutzlaststau werde man als kurzfristige Maßnahme die Falcon 9/2 einführen, bis die Falcon Heavy operationell ist. Die Falcon 9/2 erlaubt den Start zweiter Nutzlasten mit einem Flug und bringt so die Nutzlast die SpaceX derzeit fehlt um ihr Manifest abzuarbeiten. Die Falcon 9/2 besteht aus zwei Falcon 9 die in der ersten Stufe durch zwei Spannbänder verbunden sind. Die Startvorbereitungen können so für zwei Träger gleichzeitig durchgeführt werden und pro Monat sind so doppelt so viele Starts möglich. Jede Falcon 9 hat die gleiche Maximalnutzlast wie die bisherige Falcon 9, es sind also keine 6 t schweren Satelliten startbar. Nicht verbunden sind die Oberstufen und Nutzlastverkleidungen die nach Abtrennung der Erststufe getrennt gezündet werden und auch getrennte Bahnen einschlagen können. Im ersten Schritt aber nur Bahnen mit gleicher Inklination, die wird durch die Erststufe vorgegeben. In einem zweiten Schritt will man die Bänder pyrotechnisch kurz nach dem Abheben durchtrennen, dann könnten die beiden Träger auch unterschiedliche Inklinationen anfliegen z.B. ein Start in den GTO und einer zur ISS.

Die Namensnennung verdanken wir dem zweiten Rechner von Elon Musk, einem 486 den er mit einem Overdriveprozessor ausrüstete und so die Geschwindigkeit verdoppelte. Er erinnerte sich an die damalige Bezeichnung von Intel für den Chip - 486DX2 und übertrug sie auf die Falcon 9. Eine Dreierbündelung ist nicht geplant, weil diese dann schon die Nutzlast der Falcon Heavy erreicht.

Einen Dämpfer gab es für alle, die hofften es ginge weiter mit der Wiederverwendung - man habe derzeit so viel zu tun die noch anstehenden Starts durchzuführen, dass man bei den nächsten Starts darauf verzichtet, die Stufe zu bergen. Man wäre voll damit beschäftigt überhaupt die vielen Träger zu produzieren die benötigt würden. Personal für die aufwendige Inspektion der Stufen stände nicht zur Verfügung und auf Nachfrage musste er auch einräumen, dass bisher sich kein Kunde fand der trotz Rabatt (in welcher Höhe wurde nicht genannt) einen Start auf einer "refurnished Stage" buchen wollte.

Der Ersteinsatz der Falcon 9/2 wird im August mit dem kombinierten Start von Asiasat 6+8 sein. der folgende CRS Flug wird dann wieder ein Solostart sein, auch weil man erst dieses neue Prozedere mit der NASA abklären muss.

Man wird gespannt sein ob am 14.7. beim allgemeinen Webcast man etwas mehr über die Falcon 9/2 erfährt.

7.7.2014: Wir basteln uns eine Simulation

So, da der Blog ja auch die Leute zu tätiger Arbeit animieren soll (auch wenn ich befürchte die meisten sind nur passive Leser) heute ein Thema mit dem man selbst leicht spielen kann:

Wir Simulaieren die Gravitation im Allgemeinen, wenn man es speziell macht, dann kann man Swing-Bys simulieren, das Sonnensystem oder die Entstehung des Sonnensystems oder Sternenhaufen bzw. Galaxien, je nach Lust und Geschwindigkeit des Rechners. Das schöne an der Gravitation ist, das sie so einfach ist:

Die Kraft die auf einen Körper wirkt ist einfach definiert nach:

A = G * Masse / Distanz²

Will man die Umlaufbahn der Erde um die Sonne berechnen, so nimmt man die Masse der Sonne, will man die des Mondes um die Erde berechnen, so die der Erde. Kleiner Fallstrick: Die Gravitation ist eine anziehende Kraft, man muss also noch ein Minus als Vorzeichen vor G setzen. Da sich immer zwei Himmelskörper gegenseitig anziehen wird auch der zweite Beschleunigt, man muss nur die Masse austauschen, also bei Erde-Mond-System einmal die Beschleunigung des Mondes durch die Erde und einmal die Beschleunigung der Erde durch den Mond berechnen.

Allgemein gilt für ein System aus N Körpern:

Äußere Schleife I von 1 bis N

Schleifenbeginn

Innere Schleife J von 1 bis N

Schleifenbeginn

Wenn i<>J

    Berechne Gravitationskraft auf Körper[i] mit Masse von Körper[j]

   Summiere Gravitationskraft über alle j

Schleifenende

Berechne neue Position von Körper[i] anhand der Summe der Gravitationskraft

Schleifenende

Es kommt als neues Element nun noch die Positionsberechnung hinzu. Die ist physikalisch so geregelt:

Jeder Körper hat eine Geschwindigkeit v die man in drei Raumvektoren aufteilen kann, genauso wie er eine Position im Raum (Koordinaten der x,y,z-Achse) einnimmt.

Die Distanz ist definiert als die Quadratwurzel aus den Quadraten der Positionsunterschiede zwischen den beiden Himmelskörpern

Distanz = Quadratwurzel aus (Quadrat(Differenz X-koordinaten) + Quadrat(Differenz Y-koordinaten) + Quadrat(Differenz Z-koordinaten))

Nach den Gesetzen der Physik kann man die Beschleunigung A ebenso in Teilbeschleunigungen entlang der Raumachsen teilen indem man folgenden Ansatz macht:

Ax = A * Differenz der X-Koordinaten / Distanz

analog das ganze auch für Ay und Az

Und nach den Gesetzen der Physik erhält man die neue Geschwindigkeit in jeder Raumkoordinate, indem man die Beschleunigung addiert. Wenn man um die Simulation zu beschleunigen nicht 1 Sekunde als Basis nimmt, muss man mit dem Intervall noch multiplizieren:

Vx = Vx + Ax * Intervall

Analog für die anderen zwei Raumachsen

Und die neue Position Px erhält man durch Addition der Geschwindigkeit, auch hier multipliziert mit dem Intervall (für physikalisch fortgebildete: Die Geschwindigkeit ist das Integral der Beschleunigung über die Zeit und der Weg das integral der Geschwindigkeit über die Zeit)

Px = Px + Vx * Intervall

Es gibt nun nur noch eines zu beachten: Wir müssen mit zwei Positionen arbeiten: Einer Position die der Himmelskörper beim Beginn einer jeder Berechnung über alle Körper hat und eine neue die er als Folge der Kräfte einnimmt. Da sich die Distanz durch die Berechnung ändert, muss man überall die gleiche Ausgangsbasis haben, würde man nur eine Position nehmen so würde sie sich als Folge der Berechnungen verändern. Wir müssen also Am Ende jedes Durchgangs nochmals die Positionen umkopieren.

Das war es schon: In Pascal mit einem Rekord pro Himmelskörper (Struct für C/Java Programmierer) sieht dann der Code so aus:

type
  Himmelskoerper=record
    Ax,Ay,Az : Double;
    Vx,Vy,Vz : Double;
    Px,Py,Pz : Double;
    Px2,Py2,Pz2 : Double;
    Radius : Double;
    Masse : Double;
  end;

var
  SSystem : array of Himmelskoerper;

const
  Grav=-6.67384E-11;

procedure Step(const T : Double);

var
  I,J : Nativeint;
  Dx,Dy,Dz : Double;
  D,D2 : Double;
  G : Double;

begin
  for I:=low(SSystem) to high(SSystem) do
  begin
    SSystem[I].Ax:=0;
    SSystem[I].Ay:=0;
    SSystem[I].Az:=0;
    for J:=low(SSystem) to high(SSystem) do
    begin
      if I<>J then
      begin
        Dx:=SSystem[I].Px-SSystem[J].Px;
        Dy:=SSystem[I].Py-SSystem[J].Py;
        Dz:=SSystem[I].Pz-SSystem[J].Pz;
        D2:=Sqr(Dx)+Sqr(Dy)+Sqr(Dz);
        D:=Sqrt(D2);
        G:=(SSystem[J].Masse*Grav)/D2;
        SSystem[I].Ax:=SSystem[I].Ax+(G*Dx/D);
        SSystem[I].Ay:=SSystem[I].Ay+(G*Dy/D);
        SSystem[I].Az:=SSystem[I].Az+(G*Dz/D);
      end;
    end;
    SSystem[I].Vx:=SSystem[I].Vx+(SSystem[I].Ax*T);
    SSystem[I].Vy:=SSystem[I].Vy+(SSystem[I].Ay*T);
    SSystem[I].Vz:=SSystem[I].Vz+(SSystem[I].Az*T);
    SSystem[I].Px2:=SSystem[I].Px+(SSystem[I].Vx*T);
    SSystem[I].Py2:=SSystem[I].Py+(SSystem[I].Vy*T);
    SSystem[I].Pz2:=SSystem[I].Pz+(SSystem[I].Vz*T);
  end;
  for I:=low(SSystem) to high(SSystem) do
  begin
    SSystem[I].Px:=SSystem[I].Px2;
    SSystem[I].Py:=SSystem[I].Py2;
    SSystem[I].Pz:=SSystem[I].Pz2;
  end;
end;

Radius wird hier nicht benutzt kann aber genutzt werden, um eine Kollision zu erkennen. Ein System beliebiger Art kann nun einfach simuliert werden indem man dem dynamischen Array SSystem Himmelskörper mit den entsprechenden physikalischen Parametern zuweist und in einer Schleife immer wieder die neue Position vermisst und sie plottet. Ich habe hier zwei Grafiken mit einer Berechnung pro Tag und einer Laufzeit von 1 Million Tagen, also rund 3000 Jahren wiedergegeben.

Man sieht in beiden Fällen wie die Gravitation, vor allem von Jupiter, die Bahn verzerrt. Der Effekt wird immer größer je näher der Körper Jupiter bekommt. Da er im zweiten Fall sehr bald die jupiterbahn kreuzt ist es nru eine Frage der Zeit bis er auf Jupiter stürzt oder aus dem Sonnensystem herauskatapultiert wird (3000 Jahre sind in geologischen Maßstäben keine lange Zeit). Auch die Position der Erde schwankt wie man an den etwas dickeren Linien sieht, hier sind es aber nur wenige Millionen Kilometer (1 Pixel = 1 Million km). Wenn jemand so etwas plottet sollte er darauf achten vor dem Plotten die Position der Sonne abzuziehen, da diese auch angezogen wird und sich bewegen wird und damit das ganze System.

Hier das ganze als Delphi Projekt, es sollte mit kleinen Anpassungen auch bei Lazarus funktionieren. Der EnhancedEdit fehlt im Standard Delphi, das ist ein Edit Button für Zahlen. der eingetippte Wert steht als Integer/Double in Value/Valueint. Man kann das ganze aber auch leicht mit einem normalen Edit machen und dann eben den String in eine Zahl konvertieren. In diesem Beispiel sind die Himmelskörper hart im Quelltext codiert. Wer will kann es noch um eine Maske für die Eingabe derer Werte ergänzen.

Dann noch eine kleine Nachricht: Die Neuauflage der europäischen Trägerraketen ist nun auch als ebook erschienen. Anders als die alte Auflage nun zu besseren Konditionen, sprich günstigerem Preis. Für 4 Wochen wird sie nochmals günstiger, denn die ersten 4 Wochen gibt es sie für 13,99 Euro anstatt 17,99 Euro. (Die Printausgabe kostet 34,99, man spart also eine Menge und das ganze auch noch in Farbe ...). Meine gedruckte Ausgabe habe ich inzwischen erhalten. Ich hatte zuerst die Befürchtung Michel Vans Covergrafiken sind verpixelt, aber das sind sie nicht. Sie sind nur etwas klein, aber das liegt eben an dem Format das dreimal breiter als hoch ist. Der Druck ist aber okay, nicht zu dunkel wie ich auch schon Fälle hatte.

Inzwischen ist es mir auch gelungen für Createspace ein sauberes PDF zu erzeugen, plötzlich ging es wieder, fragt nicht wieso. Wenn ich noch das Cover von Michel habe, dann könnt ihr die Gesamtausgabe mit 540 Seiten im A-4 Format für einen Hammerpreis erwerben. Leider nur über Amazon.

Inzwischen bin ich schon an dem nächsten Buch und arbeite mich durch die Neuauflage der Internationalen Trägerraketen. Das wird aber nur eine moderate Ergänzung sein, also neue Träger, aktualisierte startzahlen und Texte und soweit möglich auch noch die Triebwerksdaten / Startprofile. Es wird aber sicher nicht das Mammutwerk wie die US-Trägerraketen werden.

8.7.2014: 25.000 Dollar für ein Foto - Abba

So, heute wieder was gemischtes, denn irgendwie fällt mir nichts neues ein, was wirklich bemerkenswert wäre. Ich verhaspele mich auch derzeit etwas. Ich arbeitete an zwei Serien von Aufsätzen - über die x86 Serie (da bin ich gerade beim Pentium) über die Vektorrechner von Cray (bei der Cray 3, aber die Serie von Cray Research soll auch noch folgen), ich schreibe parallel an zwei Büchern (Computergeschichte und Internationale Raketen Band 2, eigentlich sollte ich auch noch mein Buch über Ernährung fertigstellen) und wie man sich denken kann, komme ich zu nichts wobei das auch eine Wetterfrage ist. Im Sommer komme ich eigentlich nie so weit wie im Winter.

Zwei Dinge fielen mir auf. Ich habe mir gerade "Bauernfeind assistiert Anett Louisan" angeschaut. Katrin Bauerfeind schaue ich gerne. Sie fiel mir vor, als die mal die trögen Kulturnachrichten in 3SAT in eine wirklich interessante Sendung verwandelte, obwohl sie nur "Urlaubsvertretung" war. Bei ihr ist die Sendung frech, persönlich und lebhaft, anders als der sonstige Moderationseinheitsbrei. Na ja, Annett Louisan hat sich ein Foto von Terry O'Neil gekauft, ein berühmtes: Faye Dunaway nach der Oskar Verleihung am Pool. Anett Louisan sagte, sie wäre über den Preis erschrocken.

Hmm dachte ich mir - wie teuer muss ein Foto sein, wenn ein Promi, der ja einige goldene Schallplatten hat und gewiss nicht schlecht verdient, über den Preis erschrickt? Kleine Suche im Internet ergab 25.000 Dollar für ein Bild 72 x 72.  Da verstehe ich das Louisan erschrocken ist. Nachvollziehen kann ich es nicht. Ein Foto kann vervielfältigt werden wie ein Druck. Man macht einen Abzug, diesmal eben auf großem Fotopapier. Selbst wenn die Dimensionen in Zoll sind (wahrscheinlich nicht, das passt nämlich dann auf keine Wand mehr) ist der Materialwert überschaubar. Anders als bei einem gemalten Bild steckt kaum Arbeit dahinter, man kann die Dinger wie Drucke in Serie herstellen.

Das ist schon unverschämt. Wenn es nur ein Foto gäbe, also ein Unikat, dann wäre es noch zu verstehen (trotzdem ein tolles Honorar), doch das Bild kann man in verschiedensten Galerien erwerben. Bei jeder Gewinnmaximierung - Terry O' Neil scheint nicht daran interessiert zu sein, dass sich jeder seine Bilder leisten kann, denn war hat den 25.000 Dollar für ein Bild übrig? Das ist noch unverschämter als der New Yorker Maler von dem ich mal gehört habe - der hat eine Malmaschine erfunden die seine Art von Bildern, im wesentlichen verschmierte Farbflächen in Serie produziert und die verkauft er auch für viel Geld, aber immerhin wird da ja noch ein Bild produziert, ein Unikat und nicht eine Heidensumme für einem Abzug.

Dann kam mal vor einigen Wochen eine Reporttage über Abba, passend zu 40 Jahren Gewinn des Grand Prix de la Chansion. Es war zwar eine überarbeitete Version einer alten Dokumentation, aber ein Rätsel kann ich lüften. Warum, die Frage tauchte auf, Abba der Durchbruch beim Grand Prix gelang. Ich hatte schon alle Studio Alben von Abba ab Waterloo und habe mir nun das Vorgängeralbum "Ring Ring" gekauft. Noch nie habe ich einen so eklatanten musikalischen Sprung bei einem Künstler gesehen. Ring-Ring besteht aus Liedern die man als dahinplätschernden Schlager bezeichnen könnte, sowohl von der Musik wie von den Texten her. es fehlt der Schwung der späteren Abba Platten, das Arrangement war einfach. Vor dem Waterloo Album waren die Lieder einfach schlecht.

Da fällt mir noch ein Rätsel ein, das ihr lösen könnt:

Welche spezielle Gemeinsamkeit haben:

Also es ist schon was Spezielles nicht so was wie "Waren alle superstars" oder "haben alle gesungen".

Zuletzt noch ein Musiktipp, einer der Abba Songs die nie als Single erschienen aber hörenswert sind:

Kisses of Fire

http://www.youtube.com/watch?v=-J12rfA2xPM

15.8.2014: Der ideale Prozessor - Teil 1: Architektur

Ich will's doch noch versuchen, auch wenn ich mir schon ausrechnen kann, dass nach wenigen Stunden gleich die Kommentare kommen, der existierende Prozessor xy wäre viel besser. Ich will einen Prozessor skizzieren, der zum einen einfach ist (kein x86 Emulator wie die heutigen Chips von Intel) und zum andern leistungsfähig genug. Darüber hinaus soll er ein bisschen zukunftsweisend sein. Heute geht es um die Allgemeine Architektur.

Der Prozessor ist ein 64 Bit Prozessor mit einem Adressraum von 40 Bit. Bevor jemand meckert: die aktuellen AMD und Intel Rechner adressieren auch nur 40 bzw. 44 Bit und derzeit steigt der Speicherausbau langsam. Würde er sich wie lange Zeit, alle 26 Monate verdoppeln so würden 40 Bit bis 2021 ausreichen. Aber da er sich in den letzten 5 Jahren nur noch verdoppelt hat, reichen 40  eher Bits zur Adressierung noch länger.

Es ist ein RISC Prozessor mit einem sehr einfachen Befehlsformat, denn es gibt genau zwei:

Opcode A-Feld B-Feld C-Feld  
8 Bit 8 Bit 8 Bit 8 Bit  

und

Opcode A-Feld B-Feld Adresse  
8 Bit 8 Bit 8 Bit 40 Bit  

Befehle sind dann genau 32 oder 64 Bit lang. Es werden die Worte immer in 64 Bit Happen geholt und auch der Speicher wortweise adressiert (so gesehen sind es eigentlich 2^43 Bytes und er reicht noch 7 Jahre länger ...) Das erlaubt eine einfache und effiziente Dekodierung und einen guten Einsatz einer Pipeline.

A,B,C Feld haben bei arithmetischen Befehlen die Bedeutung:

Zielregister-A = Register-B (Operation) Register-B

entsprechend

A=B+C

Daraus leiten sich zwanglos bei 8 Bit für die Register 256 Register ab. Dies ist der erste Satz, er nimmt Skalardaten auf, das können sein: Adressen (obere 24 Bit = 0), 64 Bit Ganzzahlen, 64 Bit IEEE 754 Fließkommazahlen

Ein zweiter Satz von 256 Registern sind Vektorregister mit je 256 Werten von je 64 Bit. Sie können 64 Bit Ganzzahlen und Fließkommazahlen aufnehmen, werden aber nicht zur Adressierung verwendet.

Die vielen Register haben zwei Gründe. Das eine ist dass man so unabhängiger vom Speicher ist, zum anderen Hochsprachen so mehr Register haben, in denen sie Werte an Subroutinen übergeben. Denkbar wäre es auch bestimmte Register für das Betriebssystem zu reservieren in denen wichtige Statuswerte stehen.

Daneben gibt es noch die obligatorischen Statusregister nämlich Flagregister (8 Bit), Vektormaskregister (8 Bit), Programm Counter (40 Bit), Programmstackpointer (8Bit), Stackpointer (12 Bit).  Der Stack ist unterteilt in einen Stack für Rücksprungadressen und einen größeren für Daten (PUSH/POP). Damit ist ein Stack Overflow ausgeschlossen. Er befindet sich im Prozessor, wodurch der Zugriff beschleunigt ist.

Ein Cache in dem herkömmlichen Sinn ist nicht vorgesehen. Die Befehle sehen stattdessen vor, Code vorrauschauend in einen Instruktionscache zu laden. Davon gibt es 256 mit maximal 256 Worten Größe (256 KByte). Er nimmt die Daten von möglichst vielen Routinen auf, die so schneller angesprungen werden können. Der Datencache kann durch die vielen Register entfallen.

Trotzdem ist nicht so viel RAM innerhalb des Prozessors:

Das sind zusammen nur 1058,25 Byte, also weniger als heutige Cachegrößen auf Prozessoren.

Man sieht das der Prozessor dafür ausgelegt ist, möglichst viel in den Registern zu halten und wenig vom Speicher zu holen bzw. zu Schreiben. Wenn dann vorzugsweise im Burstbetrieb, d.H. gleich mehrere Register hintereinander um diese Eigenschaft von DDR Speichern auszunutzen, doch dazu mehr morgen, wenn es um den Befehlssatz geht.

Bei Befehlen die keine Rechnungen durchführen kann es sein dass A,B und C Feld teilweise oder gar nicht gebraucht werden. Ich nehme das in Kauf auch wenn es den Code aufbläht. Ebenso verzichte ich bewusst auf Befehle um 8, 16 oder 32 Bit Zahlen zu bearbeiten. Lediglich der Vergleich ist mit einem Teil eines Registers möglich (wichtig bei Stringoperationen)

Der Prozessor kann relativ einfach in der ersten Generation ausgelegt werden. Von den Funktionseinheiten her z.B. mit nur je einer FPU und ALU, dazu nur eine Instruktionspipeline. In diesem Falle wären Vektoroperationen z.B. nicht viel schneller als Skalaroperationen weil nur das Dekodieren wegfällt. Dann kann man ihn bei höherer Integration weitere ALU und FPU hinzunehmen. Gedacht ist dies vor allem für den Vektorbetrieb. Bei 256 ALU/FPU dieser wäre eine Vektoroperation dann 256-mal schneller. doch so weit muss man es nicht treiben, es reicht schon aus einige ALU und FPU mit eigener arithmetischer Pipeline auszustatten um dann mehrere Befehle gleichzeitig auszuführen. Bei skalaren Operationen ist auch ein Parallelismus möglich. Ohne Befehle umzusortieren ist dies schon durch die große Registerzahl möglich. Das reduziert die Abhängigkeiten. Die 256 Instructionscaches erlauben es verschiedene Routinen paralell zu verarbeiten, z.b. aus mehreren Threads wenn man mehr als eine Funktionseinheit hat.

Denkbar ist auch mehr als 256 Register, dann kann man mit Maschinenbefehlen zwischen einem festen (immer verfügbaren) Teil und einem variablen (z.b. pro Thread umschalten), z.B. 128 feste Register, 128 umschaltbare variable Register.

Das einzige was schon in der Grundausführung viele Transistoren kostet sind die Register und Stacks, das sind rund als 4-Zell Flip-Flops realisiert 33.864 Millionen Transistoren - angesichts von rund 2 Milliarden Transistoren in heutigen PC-Prozessoren verschmerzbar.

 

16.8.2014: Der ideale Prozessor Teil 2: der Befehlssatz

Nun kommen wir zum programmtechnischen Teil des neuen Prozessors seine Befehle. Wie schon erläutert gibt es zwei Befehlsformate:

Opcode a-Feld B-Feld C-Feld
8 Bit 8 Bit 8Bit 8 Bit
Opcode A-Feld B-Feld Adresse
8 Bit 8 Bit 8Bit 40 Bit

Alle Befehle die Adressen umfassen haben das zweite Format. Bei Arithmetischen Befehlen entsprechenden die Felder der Nomenklatur:

A-Register = B Register Operation C-Register

Also die Dreiadressbefehlsstruktur. Bei anderen Befehlen kann der C oder B Teil, bei Befehlen die gar keine Parameter haben auch der A-Teil leer sein.

Derzeit sind nicht alle 256 Opcodes belegt, das ist also noch ausbaufähig

Logische Befehle (9)
AND AND RegA,RegB,RegC
OR OR RegA,RegB,RegC
XOR XOR RegA,RegB,RegC
Zweierkomplement NOT Reg
Vergleich zweiter Register CMP RegA,RegB
Vergleich Register mit Inhalt einer Speicherstelle CMP Reg,Adr
Teste Bit nn BIT Reg,nn
Setze Flagregisterbits SETF Reg (Bit auf 1 in Reg, Flagbit gesetzt, sonst unverändert)
Lösche Flagregisterbist CLRF Reg (Bit auf 0 in Reg, Flagbit gelöscht, sonst unverändert)
Arithmetische Befehle, allgemeine Register (19)
INCrement INC RegA
Decrement DEC RegA
ADD ADD RegA,RegB,RegC (Fließkomma)
SUB SUB RegA,RegB,RegC
MUL MUL RegA,RegB,RegC
DIV DIV RegA,RegB,RegC
Integer ADD IADD RegA,RegB,RegC (Ganzzahlen)
Integer SUB ISUB RegA,RegB,RegC
Integer MUL IMUL RegA,RegB,RegC
Integer DIV IDIV RegA,RegB,RegC
Shift links SL Anzahl,RegB
Shift rechts SR Anzahl,RegB
Quadratwurzel SQRT RegA,RegB
Sinus SIN RegA,RegB
Cosinus COS RegA,RegB
ArcTan ATAN RegA,RegB
Logarithmus LN RegA,RegB
Exponentialfunktion EXP RegA.RegB
Potenz POW RegA,RegB,RegC (RegB: Basis, REGC: Exponent)
Arithmetische Befehle, Vektorregister (20)
Vektor ADD VADD RegA,RegB,RegC (Fließkomma)
Vektor SUB VSUB RegA,RegB,RegC
Vektor MUL VMUL RegA,RegB,RegC
Vektor DIV VDIV RegA,RegB,RegC
Vektor Integer ADD VIADD RegA,RegB,RegC (Ganzzahlen)
Vektor Integer SUB VISUB RegA,RegB,RegC
Vektor Integer MUL VIMUL RegA,RegB,RegC
Vektor Integer DIV VIDIV RegA,RegB,RegC
Vektor Skalar ADD VSADD RegA,RegB,SRegC (SRegC: kein Vektor sondern ein Skalarregister)
Vektor Skalar Sub VSSUB RegA,RegB,SRegC (SRegC: kein Vektor sondern ein Skalarregister)
Vektor Skalar MUL VSMUL RegA,RegB,SRegC (SRegC: kein Vektor sondern ein Skalarregister)
Vektor Skalar DIV VSDIV1 RegA,RegB,SRegC (SRegC: kein Vektor sondern ein Skalarregister)
Vektor Skalar DIV VSDIV2 RegA,SRegB,RegC (SRegB: kein Vektor sondern ein Skalarregister)
Quadratwurzel VSQRT RegA,RegB
Sinus VSIN RegA,RegB
Cosinus VCOS RegA,RegB
ArcTan VATAN RegA,RegB
Logarithmus VLN RegA,RegB
Exponentialfunktion VEXP RegA,RegB
Potenz VPOW RegA,RegB,RegC (RegB: Basis, REGC: Exponent)
Verzeigungen (8)
Jump JP Bed (entsprechend dem Flagregister 0 für unbedingten Sprung)
Call Call Bed
Compare and Jump CMPJP Bed,RegB,RegC
Decrement and Jump DECJP Bed
Jump Local im Cache JPLOC Bed,Cacheline,wortoffset
Call Local im Cache CALLLOC Bed,Cacheline,wortoffset
Decrement and Jumplocal DECLJP Bed,Cacheline,Wortoffset
Datenbewegebefehle
Lade Register direkt mit Adresse LD Reg,Adresse
Lade Register mit Wert aus Adresse LD Reg,[Adresse]
Lade Register mit Wert aus Adresse und Offset LD Reg,[Adresse+Reg1]
Lade Register mit anderem Registerwert LD Reg1,Reg2
Lade Register mit Wert aus einer Adresse die in einem Register steht LD Reg1,[Reg2}
Lade Register mit Wert aus einer Adresse die in einem Register steht mit Indexoffset LD reg1,[Reg1+Reg2]
Lade Register mit Wert aus einer Adresse die in einem Register steht mit festem Offset LD Reg1,[Reg2 + nn] (nn=0..255]
Switche obere 128 Register SWITCH RegSatz
Lege Wert aus Register in Adresse ab LD [Adresse],Reg
Lade Wert aus Register in Adresse + Registeroffset ab LD [Adresse+Reg],Reg
Lade wert in Adresse ab, auf die ein Register zeigt LD [Reg],Reg
Lade Wert in Adresse ab die in einem Register + Offsetregister steht LD [Reg1+Reg2],Reg
Lade Wert in Adresse ab, die in einem Register und festem Offset steht LD [Reg+nn],Reg (nn=0..255)
Lage nn Register ab RegisterA auf den Stack PUSH RegA,nn
Hole nn Register ab RegisterA vom Stack POP RegA,nn
Lefe Programmcounter auf den Stack PUSH PC
Hole Programmpointer vom Stack POP PC



Sitemap Kontakt Neues Impressum / Datenschutz Hier werben / Your advertisment here Buchshop Bücher vom Autor Top 99