Skip to content

e455a81e-d3ba-41a2-bc6d-7aafb1d9a5cd/HPC_Exercise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Team;
Markus KOLLER - 1710299012 
Leonhardt SCHWARZ - 1710299019

Aufgaben;
Alle Aufgaben wurden mit CPP implementiert. Öffnen/Starten des Projektes in Visual Studio 2017: Datei/Öffnen/CMake... und CMakeList.txt auswählen
	-Exercise 1;
		Aufgabe wurde vollständig für RGB-Bilder gelöst, das Ergebnisbild befindet sich im CMake-directory (zB: C:\Users\MK\CMakeBuilds\50286fdc-45ca-eb34-81f8-d50e7c783897\build\x86-Debug\).
		Ergebnisbilder stimmen
		--Inputs;
			lenna.tga (225x225px)
			Inquisition.tga (2000x3100px)
			lizard.tga (4444x3136px)
			Theta: π/4 (45 Grad)
		--Performance;
			lenna.tga;
				GPU (Avg): 443ms
				CPU only (Avg): 134ms
			Inquisition.tga; 
				GPU (Avg): 13262ms
				CPU only (Avg): 13864ms
			lizard.tga;
				GPU (Avg): 31929ms
				CPU only (Avg): 32586ms
		--Aufgetretene Probleme;
			Herausfinden wie OpenCL überhaupt funktioniert
			Herausfinden wo die builderrors vom Kernel Compiler eingesehen werden können
			Testen mit großen Bildern sehr zeitaufwändig
	-Exercise 2;
		Aufgabe wurde vollständig gelöst, für jeden Algorithmus wurde ein eigener Kernel erstellt. Zur Kontrolle wurde ein sequentielle Algorithmus erstellt.
		--Inputs/Kernels;
			Input: Vektor mit aufsteigenden Integern

			naive_parallel_prefixsum(Naive Parallel Scan)
			naive_parallel_prefixsum2(Double-buffered Naive Parallel Scan)
			blelloch_scan(Work-Efficient Parallel Scan after Blelloch)

			Vektorgrößen: 256 (work group size), 1024 (*4), 4096 (*16)
		--Performance;
			Tested on:
				NVIDIA Geforce 1070 8GB
				Intel Core i7-6700K @ 4.00GHz 
				32GB RAM

				using a workgroup size of 1024.

			sequentiell;
				1024: correct (0ms)
				4096: correct (0ms)
				256*1024: correct (3ms)
				1024*1024*32: correct (484ms)
				100000000: correct(1495ms)
				1024*1024*512: correct (7082ms)
				1024*1024*1024: correct (26244ms)

			naive_parallel_prefixsum(Naive Parallel Scan - inclusive);
				1024: correct (1ms)
				4096: INCORRECT (1ms) => An Workgroupgrenze wird letzter Wert nicht weitergegeben
				Ab einer gewissen Inputlänge werden die genutzten Buffer zu groß(cl_out_of_resources)			

			naive_parallel_prefixsum2(Naive Parallel Scan with double buffer - inclusive);
				1024: correct (0ms) => An Workgroupgrenze wird letzter Wert nicht weitergegeben
				4096: INCORRECT (1ms) => An Workgroupgrenze wird letzter Wert nicht weitergegeben	
				Ab einer gewissen Inputlänge werden die genutzten Buffer zu groß(cl_out_of_resources)

			blelloch_scan(Work-Efficient Parallel Scan after Blelloch - exclusive);
				1024: correct (1ms)
				4096: correct (1ms)
				256*1024: correct (4ms)
				1024*1024*32: correct(164ms)
				100000000: correct(469ms)
				1024*1024*512: correct (2595ms)
				1024*1024*1024: cl_out_of_resources

		--Aufgetretene Probleme;
			Algorithmen verstehen (viel Zeit & Herumprobieren nötig)
			Einige IndexOutOfBounds-Fehler
			Tlw. Fehler die nur in NVIDIA auftraten
			Kurzzeitig wurde das erste Element des nächsten Blocks mit dem letzten Element des vorherigen Blocks gefüllt ("off-by-one error")
			naive_parallel_prefixsum2 hat bei einer inputlänge von 256 nur 0er zurückgeliefert
	-Exercise 3;
		--Inputs;
			Vektor mit aufsteigenden Integern
		--Performance; 
			-
		--Aufgetretene Probleme;
			Wenn die Inputlänge die Work Group Size nicht übersteigt, funktioniert der Algorithmus. Für die Umstellung auf mehrere Work Groups mangelt es leider an Zeit und Muse.