Software

Physikalische Modellierung und OSS

Einführung

Mit diesem technischen Vortrag möchte ich einen Einblick in die Entwicklung eines physikalischen Modellierungsrahmens mit Open Source Software geben. Das ist etwas, was ich schon sehr lange mache und sehr lohnend finde.

Warum - und - wann

Zunächst einmal müssen wir uns fragen, warum Sie das tun sollten? Sind Zemax, Comsol oder VirtualLab nicht genug? Im Zusammenhang mit diesem Vortrag bin ich der Meinung, dass sie hervorragend geeignet sind, um einige fokussierte und sehr gezielte Probleme zu lösen, während man mit Werkzeugen wie Matlab oder seiner OSS-Alternative Octave die "Big Picture"-Fragen angehen kann. Mit Zemax kann man zum Beispiel ein Ziel entwerfen. Dazu muss man eine Reihe von Parametern hinzufügen. Einige Faktoren, wie Feldgröße oder Vergrößerung, waren offensichtlich. Andere, wie die numerische Apertur oder die Verzeichnung, waren vielleicht schwieriger zu bestimmen. Und dann gibt es noch diejenigen, die auf Vermutungen beruhen und schließlich in die Leistungsfunktion einfließen. Um die numerische Apertur tatsächlich "abzuleiten", kann Ihnen die physikalische Modellierung dabei helfen, die Fragen des großen Ganzen zu verstehen, die Sie nutzen können, um die Kundenanforderungen mit den Parametern für die Objektivkonstruktion zu verbinden.

Octave vs. Matlab

Aber lassen Sie uns jetzt reden Oktave. Was sind seine Vor- und Nachteile, insbesondere im Vergleich zu Matlab. Einer ist die Geschwindigkeit. Matlab ist das ausgereiftere Produkt, in das mehr Ressourcen für die Optimierung gesteckt wurden. Es verfügt über einen ausgereiften Just-in-Time-Compiler, während der früher für Octave verfügbare Compiler aufgrund von Schwierigkeiten bei der Entwicklung und Wartung entfernt wurde. Hier lohnt es sich jedoch, die drei Regeln der Optimierung zu beachten,

  • Tun Sie es nicht
  • Tun Sie es noch nicht
  • Erstes Profil

Aus diesem Grund denke ich nicht, dass wir uns über die Geschwindigkeitsunterschiede zwischen diesen Tools Sorgen machen sollten. Ja, bei gezielten Benchmarks wird Matlab die Nase vorn haben. Die meiste Zeit, wenn es um die Lösung von Problemen im wirklichen Leben geht, wird der Unterschied nicht so dramatisch sein, und wo er auftritt, ist die Schnittstelle zu kompilierten Binärdateien bei Octave sehr einfach, während sie bei Matlab deutlich weniger einfach ist. Ein sehr spezifischer Unterschied ist, dass Sie die Matlab-Sitzung als Debugging-Sitzung starten müssen. Mit Octave können Sie einen Debugger einfach "anhängen" und "abhängen", wann immer Sie ihn brauchen.

Bildung ist wichtig

Etwas, worüber wir nicht oft genug sprechen, ist die Verbreitung des Know-hows innerhalb einer Organisation. Die meisten Unternehmen akzeptieren Lizenzkosten von 50.000 oder 100.000 Euro für einen oder mehrere Entwickler, die ein bestimmtes Tool benötigen, aber oft würden viel mehr Menschen davon profitieren, wenn sie wüssten, wie die Dinge funktionieren. Der weiche Wert von OSS besteht darin, dass sie überall und jederzeit eingesetzt werden kann, und das ist von großem Wert. Programmierer brauchen beispielsweise realistischen Input, um ihren Code zu testen, bevor sie ihn von einem Produkt erhalten, das noch gar nicht existiert. Ein Meeting, bei dem wir demonstrieren können, wie die Dinge tatsächlich funktionieren, trägt zu besseren Entscheidungen bei und richtet eine Organisation effektiver auf ein gemeinsames Ziel aus, als wenn wir versuchen, die Teilnehmer durch logische Argumente und schlüssige Begründungen zu überzeugen. Denken Sie daran: "Überzeuge einen Menschen gegen seinen Willen, und er ist immer noch der gleichen Meinung".

Kommen wir zur Technik

Ok, genug der sanften Worte. Lassen Sie uns zur Sache kommen. Ich werde nicht darüber sprechen, wie Sie Ihren Code in Octave (oder Matlab) parallelisieren, das wird überall im Internet behandelt. Ich werde jedoch auf meine Erfahrungen mit der Schnittstelle zu C-Code eingehen und Code schreiben, der leicht zu lesen ist. Außerdem gibt es noch den Aspekt des Datentyps. In Octave ist der Standardtyp ein Float mit doppelter Genauigkeit. Das ist zwar oft ein guter Anfang, aber für die physikalische Modellierung wird er oft nicht benötigt, und wenn Sie ihn brauchen, würde ich das als Indikator dafür ansehen, dass die numerischen Methoden überarbeitet werden sollten. In jedem Fall sollte die Kopplung einer dynamisch typisierten Sprache wie Octave mit einer statisch typisierten Sprache wie C zumindest in Erwägung gezogen werden, bevor man sich an produktionsreifen Code wagt.

Tauchen wir also noch tiefer ein. Sollten Sie den mex-Compiler oder ein Tool wie den GNU-Compiler, gcc, verwenden? Hier würde ich vorschlagen, Ihren Code mit dem GNU-Compiler oder Clang zu erstellen. Der Mex-Compiler unterstützt einige sehr nützliche Attribute wie "__attribute__((cleanup))" nicht, mit denen man zuweisen und vergessen kann. Wir alle vergessen, also warum sollten wir das nicht anerkennen und so codieren, dass man damit davonkommt. Außerdem gibt es kein "make" oder ein anderes Build-Tool für Octave. Der geringe Aufwand für die Einrichtung einer Build-Umgebung (wie make/Makefile) wird sich auszahlen.

Code-Beispiele

Beginnen wir mit der Build-Umgebung. Das Make-Build-Tool ist oft gut genug für die Art von Code, die Sie für die Schnittstelle zu Octave erstellen,

Dieser Teil des Makefiles stammt direkt aus einem der Beispiele, die Sie auf unserer Gitlab-Server (Schreiben Sie eine E-Mail mit Ihrem bevorzugten Benutzernamen an Kontakt um Zugang zu erhalten).

Alle mex-Funktionen haben denselben Prototyp. Fügen Sie das in eine Vorlage wie die unten stehende ein, und Sie werden im Handumdrehen kompiliert sein. Bei reinem C-Code macht die Verwendung von enum, wie immer, den Code einfacher zu lesen. In[in_sing_values] ist viel einfacher zu lesen als In[0], und enum erspart Ihnen sogar das Eintippen der Zahlen.

Aber machen wir es doch ein bisschen interessanter. Wie gehen wir mit verschiedenen Typen um. Die mex-Schnittstelle verfügt über eine Funktion namens mxGetClassID(), die den Typ der Variablen zurückgibt. Es liegt jedoch an uns, den Code für jeden Typ zu implementieren. Bei kleinen Codestücken würde ich persönlich nicht zögern, den Typ mit Hilfe des Editors durch Kopieren und Einfügen zu ersetzen.

Für komplexeren Code sollten Sie auf jeden Fall den C-Präprozessor und einige Boilerplate verwenden. Unten ist ein Beispiel,

und dann innerhalb Ihres Boilderplate-Codes verwenden,

wenn Sie die vom Typ abstrahierte Funktion aufrufen müssen.

Definieren Sie schließlich alle Varianten, die Sie benötigen, mit,

Und innerhalb der Funktion mex-interface,

Es steht außer Frage, dass Copy-and-Paste-Substitute schneller ist als das Hinzufügen der Boilerplate. Es steht auch außer Frage, dass der Zeitpunkt kommen wird, an dem Sie eine Kopie des Codes debuggen und dabei vergessen werden, den Code für die anderen Typen zu ändern, und das Debuggen wird viel länger dauern als das Hinzufügen der Boilerplate.

Schlussfolgerung

Open-Source-Software hat einige große Vorteile, wenn es um die Bereitstellung geht, und viele Tools sind beeindruckend ausgereift. Octave beispielsweise macht die Entwicklung von Projekten im Bereich der physikalischen Optik mit seinen benutzerfreundlichen Plot- und Dateninspektionstools zu einem Kinderspiel. Außerdem arbeitet es nahtlos mit leistungsstarken Sprachen wie C oder C++ zusammen, so dass Sie Leistungsengpässe angehen oder in fortgeschrittene Funktionen wie parallele Programmierung eintauchen können, wenn Sie wirklich große Datenmengen verarbeiten müssen.

Mit OSS erhalten Sie Flexibilität, Effizienz und Zugang zu hochmodernen Tools - all das kann Ihre Produktivität erheblich steigern und Ihnen helfen, bessere Projekte zu entwickeln.

Wenn Sie der Meinung sind, dass dies für Ihre Organisation von Nutzen sein könnte, bitten wir Sie Kontakt und um herauszufinden, wie Senslogic Sie unterstützen kann.

Jarek

Neueste Beiträge

EUV und der Stand der Lithografie

Optische High-End-Lithografie, worum geht es EUV-Lithografie wirkt wie real gewordene Science-Fiction: Spiegel mit atomarer Glätte, Licht...

vor 2 Wochen

Physikalische Optik auf dem Nvidia-GPU

Intro Die meiste Zeit meiner beruflichen Laufbahn in der Optik habe ich mich mit der Simulation der Abbildung von räumlichen Lichtmodulatoren, vor allem SLMs, beschäftigt...

vor 3 Wochen

Sofortige Sicht

Warum WaveMe Suchen Sie nach einer Lösung, die eine Vision-Kamera beinhaltet? Sie wollen eine leistungsstarke Anwendung, mit der Sie die...

vor 2 Monaten

Das Dilemma des Systemintegrators

In diesem Tech-Talk geht es um Technologieentwicklung im Allgemeinen, aber vielleicht noch spezieller um die schrittweise Entwicklung von Technologien. Er ist natürlich beeinflusst von...

vor 2 Monaten

Kann KI Ihren Code übernehmen?

Ich schätze, ich bin auf einer Mission, einer Mission, um die Ehrfurcht zu mäßigen, die die Menschen in Bezug auf... zu haben scheinen.

vor 2 Monaten

Open-Source & Gitlab Zugang

Offene Tools für das WaveMe Ökosystem Ab heute verlagern wir die WaveMe Templates und den gesamten Open-Source-Code in ein selbstgehostetes...

vor 5 Monaten