Woche #46

(Zeitraum: 3.9.2012 – 7.9.2012)

Ich arbeite weiter an meiner Histogrammanzeige mit Cusp. Nachdem die Anzeige prinzipiell klappt, habe ich noch ein weiteres Problem: Eine übliche Matrix in Cusp hat Spalten und Reihen, deren Indizes positive, ganzzahlige Werte größer Null hat. Ist ja auch klar, das kennen wir noch aus der Schule von Matrizen. Die Histogramme, die ich gerne hätte, haben aber durchaus rationale Zahlen, die mitunter auch negativ sein können.
Also muss ich einen Umrechnungslayer zwischenschalten.
Und das macht die Sache, die wegen Spalten, Reihen und Multplizitäten sowieso schon konfus genug ist, auch noch einen Layer weiter konfus.

ABER!

Geschafft! Mittwoch habe ich den Kern des Tools fertig und kann mich Donnerstag und Freitag um spezielle Aspekte können. 
Meinen Fortschritt checke ich wie immer auf Github ein: https://github.com/AndiH/CUDA/

Jetzt steht das Timing an: Ich möchte wissen, ob all das überhaupt schneller ist, als die linearen Operationen von vorher.
Dabei ist es übrigens interessant, einzelne Schritte des Programms zu timen. Warum?
Dazu eine kurze Einführung.
Das Programm arbeitet mit drei Vektoren. 1. Vektor: Gefüllte X-Indizes. 2. Vektor: Gefüllte Y-Indizes. 3. Vektor: Multiplizität, also Wert des Bins (ein Eintrag? zwei?). Der letzte Vektor ist der interessanteste, er beinhaltet die Histogramminformationen. Aus den drei Vektoren wird dann eine Matrix erstellt, die in eine ROOT-Matrix (linear) übersetzt wird, die ein TH2D-Histogramm befüllt, dessen Grenzen dann entsprechend der Originalbereiche geändert werden.
Das füllen des 3. Vektors ist zeitlich am interessantesten. Die Anzeige danach ist nur hübsch, zum angucken und kontrollieren, ob alles stimmt. Wenn ich später mal einen Peakfinder, also einen Finder der Überlappungspunkte erstelle, dann braucht der nicht unbedingt über das Histogramm laufen – für den reicht der 3. Vektor.
Also ist auch dessen Befüllungszeit interessant.

Nebenbei finde ich übrigens heraus, dass Thrust keine Operatoren mag, die im .cu-File einer eingebundenen Klasse liegen. Der Operator muss im .h-File von ihr sein.