Software

Modelado físico y OSS

Introducción

Con esta charla técnica, me gustaría ofrecer algunas perspectivas sobre la construcción de un marco de modelado físico con software de código abierto. Es algo que he hecho durante mucho tiempo y que me ha resultado muy gratificante.

Por qué - y - cuándo

En primer lugar, tenemos que volver a la pregunta de ¿por qué lo harías? ¿No basta con Zemax, Comsol o VirtualLab? En el contexto de esta charla, creo que son excelentes para resolver algunos problemas concretos y muy específicos, mientras que con herramientas como Matlab o su alternativa OSS, Octave, puedes abordar las cuestiones "generales". Por ejemplo, con Zemax puedes diseñar un objetivo. Para ello tienes que añadir una serie de parámetros. Algunos factores, como el tamaño de campo o el aumento, eran obvios. Otros, como la apertura numérica o la distorsión, pueden ser más difíciles de precisar. Y luego están los que se basan en conjeturas, que acaban entrando en la función de mérito. Para "deducir" realmente la apertura numérica, el modelado físico puede ayudarle a plantearse las cuestiones generales que puede utilizar para conectar los requisitos del cliente con los parámetros utilizados para el diseño del objetivo.

Octave frente a Matlab

Pero hablemos ahora Octava. ¿Cuáles son sus ventajas y sus inconvenientes, en concreto en comparación con Matlab? Una es la velocidad. Matlab es el producto más maduro, con más recursos dedicados a la optimización. Cuenta con un compilador Just-in-Time maduro, mientras que el que solía estar disponible para Octave fue eliminado debido a las dificultades para madurarlo y mantenerlo. Aquí, sin embargo, puede valer la pena recordar las tres reglas de la optimización,

  • No lo hagas
  • No lo hagas todavía
  • Perfil primero

Por esta razón, no creo que deban preocuparnos las diferencias de velocidad entre estas herramientas. Sí, para los puntos de referencia específicos, Matlab saldrá ganando. La mayor parte del tiempo, en la resolución de problemas de la vida real, la diferencia no será tan dramática, y cuando sucede, la interfaz para compilar binarios es en realidad muy simple para Octave, mientras que es significativamente menor con Matlab. Una diferencia muy específica es que tiene que iniciar la sesión de Matlab como una sesión de depuración. Con Octave, puede simplemente "conectar" y "desconectar" un depurador cuando lo necesite.

La educación es importante

Algo de lo que no hablamos lo suficiente es de difundir los conocimientos técnicos por toda la organización. La mayoría de las empresas aceptarán un coste de licencia de 50.000 o 100.000 euros para uno o varios desarrolladores que necesiten una herramienta específica, pero a menudo muchas más personas se beneficiarían de saber cómo funcionan las cosas. El valor blando del OSS es que puede desplegarse en cualquier lugar y en cualquier momento, y eso tiene su valor. Por ejemplo, los programadores pueden necesitar información realista para probar su código antes de obtenerla de un producto que ni siquiera existe todavía. Una reunión en la que podamos demostrar cómo funcionan realmente las cosas contribuirá a que se tomen mejores decisiones y alineará a una organización hacia el objetivo común de forma más eficaz que intentar convencer a los asistentes mediante argumentos lógicos y razonamientos coherentes. Recuerde: "Convence a un hombre contra su voluntad, y seguirá siendo de la misma opinión".

Pongámonos técnicos

Vale, basta de palabrería. Vayamos al grano. No voy a hablar de cómo paralelizar tu código en Octave (o Matlab), esto está cubierto por todo Internet. Lo que voy a cubrir es la experiencia que tengo con la interfaz de código C y escribir código que sea fácil de leer. Además, también está el aspecto del tipo de datos. En Octave, el tipo por defecto es un flotador de doble precisión. Aunque esto suele ser un buen comienzo, a menudo no es necesario para el modelado físico, y si te encuentras con que lo necesitas, yo lo consideraría un indicador de que los métodos numéricos deben ser revisados. En cualquier caso, la interconexión de un lenguaje de tipado dinámico como Octave con un lenguaje de tipado estático como C necesita al menos alguna consideración antes de intentar algún código a nivel de producción.

Así que vamos a profundizar aún más. ¿Deberías usar el compilador mex o una herramienta como el compilador GNU, gcc? Aquí, yo sugeriría construir tu código con el compilador GNU o Clang. El compilador mex no soporta algunos atributos muy útiles como "__attribute__((cleanup))" que te permite asignar y olvidar. Todos nos olvidamos, así que por qué no reconocerlo y codificar de una manera que te permita salirte con la tuya. Además, no existe "make" ni ninguna otra herramienta de compilación para Octave. La pequeña cantidad de preparación para configurar un entorno de compilación (como make/Makefile) valdrá la pena.

Ejemplos de códigos

Comencemos con el entorno de compilación. La herramienta make build es a menudo lo suficientemente buena para el tipo de código que puede construir para interactuar con Octave,

Este Makefile está sacado directamente de uno de los ejemplos que encontrarás en nuestra sección servidor gitlab (escriba un correo electrónico con el nombre de usuario preferido a póngase en contacto con para acceder).

Todas las funciones mex tienen el mismo prototipo. Pon eso en una plantilla como la de abajo, y estarás compilando en un santiamén. Para código C directo, el uso de enum, como siempre, hace que el código sea más fácil de leer. In[in_sing_values] es mucho más fácil de leer que In[0], y enum incluso te ahorra teclear los números.

Pero hagámoslo un poco más interesante. ¿Cómo manejamos varios tipos? Para hacer frente a esto, la interfaz mex tiene una función que devuelve el tipo de variable llamada mxGetClassID(). Sin embargo, depende de nosotros implementar el código para cada tipo. Para pequeños trozos de código, yo personalmente no pestañearía en hacer copiar-y-pegar y sustituir el tipo usando el editor.

Para un código más complejo, considere definitivamente el uso del preprocesador C y algo de boilerplate. A continuación se muestra un ejemplo,

y luego, dentro de su código boilderplate, utilice,

siempre que necesite llamar a la función de tipo abstracto.

Por último, define todas las variantes que necesites con,

Y dentro de la función mex-interface,

No hay duda de que copiar y pegar es más rápido que añadir la plantilla. Tampoco hay duda de que llegará un momento en el que depurarás una copia del código, olvidándote de cambiar el código para los otros tipos, y depurar eso te llevará mucho más tiempo que añadir el boilerplate.

Conclusión

El software de código abierto tiene grandes ventajas a la hora de implantarse, y muchas herramientas están impresionantemente maduras. Por ejemplo, Octave facilita el desarrollo de proyectos de óptica física gracias a sus sencillas herramientas de trazado e inspección de datos. Además, funciona a la perfección con lenguajes potentes como C o C++, para que puedas hacer frente a los cuellos de botella de rendimiento o sumergirte en funciones avanzadas como la programación paralela cuando realmente necesites procesar datos pesados.

Con OSS, obtendrá flexibilidad, eficiencia y acceso a herramientas de vanguardia, todo lo cual puede aumentar seriamente su productividad y ayudarle a crear mejores proyectos...

Si considera que esto es algo que beneficiaría a su organización, por favor póngase en contacto con y descubra cómo Senslogic puede ayudarle.

jarek

Entradas recientes

EUV y el estado de la litografía

Litografía óptica de alta gama, de qué se trata La litografía EUV parece ciencia ficción hecha realidad: espejos con suavidad a nivel atómico, luz...

hace 2 semanas

Óptica física en la GPU Nvidia

Intro Durante la mayor parte de mi carrera en óptica, he simulado imágenes de moduladores espaciales de luz y, sobre todo, de SLM...

hace 3 semanas

Visión instantánea

Por qué WaveMe ¿Busca una solución que incluya una cámara de visión? ¿Desea una aplicación de alto rendimiento que le permita...

hace 2 meses

El dilema del integrador de sistemas

Este Tech-Talk trata sobre el desarrollo tecnológico en general, pero quizá más concretamente sobre el desarrollo tecnológico incremental. Obviamente, está influida por...

hace 2 meses

¿Puede la IA hacer tu código?

Supongo que estoy en una misión, una misión para moderar el asombro que la gente parece sentir por lo relacionado...

hace 3 meses

Código abierto y acceso a Gitlab

Herramientas abiertas para el ecosistema WaveMe A partir de hoy, vamos a trasladar las plantillas WaveMe y todo el código abierto a...

hace 5 meses