Woche #70

(Zeitraum: 18.2.2013 – 22.2.2013)

Eigentlich ist Dienstag und Mittwoch dieser Woche ein MVD-Subdetektor-Meeting in Turin. Weil ich aber viel zu tun hab, setze ich das aus. Kollege André nutzt das Meeting um etwas länger nach Turin zu verschwinden. Für ein Jahr. Farewell, das Institut wird ganz schön langweilig! (Und die Autofahrten erst…))

Ich arbeite diese Woche am Code für den Jahresbericht. Ganz das gleiche, wie beim Highlights-Report, möchte ich nicht zeigen. Eine Kleinigkeit steht auf meiner To-Do-Liste, die ich noch umsetzen möchte.

Von double zu floats.

Doubles haben zwar doppelte Fließkommapräzision im Vergleich zu floats, aber das ist, so denke ich, unnötig für unseren vorliegenden Fall. Das Online Tracking soll schnell, nicht präzise sein. Und die durch doubles gewonnene Präzision spielt sich jenseits dessen ab, was Detektorauflösung ist. Das habe ich nicht im Detail überprüft, das ist nur mein Gefühl. Doubles brauchen aber doppelten Speicherbedarf (ca., vermute ich?) und haben nicht so viele Cores auf der GPU zum Rechnen zur Verfügung wie floats. Also: floats!

Bevor ich aber jetzt per Copy & Paste alle doubles in floats umwandle und wir später feststellen »Mist, wir brauchen doch doubles«, möchte ich das dynamischer halten.

  • Templates. Mag ich eigentlich sehr. Aus houghtransform(bla, blubb) wäre dann ein houghtransform<float>(bla, blubb) geworden. Allerdings ergibt meine Recherche, dass Templates in klassentypischen .h-und-.cpp/.cu-Strukturen eher kompliziert sind und mitunter als extern oder sowas deklariert werden müssen.
  • Compiler-Anweisungen. Hab ich noch nie mit gearbeitet, ist aber in dem Fall einfach. Prinzip: Man ersetze alle doubles durch abstrakte myTypes. Im Kopf des Quelltexts macht man ein typedef von myTypes zu floats. Je nachdem, ob ein Compiler-Flag gesetzt ist, ruft man dieses default-typedef auf oder nimmt ein anderes, das myTypes zu doubles umstrickt. That’s it.

Ich habe mich für letztere Alternative entschieden. Mein Code wird dadurch ca. doppelt so schnell (etwas weniger) – das ist keine großartige Verbesserung, aber immerhin etwas. Siehe code.

Meinen Jahresbericht schicke ich ab, korrigiere ich und schicke ich wieder ab. Alles gut.

Mit meinem Kollegen diskutiere ich, wie ich seinen Tracking-Algorithmus auf der GPU umsetzen kann. Das ist allerdings viel mehr beta und vor allen Dingen viel komplizierter als ich gedacht hatte. Bis zur DPG in zwei Wochen lasse ich das lieber sein.