
Ich bin Doktorand für experimentelle Physik. Bei der Diskussion mit einem Kollegen hatte ich vor kurzem die Idee, dass wir möglichweise ein Python-Paket schreiben und veröffentlichen sollten.
In der ersten Version soll man damit die Röntgenreflektion und Transmission von aufgedampften Filmen berechnen können. Dabei ist die Performance das absolut entscheidende Kriterium, damit die Leute ihre Daten auch fitten können. Daher ist der Plan, die aufwändigen Berechnungen nach C auszulagern. "Aufwändig" bedeutet in diesem Kontext dass man einige 10.000 Datenpunke hat und für jeden Datenpunkt (Energie, Einfallswinkel) ein paar hundert 2x2-Matrizen multipliziert werden müssen. Die C-Algorithmen haben wir weitestgehend.
So, jetzt kommen die schwierigen Fragen bei denen ihr mir vielleicht weiterhelfen könnt.
1. Ist es klüger, für jeden Datenpunkt das C-Programm aufzurufen, oder sollte man dem C-Programm alle Datenpunkte geben und es nur einmal aufrufen? Wäre die zweite Variante eine deutliche Zeitersparnis? :K
2. So oder so muss das C-Programm jede Menge Zahlen übernehmen. energieabhängige Brechungsindizees, Schichtdicken, Rauigkeiten, usw.
Die Rückgabe ist je nach Antwort auf Frage 1 ein großer Datensatz oder nur wenige Werte.
Wie genau mache ichs am besten. Über eine .dll? Rufe ich eine .exe auf? Oder was ganz Anderes? :K
3. Gibt es irgendwas zu beachten bei der Parallelisierung? Der Python-Benutzer sollte mehrere Instanzen der Röntgenoptik-Funktion parallel laufen lassen können ohne dass die sich verheddern. Daten in Files auslagern wäre wohl tabu, aber sonst?
4. Irgendwelche sonstigen guten Tips?