• Keine Ergebnisse gefunden

Übungen zur Vorlesung “Architektur und Programmierung von Grafik- und Koprozessoren” Übungsblatt 5

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungen zur Vorlesung “Architektur und Programmierung von Grafik- und Koprozessoren” Übungsblatt 5"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungen zur Vorlesung “Architektur und Programmierung von Grafik- und Koprozessoren”

Übungsblatt 5

Sommersemester 2019

5 Pointer Jumping und Ray Tracing Aufgabe 5.1

DiePräfixsumme der Folge(an) =a1, a2, ..., an ist definiert als p1=a1

p2=a1+a2

p3=a1+a2+a3

pn=a1+...+an

a.)Formulieren Sie einen seriellen O(n)Algorithmus, der als Eingabe ein Array mit nElemen- ten erhält und für diese die Präfixsumme berechnet. Das Ergebnis darf im selben Array wie die Eingabe gespeichert werden.

b.)Mit dem parallelen Algorithmus PointerJumpingaus der Vorlesung lassen sich ebenfalls Prä- fixsummen bestimmen. Formulieren Sie den Algorithmus entsprechend um. Wie in der Vorlesung erhält der Algorithmus als Eingabe ein Array, das für jeden Knoten in einem Wald wurzelgerich- teter Bäume dessen Vorgänger speichert. Ihr Algorithmus erhält außerdem ein Array, das jedem wurzelgerichteten Baum eine Folge (an)zuordnet. Der Algorithmus berechnet die Präfixsummen dieser Folgen. Lautet die Eingabe etwa

0 1 2 3 4 5 6 7 8 9

S 0 0 1 2 3 5 5 6 7 8

(an) 1 1 1 1 1 2 2 2 2 2 dann lautet die Ausgabe:

0 1 2 3 4 5 6 7 8 9

S 0 0 0 0 0 5 5 5 5 5

(pn) 1 1 2 3 4 2 2 4 6 8 Ist diese Methode zur Bestimmung der Präfixsumme kosteneffizient?

1

(2)

Aufgabe 5.2

Im Gerüstprogramm zu dieser Aufgabe finden Sie einen kleinen 2D Ray Tracer, den Sie erweitern sollen.

Um das Gerüstprogramm zu übersetzen, benötigen Sie das Cross Platform Build Tool CMake (https://cmake.org/). Mit CMake lassen sich Projekte organisieren, die aus mehrerencompi- lation units bestehen, welche anschließend gelinkt werden. Mit CMake empfehlen sich sogenannte out-of-source builds: legen Sie ein Verzeichnis, z. B. als Unterverzeichnis des Gerüstprogramms, an. Dieses können Sie z. B. build nennen. Rufen Sie nun von dort aus das CMake Komman- dozeilenprogramm auf und übergeben Sie den Ordner, in dem sich die DateiCMakeLists.txt befindet, als Kommandozeilenparameter, also mitbashetwa:

mkdir build cd build cmake ..

Platformspezifische Parameter lassen sich über denCMake Cache setzen. Diesen können Sie etwa mit dem Tool ccmakebeeinflussen, oder durch direktes Editieren der Datei CMakeCache.txt im Verzeichnisbuild. Diese Parameter können dem Programmcmakeauch direkt auf der Kom- mandozeile mit übergeben werden, z. B.:

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-std=c++11"

a.)

Erweitern Sie den 2D Ray Tracer aus dem Gerüstprogramm. Implementieren Sie zunächst das Lichtbrechungsverfahren aus der Vorlesung in der Funktion refract(). Das Gerüstprogramm definiert bereits eine einfache 2D Geometrie mit unterschiedlichen Brechungseigenschaften. An den 2D Plots, die das Programm in eine .pnmDatei schreibt, können Sie nachvollziehen, ob Sie die Methode richtig implementiert haben.

b.)

Behandeln Sie außerdem den Fall der totalen internen Reflektion. Diesen Fall sollte Ihre Implemen- tierung vonrefract()erkennen und in diesem Fall einen 0-Vektor zurückgeben. Der Ray Tracer geht im Weiteren davon aus, dass totale interne Reflektion aufgetreten ist, wennrefract()einen 0-Vektor zurückgegeben hat und ruft in dem Fall die Funktionreflect()auf, um einen neuen Richtungsvektor zu erzeugen. Die Funktion reflect() ist von Ihnen noch zu implementieren.

Was ist im Gerüstprogramm zu ändern, sodass bei der gegebenen Geometrie und den vorgebenen Primärstrahlen totale interne Reflektion auftreten kann?

Bemerkungen: Bei der Implementierung der beiden Funktionen sollten Sie mit einfachen Vek- toroperationen auskommen, das Aufrufen tatsächlicher trigonometrischer Funktionen sollte nicht nötig sein. Bedenken Sie außerdem, dass bei den in der Vorlesung behandelten Modellen alle Vektoren, also die Normale, der Vektor zum Licht sowie der Richtungsvektor zum Betrachter Einheitsvektoren sind, die vom Schnittpunkt mit der Oberflächewegzeigen.

Das Übungsblatt wird am 16.05.2019 besprochen.

2

Referenzen

ÄHNLICHE DOKUMENTE

“Sampling” bestimmt. Dies ist eine in den Prozessor eingebaute Funktionalit¨ at, die, falls aktiviert, die Instruktionspipeline zu definierten Zeitpunkten anh¨ alt und

C++ spezifiziert keine Garbage Collection (der Standard schließt sie nicht explizit aus, aber es gibt keine Implementierungen, die mir bekannt sind). Daher m¨ ussen alle Ressourcen,

I Vulkan / Modernes OpenGL: minimaler Vertex Shader verpflichtend (außer Compute). Ohne minimalen Fragment Shader kein Bild (manchmal Ergebnis

GPU Readback (d. Rendering in einen Offscreen Buffer und dann Transfer der Farb- und/oder Tiefeninformation in Host Speicher der Applikation) ist mit diesem asynchronen Modell

ADD $R1 C Addiere den konstanten Wert C auf den Inhalt von Register $R1 4 TZ LD $R1 [S] Lade den Inhalt an Speicherstelle [S] in Register $R1 10 TZ ST [S] $R1 Speichere den Inhalt

(2) Die Bin¨ arrepr¨ asentation der sich ergebenden nat¨ urlichen Zahl k setzt sich immer abwechselnd aus den Bin¨ arziffern der Zahlpaare (i, j) zusammen. Tragen Sie das Ergebnis

Trifft man die vereinfachende Annahme, dass geometrische, aus Dreiecken zusammengesetzte Objekte geschlossen sind und immer nur von außen betrachtet werden, kann man vor dem

Ihr paralleles GPU Programm verwendet zur Berechnung ein zweidimensionales Gitter der Größe N × N , sodass jedem Matrixelement aus der Ergebnismatrix C ein einzelner Thread