Prüfung Rechnerarchitektur WS 2020/21
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Prüfung Rechnerarchitektur WS 2020/21 Im Wintersemester 2020/2021 wird die Prüfungsleistung für das Modul Rechnerarchitektur nicht durch eine Klausur erbracht, sondern in Form einer Programmieraufgabe mit schriftlicher Ausarbeitung (Ausarbeitung im Umfang von bis zu 4 A4-Seiten). Bitte lesen Sie sich diese Anleitung zur Prüfungsleistung gründlich durch. Bei Fragen schreiben Sie bitte eine Email an: moeller@techfak.uni-... Aufgabenstellung Realisieren Sie ein Programm zur Sortierung eines Datensatzes mithilfe des bitweisen MSB- Radix-Sortierverfahrens in Assembler für Intel 64-Bit-Prozessoren (x86-64). Es liegt ein Datensatz vor, dessen Elemente jeweils aus einer Gleitkommazahl im IEEE-754- Format "single precision" (4 Byte) und einer vorzeichenlosen ganzen Zahl (4 Byte) bestehen (in dieser Reihenfolge). Dabei stellt die Gleitkommazahl den "Key" (Schlüssel) dar, nach dem sortiert wird, und die vorzeichenlose ganze Zahl den "Payload" (Ladung), der bspw. den Index eines Datenbankeintrags mit umfangreicheren Informationen enthalten kann. Sortiert wird nach dem Key, aber Key und Payload eines Elements müssen im Sortierverfahren jeweils gemeinsam transportiert werden. Key und Payload schließen in einem Element unmittelbar aneinander an; die Elemente schließen im Datensatz unmittelbar aneinander an. Beim bitweisen MSB-Radix-Sort (auch "binäres MSD-Radix-Sort", MSD = "most significant digit") wird das Bitmuster der Keys durchmustert, beginnend beim höchstwertigen ("most significant") Bit (MSB). Zunächst werden die Elemente nach dem MSB sortiert. Innerhalb der beiden entstehenden Gruppen wird jeweils nach dem Bit mit der zweithöchsten Wertigkeit sortiert usw. Beachten Sie, dass diese Vorgehensweise für vorzeichenlose ganze Zahlen ausgelegt ist. Sie müssen das Verfahren für Gleitkommazahlen anpassen (s.u.). Implementieren Sie Ihr Verfahren rekursiv, d.h. das Unterprogramm zur Sortierung eines Bereichs von Elementen ruft sich direkt oder indirekt selbst auf, um die zwei nach dem aktuell betrachteten Bit sortierten Teilbereiche nach dem nächsten Bit zu sortieren. Ihr Programm soll in der Lage sein, den Datensatz sowohl aufwärts als auch abwärts anhand des Keys zu sortieren. Für die Sortierung ist der Wert der Gleitkommazahl entscheidend, nicht deren Bitfolge. Es sind also Vorzeichen, Exponent und Mantisse zu berücksichtigen (bitte finden Sie dafür eine effiziente Lösung). Sie können dabei Spezialfälle (z.B. unendlich, NaN, Null oder nicht normalisierte Zahlen) ignorieren. Die Sortierung soll "in-place" erfolgen, d.h. die Ausgabedaten liegen während der Ausführung bereits im Speicherbereich der Eingabedaten. Es wird also kein zweiter Datenbereich verwendet. Dies lässt sich für eine Bit-Position folgendermaßen realisieren: Sollen alle Elemente mit Nullbits zu Beginn des Speicherbereichs ("links") stehen und alle Elemente mit Einsbits am Ende ("rechts"), dann sucht man von links nach einem Element mit Einsbit und von rechts nach einem Element mit Nullbit und tauscht diese Elemente. Dies wird wiederholt, bis kein weiterer Tausch mehr möglich ist. Der implementierte Sortieralgorithmus muss nicht notwendig "stable" sein. Es ist also erlaubt, dass Elemente mit gleichen Keys nach dem Sortieren eine andere Reihenfolge haben als zuvor. Anmeldung und Abgabe
Es ist keine Anmeldung erforderlich. Die Abgabe muss bis zum Sonntag, 14. März 2021, 23:59 erfolgen. Eine verspätete Abgabe gilt als Nichtteilnahme. Die Deadline ist strikt. Die Abgabe erfolgt über die "E-Prüfung" im Lernraum der Rechnerarchitektur-Vorlesung (Zugang via eKVV). Bitte kennzeichnen Sie Programmdatei und Ausarbeitung mit Ihrem Account-Namen an der Technischen Fakultät. Für Erika Mustermann wäre dies z.B. emustermann . Die Programmdatei muss in diesem Beispiel den Dateinamen radix_emustermann.asm , die Ausarbeitung den Dateinamen ausarbeitung_emustermann.pdf haben. Sie können Ihre Abgabe bis zur Deadline beliebig oft verändern. Bitte beachten Sie die Hinweise in der bereitgestellten Anleitung Anleitung_E-Pruefung_RA.PDF . Hinweis: Bitte testen Sie den Abgabevorgang deutlich vor der Deadline. Wiederholung Eine einmalige Wiederholung (2. Versuch) im Wintersemester 2020/2021 ist nur bei Teilnahme am 1. Versuch möglich. Bei Nichtbestehen im 1. Versuch ist eine Wiederholung nur möglich, wenn ein Programm und eine Ausarbeitung eingereicht wurden und bei beiden ein Bemühen zur Lösung deutlich erkennbar ist, aber die Leistung als "nicht bestanden" (Note 5,0) bewertet wurde. Bei Bestehen im 1. Versuch kann der 2. Versuch genutzt werden, um evtl. eine Notenverbesserung zu erreichen. Bitte beachten Sie, dass in beiden Fällen die Leistung des 1. Versuchs auch bei einer Wiederholung der Prüfung eingetragen wird. Die Wiederholung erfolgt durch Überarbeitung von Programm und Ausarbeitung mit demselben Thema. Für die Überarbeitung wird eine Frist von 2 Wochen nach der Mitteilung der Note eingeräumt. In nachfolgenden Semestern gilt die dann festgelegte Prüfungsform (in der Regel eine Klausur). Programm Fügen Sie Ihren Programmcode in das vorgegebene Rahmenprogramm ein (s.u.). Dieses liest die Kommandozeilen-Parameter in Register ein, liest die zu sortierende Datei in einen Speicherbereich ein (der dafür alloziert wird) und schreibt die Daten desselben Speicherbereichs in die Ausgabedatei. Gefordert ist ein Assemblerprogramm für Intel x86-64-Prozessoren im Intel-Syntax (nicht IA-32, nicht AT&T-Syntax). Ihr Programm muss mit der vorgegebenen Version des Assemblers nasm assemblierbar sein (s.u.). Das Programm soll nur auf einer einzigen CPU (bzw. Core) laufen. Vermeiden Sie also eine Parallelisierung auf mehrere CPUs / Cores. Kommentieren Sie Ihr Programm ausgiebig in deutscher Sprache (s.u.). Geben Sie auch Kommentare für jedes Unterprogramm an, die dessen Eingabe- und Ausgabe-Parameter, genutzte "globale" Parameter und die von der Funktion modifizierten ("zerstörten") Register angeben. Parameter können dabei Speicherbereiche oder Register sein. Ausarbeitung Format Auf einer vorangestellten Titelseite geben Sie bitte "Ausarbeitung Rechnerarchitektur Wintersemester 2020/21" mit dem Titel "Implementierung eines rekursiven bitweisen MSB-Radix- Sort" sowie Ihren Namen, Vornamen, Studiengang und Ihre Matrikelnummer an. Fügen Sie darunter bitte folgenden Text ein:
"Hiermit erkläre ich, dass ich das Programm und die vorliegende Ausarbeitung selbstständig verfasst habe. Ich habe keine anderen Quellen als die angegebenen benutzt und habe die Stellen in Programm und in der Ausarbeitung, die anderen Quellen entnommen wurden, in jedem Fall unter Angabe der Quelle als Entlehnung kenntlich gemacht. Diese Erklärung gilt auch ohne meine Unterschrift, sobald ich das Programm und die Ausarbeitung über die E- Prüfung der Vorlesung Rechnerarchitektur im Lernraum des eKVV an der Universität Bielefeld und unter Angabe meiner Matrikelnummer in der Ausarbeitung eingereicht habe." Die eigentliche Ausarbeitung umfasst bis zu 4 A4-Seiten mit einer Textbreite von 16 cm und einer Texthöhe von 23 cm. Der Text ist im Zeilenabstand "ein-einhalb-zeilig" zu formatieren. Als Schriftart wählen Sie dabei bitte Times-Roman in der Größe 12 pt. Die Liste Ihrer Quellen (Literatur, Webseiten etc.) geben Sie bitte nachfolgend zum eigentlichen Text an, beginnend auf einer neuen Seite. Hinweise zum Zitieren finden Sie bspw. auf dieser Webseite: https://www.uni- bielefeld.de/erziehungswissenschaft/richtigeinsteigen/files/pdf/Zitierhinweise_Stand-Dez- 2017.pdf. Die Titelseite und die Seite(n) mit der Liste der Quellen werden nicht bei der Seitenzählung berücksichtigt. Das eingereichte PDF-Dokument muss ein Format aufweisen, aus dem der Text extrahiert werden kann (für den Plagiatstest). Vermeiden Sie deshalb bitte Rastergrafiken für Text und verschlüsselte Formate. Die Abgabe wird nicht bewertet, bis eine für die Plagiatsprüfung geeignete Fassung zur Verfügung gestellt wird. Hinweis: Sie können die Extrahierbarkeit von Text z.B. mit dem Linux-Tool pdftotext testen. Sie können das bereitgestellte LaTeX-Vorlage ausarbeitung_emustermann.tex verwenden. Inhalt Erklären Sie Ihre Implementation des rekursiven, bitweisen MSB-Radix-Sort. Gehen Sie dabei auch auf folgende Aspekte Ihrer Implementation ein: Lösung für den Schutz von lokalen Variablen in der Rekursion Lösung für das Sortieren in beide Richtungen Lösung für die in-place Sortierung Lösung für die Behandlung von Vorzeichen, Exponent und Mantisse (effiziente Lösung gesucht!) Lösung für die Prüfung einzelner Bits im Datenwort Implementation des eigentlichen Sortiervorgangs für ein Bit (ggf. auch Behandlung von Spezialfällen, z.B. alle Bits gleich) vermutete Schwachstellen und Verbesserungsmöglichkeiten. Vergleichen Sie die Laufzeit Ihres Verfahrens mit dem Vergleichsprogramm stlsort (s.u.). Geben Sie dabei die Laufzeiten ("user") für verschiedene Größen des Datensatzes an. Wählen Sie Datensatzgrößen so, dass die Laufzeit jeweils im Bereich einiger Sekunden liegt. Stellen Sie die Ergebnisse in einer Tabelle oder Grafik dar und diskutieren Sie sowohl die Abhängigkeit der Laufzeiten von der Anzahl der Elemente im Datensatz als auch die Relation der Laufzeiten zwischen beiden Programmen. Hinweise zur Einzelleistung und Betrugsversuchen
Die Programmieraufgabe mit Ausarbeitung ist ein Ersatz für eine Klausur. In einer Klausur ist sichergestellt, dass die Leistung als Einzelleistung erbracht wird. Derselbe Maßstab gilt auch für die Programmieraufgabe mit Ausarbeitung. Eine Zusammenarbeit mit anderen Personen in jeglicher Form gilt deshalb als Betrugsversuch. Für Programmdatei und Ausarbeitung wird ein elektronischer Plagiatstest durchgeführt. Dadurch aufgedeckte Betrugsversuche werden geahndet. Bitte denken Sie daran, dass eventuell auch andere TeilnehmerInnen dieselben Quellen verwenden. Auch wenn wir diese Quellen nicht kennen sollten, würde dadurch ein Betrugsversuch aufgedeckt. Sowohl im Quellcode Ihres Programms als auch in Ihrer Ausarbeitung müssen alle verwendeten Quellen gekennzeichnet sein. Im Quellcode sind alle Programmteile, die aus anderen Quellen (bspw. Hilfeseiten im Internet) stammen, zu kennzeichnen. Bei zu großem Anteil an Code aus anderen Quellen gilt das Programm nicht mehr als selbst erbrachte Leistung. In der Ausarbeitung müssen wörtliche Zitate (auch Übersetzungen) gekennzeichnet sein. Bei zu großem Anteil (gekennzeichneter) wörtlicher Übernahmen gilt die Ausarbeitung nicht mehr als selbst erbrachte Leistung. Es gilt als Betrugsversuch, wenn das Assemblerprogramm durch Compilieren aus einer Hochsprache erzeugt wurde. Bewertungskriterien Die Leistung ist benotet. Abweichungen von dieser Vorgabe sind mit dem Prüfungsamt zu klären. Die maximale erreichbare Punktzahl ist 100. Die Bestehensgrenze ist 50% (50 Punkte). Es wird zunächst geprüft, ob Ihr Programm die Aufgabenstellung erfüllt, d.h. tatsächlich bitweises MSB- Radix-Sort mit rekursiver Bearbeitung und Sortierung "in-place" in Assembler für Intel-x86-64- Prozessoren implementiert wurde. Ist dies nicht der Fall, gilt die Aufgabe als nicht erfüllt und die Prüfung damit als nicht bestanden. Ansonsten erfolgt die Bewertung wie folgt: Funktionstüchtigkeit des Programms (30 Punkte): Ihre Abgabe wird von uns mit dem "Netwide Assembler" nasm in der Version auf den GZI-Maschinen (2.13.02) zu einer ausführbaren Datei assembliert. Ein nicht assemblierbares Programm wird nicht weiter untersucht und gilt als "nicht funktionstüchtig" (0 Punkte). Hinweis: Bitte testen Sie deshalb vor Abgabe auf einer GZI-Maschine, ob Ihr Programm mit diesem Assembler assemblierbar ist! Ein assemblierbares Programm wird von uns mehreren Tests mit zufällig erzeugten Eingabedateien unterzogen, jeweils ohne mehrfach auftretende Keys, mit unterschiedlicher Zahl von Elementen und mit Sortierung in Aufwärts- und Abwärtsreihenfolge. Der Anteil der Testläufe, bei denen Ihr Programm eine korrekte Sortierung erzeugt, bestimmt den Grad der Funktionstüchtigkeit und damit die zugewiesene Punktzahl (bspw. funktionstüchtig in der Hälfte der Fälle: 15 Punkte). Hinweis: Testen Sie deshalb Ihr Programm ausführlich mit beiden Sortierreihenfolgen und mit unterschiedlichen Testdaten (erzeugt mit dem Programm gendata , s.u.) und vergleichen Sie die Ausgabedateien mit dem Ergebnis des Vergleichsprogramms stlsort (für Eingabedateien ohne mehrfach auftretende Keys). Für den Vergleich von Dateien können Sie das Unix-Kommando cmp verwenden. Zusätzlich steht Ihnen das Programm chksort zur Verfügung (s.u.), mit dem die Sortierung überprüft werden kann. Effizienz der gefundenen Lösung (15 Punkte): Bewertet wird die Effizienz der gefundenen Lösung hinsichtlich folgender Aspekte: Sortierung in beiden Richtungen; Behandlung von Vorzeichen, Exponent und Mantisse bei den Gleitkommazahlen; Sortiervorgang für ein ausgewähltes Bit. Laufzeit Ihres Programms (15 Punkte): Die von uns erarbeitete Musterlösung hat für 100 Mio. Elemente eine ähnliche Laufzeit wie das Vergleichsprogramm stlsort (siehe unten). Die Laufzeit Ihres Programms im Vergleich zu stlsort fließt in die Bewertung ein. Sie können die Laufzeit Ihres Programms ermitteln, indem Sie beim Start time auf der Kommandozeile voranstellen.
Relevant ist dabei die ausgegebene "User"-Zeit. Bewertungsskala: bis zur doppelten Laufzeit im Vergleich zu stlsort 15 Punkte, bis fünffache Laufzeit 10 Punkte, bis zehnfache Laufzeit 5 Punkte, sonst 0 Punkte. Die relativen Laufzeiten (Radix-Sort zu stlsort ) werden bei der Bewertung über mehrere Messungen gemittelt. Ein nicht assemblierbares oder nicht zumindest bei einem Laufzeittest funktionstüchtiges Programm erhält hierbei 0 Punkte. Kommentierung des Programms in deutscher Sprache (10 Punkte): Bewertet wird, wie ausführlich Ihr Programm kommentiert wurde. Dabei muss jede Programmzeile mit einem verständlichen Kommentar versehen sein (Ausnahmen sind nur offensichtliche Befehlsabfolgen wie bspw. push -/ pop -Sequenzen am Anfang und Ende von Unterprogrammen). Bitte vermeiden Sie dabei eine Beschreibung der Assembleranweisung (z.B. inc rdx ; erhöhe Register rdx um 1 ), sondern erläutern Sie mit dem Kommentar Ihren Algorithmus (z.B. inc rdx ; nächstes Byte im Eingabepuffer ). Hinweis: Die Kommentierung in deutscher Sprache wird vorgeschrieben, um einfacher Bezüge zwischen den Kommentaren und der Beschreibung Ihres Verfahrens in der deutschsprachigen Ausarbeitung herstellen zu können. In begründeten Ausnahmefällen kann beides in Englisch erfolgen; dies ist aber vor Beginn der Bearbeitung mit dem Prüfenden zu klären. Ausarbeitung in deutscher Sprache (30 Punkte): Die Ausarbeitung ist in deutscher Sprache vorzulegen (zu Ausnahmen s.o.). Bewertet wird die inhaltliche Korrektheit (u.a. auch Übereinstimmung mit der Implementation), die Vollständigkeit, die Klarheit der Darstellung und die Präzision der Formulierungen. Hinweis: Bitte verwenden Sie die Rechtschreibprüfung Ihres Editors und lesen Sie Ihre Ausarbeitung vor der Abgabe nochmals gründlich durch. Bereitgestellte Materialien Es werden folgende Textdokumente, Programme und Skripte (für das Betriebssystem Linux) auf der Webseite der Veranstaltung https://www.ti.uni- bielefeld.de/html/teaching/WS2021/techinf1/index.html bereitgestellt: Anleitung_E-Pruefung_RA.PDF : Anleitung für die E-Prüfung. ausarbeitung_emustermann.tex (bitte Account-Namen im Dateinamen sowie Angaben zu Ihrer Person in der Datei vor der Abgabe anpassen): Latex-Vorlage für die Ausarbeitung. Die daraus erzeugte PDF-Datei liegt ebenfalls bei. radix_emustermann.asm (bitte Account-Namen im Dateinamen sowie Angaben zu Ihrer Person in der Datei vor der Abgabe anpassen): Rahmen für Ihr Assembler-Programm. Bitte fügen Sie Ihre Unterprogramme und deren Aufruf in den beiden gekennzeichneten Bereichen ein und lassen Sie das Programm ansonsten unverändert. In der bereitgestellten Form liest das Programm eine Eingabedatei ein (inklusive Allozierung von Speicher) und schreibt dieselben Daten in die Ausgabedatei zurück. Das ausführbare Programm liest folgende Kommandozeilen-Parameter ein: : Sortierung in aufsteigender Reihenfolge ( 1 ) oder absteigender Reihenfolge ( 0 ) : Name der Eingabedatei : Name der Ausgabedatei mkasm64 : Skript zum Assemblieren. Erzeugt eine ausführbare Datei mit demselben Rumpfnamen wie die Quelldatei. Aufruf: mkasm64 radix_emustermann . Benötigt den Assembler nasm . gendata.c : C-Programm zum Erzeugen zufälliger Testdateien. Das Programm erwartet folgende Kommandozeilen-Parameter: : Die Anzahl von Elementen im Datensatz. Erzeugen Sie kleine Dateien (z.B. 10 Elemente) für Debug-Zwecke und große Dateien (z.B. 100000000 ), um lange Laufzeiten für Zeitmessungen zu gewährleisten.
: Die Datei darf denselben Key mehrfach enthalten (Angabe 0 ) oder nicht (Angabe 1 ). Die Erzeugung von Dateien ohne mehrfache Keys dauert lang und ist nur für kleinere Größen sinnvoll. Dateien ohne mehrfache Keys werden benötigt, wenn Sie die Ergebnisdateien Ihres Programms mit denen von stlsort (siehe unten) vergleichen (z.B. mit dem Programm cmp ), da die dort verwendete Funktion std::sort() mehrfach auftretende Keys ggf. anders sortiert. : ein Identifikator (Zeichenkette) zur Unterscheidung mehrerer Dateien. : Pfadname eines Verzeichnisses, in dem die erzeugte Datei abgelegt werden soll. Der Dateiname wird automatisch festgelegt (z.B. num10_nodup1_id1.rnd ) und kennzeichnet alle Kommandozeilen-Parameter. mk_gendata : Shell-Skript ( tcsh ) zum Compilieren von gendata.c zur ausführbaren Datei gendata . Aufruf ohne Kommandozeilen-Parameter. Benötigt den C-Compiler gcc . prtdata.c : C-Programm zum Anzeigen von Ein- oder Ausgabedateien. Das Programm zeigt jeweils den Key als Gleitkommazahl, als Bitmuster (hexadezimal) sowie als Vorzeichen, Charakteristik (hexadezimal) und normalisierte Mantisse (hexadezimal) sowie den Payload (dezimal). Aufruf mit Angabe des Dateinamens, z.B.: prtdata num10_nodup_id1.rnd . mk_prtdata : Shell-Skript ( tcsh ) zum Compilieren von prtdata.c zur ausführbaren Datei prtdata . Aufruf ohne Kommandozeilen-Parameter. Benötigt den C-Compiler gcc . chksort.C : C++-Programm zum Überprüfen, ob eine Datei ausschließlich sortierte Keys enthält (identische aufeinanderfolgende Keys sind zulässig) und ob alle Test-Payloads vorhanden sind. Aufruf mit Angabe der Sortierrichtung ("up" = 1, "down" = 0) und des Dateinamens, z.B. chksort 1 mydata.srt . mk_chksort : Shell-Skript ( tcsh ) zum Compileren von chksort.C zur ausführbaren Datei chksort . Aufruf ohne Kommandozeilen-Parameter. Benötigt den C++-Compiler g++ . stlsort.C : C++-Programm zum Sortieren einer Datei mithilfe der Funktion std::sort() aus der C++ Standard Template Library (STL). Die Kommandozeilen-Parameter sind dieselben wie beim Programm radix_emustermann . mk_stlsort : Shell-Skript ( tcsh ) zum Compilieren von stlsort.C zur ausführbaren Datei stlsort . Aufruf ohne Kommandozeilen-Parameter. Benötigt den C++-Compiler g++ . Wichtiger Hinweis zur Arbeit im GZI Die benutzten Dateien mit den unsortierten oder sortierten Daten können sehr groß sein (z.B. 100 Mio. Elemente mit je 8 Bytes: fast 1 GByte), um Laufzeiten im Sekundenbereich zu realisieren. Bitte erzeugen Sie diese Dateien nur temporär und löschen Sie diese nach Benutzung wieder aus dem Dateisystem. Alternativ können Sie die Dateien auch im Verzeichnis /tmp ablegen. Dort werden sie beim täglichen Neustart der GZI-Maschinen gelöscht.
Sie können auch lesen