ASIMD GEMM Visualization

Antonio Noack wrote a small AArch64 Virtual Machine (VM) in JavaScript which is able to visualize some of the small matrix-matrix kernels discussed in this class. His German description of the VM and some examples are duplicated in this section.

Virtuelle Maschine für Aarch64

Weil die Zugriffe etwas komplizierter wurden, dachte ich mir, dass ich das Debugging ein bisschen einfacher mache.

Also habe ich für die Befehle, die wir für die Aufgabe brauchen, eine kleine virtuelle Maschine programmiert. Als Nebeneffekt zum schöneren Debugging mit Zeigern auf die Zellen in 2D ohne Umrechnung im Kopf, ist es auch eine schöne Visualisierung :)

Das Umschreiben von 19x4x4, um ein paar Additionen zu sparen, hat es ein bisschen vereinfacht.

Ausführung von anderem Assembly-Code als meinen Beispielen

Wenn man eine andere Matrixmultiplikation testen möchte, muss man nur den Code in die Html-Datei in das Element “code” pasten. Das Element “mkn” definiert m, k und n für die Darstellung und die Kontrolle vom Ergebnis und das Element “delay” legt das Startdelay für die Berechnungs-Animation fest.

Beachten muss man allerdings, dass ich bisher nur implementiert habe, was ich auch selber verwendet habe.

  • es gibt das NZCV-Register noch nicht

  • es gibt demzufolge kein cmp und kein b/blt/b..

  • Berechnungen sind nur auf Float32s möglich

  • man kann nur Float32s aus dem Speicher laden und in den Speicher schreiben

  • es gibt noch keinen Stack

  • man kann keinen eigenen Speicher definieren

  • usw.

Addition und Subtraktion von Pointern funktioniert nicht, weil wir in der Vorlesung dafür keine Anwendung haben und auch sonst kaum jemand Pointer addieren oder subtrahieren sollte (außer um vielleicht eine Länge zu bestimmen).

Examples