Modélisation physique et logiciel libre

Introduction

Avec cette présentation technique, j'aimerais offrir une perspective sur la construction d'un cadre de modélisation physique avec des logiciels libres. C'est quelque chose que j'ai fait pendant très longtemps et que j'ai trouvé très gratifiant.

Pourquoi - et - quand

Tout d'abord, nous devons nous demander pourquoi vous le feriez ? Zemax, Comsol ou VirtualLab ne suffisent-ils pas ? Dans le contexte de cet exposé, je pense qu'ils sont excellents pour résoudre certains problèmes précis et très ciblés, tandis qu'avec des outils comme Matlab ou son alternative OSS, Octave, vous pouvez aborder les questions "globales". Par exemple, avec Zemax, vous pouvez concevoir un objectif. Pour cela, il faut ajouter un certain nombre de paramètres. Certains facteurs, comme la taille du champ ou le grossissement, sont évidents. D'autres, comme l'ouverture numérique ou la distorsion, étaient plus difficiles à cerner. Enfin, il y a ceux qui reposent sur des suppositions éclairées et qui finissent par se retrouver dans la fonction de mérite. Pour "dériver" réellement l'ouverture numérique, la modélisation physique peut vous aider à aborder les questions globales que vous pouvez utiliser pour relier les exigences du client aux paramètres utilisés pour la conception de l'objectif.

Octave vs Matlab

Mais parlons maintenant Octave. Quels sont ses avantages et ses inconvénients, notamment par rapport à Matlab. L'un d'eux est la vitesse. Matlab est le produit le plus mature, avec plus de ressources consacrées à l'optimisation. Il dispose d'un compilateur Just-in-Time mature, alors que celui qui était disponible pour Octave a été supprimé en raison des difficultés à le développer et à le maintenir. Cependant, il peut être utile de rappeler les trois règles de l'optimisation,

  • Ne le faites pas
  • Ne le faites pas encore
  • Le profil d'abord

C'est pourquoi je ne pense pas qu'il faille s'inquiéter des différences de vitesse entre ces outils. Oui, pour des benchmarks ciblés, Matlab sera le meilleur. La plupart du temps, dans la résolution de problèmes réels, la différence ne sera pas si spectaculaire, et lorsqu'elle se produit, l'interface avec les binaires compilés est en fait très simple pour Octave, alors qu'elle l'est beaucoup moins pour Matlab. Une différence très spécifique est que vous devez démarrer la session Matlab en tant que session de débogage. Avec Octave, vous pouvez simplement "attacher" et "détacher" un débogueur chaque fois que vous en avez besoin.

L'éducation est importante

Nous ne parlons pas assez souvent de la diffusion du savoir-faire dans l'ensemble de l'organisation. La plupart des entreprises accepteront un coût de licence de 50 000 ou 100 000 euros pour un ou plusieurs développeurs qui ont besoin d'un outil spécifique, mais bien souvent, beaucoup plus de personnes bénéficieraient de la connaissance du fonctionnement des choses. La valeur douce des logiciels libres est qu'ils peuvent être déployés n'importe où et à n'importe quel moment, ce qui n'est pas sans intérêt. Par exemple, les programmeurs peuvent avoir besoin de données réalistes pour tester leur code avant de pouvoir l'obtenir d'un produit qui n'existe pas encore. Une réunion au cours de laquelle nous pouvons montrer comment les choses fonctionnent réellement contribuera à de meilleures décisions et alignera une organisation sur l'objectif commun plus efficacement qu'en essayant de convaincre les participants au moyen d'arguments logiques et d'un raisonnement cohérent. Rappelez-vous : "Convaincre un homme contre son gré, c'est qu'il est toujours du même avis".

Soyons techniques

Bon, trêve de bavardage. Passons aux choses sérieuses. Je ne parlerai pas de la manière de paralléliser votre code dans Octave (ou Matlab), ce sujet est traité partout sur Internet. Ce dont je parlerai, c'est de l'expérience que j'ai de l'interfaçage du code C et de l'écriture d'un code facile à lire. En outre, il y a aussi l'aspect du type de données. Dans Octave, le type par défaut est un flotteur à double précision. Bien que ce soit souvent un bon début, ce n'est souvent pas nécessaire pour la modélisation physique, et si vous vous retrouvez à en avoir besoin, je considérerais cela comme un indicateur que les méthodes numériques devraient être revues. Dans tous les cas, l'interfaçage d'un langage à typage dynamique comme Octave avec un langage à typage statique comme le C doit au moins être pris en compte avant d'essayer de produire du code au niveau de la production.

Alors, plongeons encore plus profondément. Devriez-vous utiliser le compilateur mex ou un outil comme le compilateur GNU, gcc ? Ici, je suggérerais de compiler votre code avec le compilateur GNU ou Clang. Le compilateur Mex ne supporte pas certains attributs très utiles comme "__attribute__((cleanup))" qui vous permet d'allouer et d'oublier. Nous oublions tous, alors pourquoi ne pas le reconnaître et coder d'une manière qui vous permette de vous en sortir. De plus, il n'y a pas de "make" ou d'autre outil de construction pour Octave. Le peu de préparation nécessaire à la mise en place d'un environnement de construction (comme make/Makefile) sera payant.

Exemples de codes

Commençons par l'environnement de construction. L'outil de construction make est souvent suffisant pour le type de code que vous pouvez construire pour interfacer avec Octave,

Ce morceau de Makefile est tout droit sorti d'un des exemples que vous trouverez sur notre site Web. serveur gitlab (écrire un email avec le nom d'utilisateur préféré à contact pour y accéder).

Modèle de Makefile

Toutes les fonctions mex ont le même prototype. Mettez cela dans un modèle comme celui ci-dessous, et vous pourrez compiler en un rien de temps. Pour le code C, l'utilisation d'enum, comme toujours, rend le code plus facile à lire. In[in_sing_values] est beaucoup plus facile à lire que In[0], et enum vous évite même de taper les nombres.

modèle de fichier mex

Mais rendons les choses un peu plus intéressantes. Comment gérer les différents types ? Pour résoudre ce problème, l'interface mex dispose d'une fonction qui renvoie le type de la variable, appelée mxGetClassID(). Cependant, c'est à nous d'implémenter le code pour chaque type. Pour les petits morceaux de code, je n'hésiterais pas à faire un copier-coller et à remplacer le type à l'aide de l'éditeur.

Pour un code plus complexe, il faut absolument envisager d'utiliser le préprocesseur C et quelques modèles de code. Voici un exemple,

modèle de code abstrait de type

et ensuite, à l'intérieur de votre code de gabarit, utilisez,

Comment utiliser le code abstrait de type

chaque fois que vous devez appeler la fonction abstraite de type.

Enfin, définissez toutes les variantes dont vous avez besoin,

Modèle pour l'utilisation du modèle afin de définir le code pour différents types

Et à l'intérieur de la fonction mex-interface,

Comment utiliser les différents types d'instances dans votre fichier mex ?

Il ne fait aucun doute que le copier-coller-substituer est plus rapide que d'ajouter le modèle standard. Il ne fait également aucun doute que le moment viendra où vous déboguerez une copie du code, en oubliant de modifier le code pour les autres types, et que le débogage prendra beaucoup plus de temps que l'ajout du modèle standard.

Conclusion

Les logiciels libres présentent des avantages considérables en matière de déploiement, et de nombreux outils sont d'une maturité impressionnante. Par exemple, Octave fait du développement de projets d'optique physique un jeu d'enfant grâce à ses outils de traçage et d'inspection des données faciles à utiliser. De plus, il fonctionne de manière transparente avec des langages puissants comme le C ou le C++, ce qui vous permet de vous attaquer aux goulets d'étranglement en matière de performances ou de vous plonger dans des fonctions avancées comme la programmation parallèle lorsque vous avez vraiment besoin d'analyser des données lourdes.

Avec les logiciels libres, vous bénéficiez de la flexibilité, de l'efficacité et de l'accès à des outils de pointe - autant d'atouts qui peuvent sérieusement stimuler votre productivité et vous aider à élaborer de meilleurs projets...

Si vous pensez que votre organisation pourrait tirer profit de cette initiative, veuillez contact et pour savoir comment Senslogic peut vous aider.

Laisser un commentaire