Logiciel pour du calcul matriciel efficace

Messages : 2770

Enregistré le : 13 mai 2014 21:12

Classe : intégré

Logiciel pour du calcul matriciel efficace

Message par Jay Olsen » 03 janv. 2021 21:41

Bonjour,

Toujours dans le cadre de mon projet de calcul de la position du soleil dans le ciel, je suis désormais confronté à un souci de performance.
Je cherche à modéliser la cinématique du mouvement de la terre au cours d'une année. On a donc 130 000° de rotation terrestre environ à modéliser. Je cherche à faire apparaitre des problèmes comme la différence de longueur du jour due à la variation de la vitesse de la terre sur son orbite, et la variation de "l'obliquité relative" qui mène aussi à une variation de la durée du jour, deux phénomènes retrouvés dans l'équation du temps. Ceux là, pour être traités confortablement, me demanderaient idéalement une précision de 4 secondes.
Cela fait donc.. près de 8 millions de lignes de calcul.
Chaque calcul consiste à appliquer une vingtaine de calculs matriciels 3x3.

Quel logiciel est le plus optimisé pour du calcul matriciel en masse ?
Je connais un peu matlab et python.
Le gain de performances sera-t-il notable par rapport à du VBA ? Sachant que j'ai appliqué les optimisations de base du VBA.

Merci
Toujours en train de calculer des matrices de rotation

Messages : 11416

Enregistré le : 30 juil. 2008 16:59

Classe : Dr.-Ing

Re: Logiciel pour du calcul matriciel efficace

Message par fakbill » 03 janv. 2021 22:15

Tu continues à faire des choses étranges...
La première chose à faire serait de voir comment simplifier tes 20 produits de matrices, peut être en les regroupant au mieux.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 2193

Enregistré le : 27 oct. 2017 10:55

Classe : Bac a fleurs

Re: Logiciel pour du calcul matriciel efficace

Message par Hibiscus » 03 janv. 2021 22:22

Il faudrait voir quelles operations tu fais et comment tu calcules tes produits, comment tu les simplifies/optimises/ordre/memoire/etc. mais...

!!! Team FORTRAN !!! <3 (ou C, allez a la rigueur)

Plus serieusement, si c'est pour du pratique/cambouis, en terme de logiciel, matlab (/ octave, pour la version GNU) te suffira probablement.
Pas sur d'une amelioration considerable par rapport au vba, vu que matlab reste un langage pas bien efficace, mais bon.
Lycée Masséna (Pcsi-PC*) -- École polytechnique (X15) -- PhD Student (Japon, Astrophysique) -- Ingé (spatial)

Messages : 2770

Enregistré le : 13 mai 2014 21:12

Classe : intégré

Re: Logiciel pour du calcul matriciel efficace

Message par Jay Olsen » 04 janv. 2021 11:36

Hibiscus a écrit :
03 janv. 2021 22:22
Il faudrait voir quelles operations tu fais et comment tu calcules tes produits, comment tu les simplifies/optimises/ordre/memoire/etc. mais...

!!! Team FORTRAN !!! <3 (ou C, allez a la rigueur)

Plus serieusement, si c'est pour du pratique/cambouis, en terme de logiciel, matlab (/ octave, pour la version GNU) te suffira probablement.
Pas sur d'une amelioration considerable par rapport au vba, vu que matlab reste un langage pas bien efficace, mais bon.
Fortran représenterait quel gain d'efficacité ? Car dans l'affaire je dois aussi plotter et visualiser des données.
L'avantage d'excel c'est aussi de pouvoir visualiser les données facilement, y compris sous forme de tableau ou graphe.

Matlab j'y ai pensé car je pensais qu'il était optimisé pour les calculs matriciels ?
En plus je connais un peu.

Aucune gestion de la mémoire en vba.
Les optimisations de base du code consistent à calculer et écrire dans le code et non dans les cellules, puis tout écrire d'un coup à la fin.

Peut être que simplement déplacer le fichier sur le SSD de mon pc pourrait accélérer certaines opérations nécessitant d'accéder à la mémoire disque déjà...
fakbill a écrit :
03 janv. 2021 22:15
Tu continues à faire des choses étranges...
La première chose à faire serait de voir comment simplifier tes 20 produits de matrices, peut être en les regroupant au mieux.
En écrivant le code je me suis aperçu que certaines matrices étaient identiques et je ne les calcule qu'une fois.
Les améliorations que je vois consistent peut être à remplacer trois calculs 3*1 en un calcul 3*3 mais à part ça...
Les calculs matriciels consistent à faire pivoter un point (confondu avec son vecteur radial) puis deux autres axes autour d'axes distincts, d'angles distincts, avec un cheminement différent pour les 3, donc je ne pense pas que ce soit facile d'en enlever.

On peut par contre peut être optimiser mon calcul de matrice de rotation (j'utilise la formule générale de matrice de rotation donnée par maple) et mon calcul de multiplication matricielle (triple boucle for) ?

Je cherche juste à faire une représentation cinématique du système terre-soleil, le problème cinématique est déjà assez compliqué en lui même. J'ai fait tout "correctement" et je trouve bien une équation du temps de la bonne forme, de la bonne amplitude, signe qu'il y a du vrai là dedans, mais à l'envers, ce qui reste incompris à ce stade.

Je pense que mon ordinateur pourrait faire tourner le calcul 10 à 15 fois plus vite au moins car à peine 7% du processeur est utilisé.
30 secondes pour l'année deviendrait 2 secondes, ça aiderait pas mal.
Toujours en train de calculer des matrices de rotation

Messages : 85

Enregistré le : 18 juil. 2017 16:50

Classe : Prof en école d'ingé

Re: Logiciel pour du calcul matriciel efficace

Message par Puffin » 04 janv. 2021 12:17

Profite de ce projet qui semble te tenir à cœur pour apprendre un nouveau langage (Python, par exemple, avec numpy / matplotlib).
Tu pourras ensuite constater les différences de performance s'il y en a.

Je ne pige pas l'expression "8 millions de lignes de calcul".

Messages : 2770

Enregistré le : 13 mai 2014 21:12

Classe : intégré

Re: Logiciel pour du calcul matriciel efficace

Message par Jay Olsen » 04 janv. 2021 12:40

Puffin a écrit :
04 janv. 2021 12:17
Profite de ce projet qui semble te tenir à cœur pour apprendre un nouveau langage (Python, par exemple, avec numpy / matplotlib).
Tu pourras ensuite constater les différences de performance s'il y en a.

Je ne pige pas l'expression "8 millions de lignes de calcul".
13000 degrés de rotation terrestre par an.
Un degré de rotation c'est environ 4 minutes.
Pour passer à une résolution de 4 secondes ça fait donc 130000*60=7.8 millions de lignes de résultat plus exactement.
Mais chaque ligne de résultats résulte d'un seul calcul (les 10-15-20 matrices je sais plus).
Toujours en train de calculer des matrices de rotation

Messages : 338

Enregistré le : 09 août 2018 20:57

Re: Logiciel pour du calcul matriciel efficace

Message par GrosGillouDu92 » 04 janv. 2021 13:19

Je propose Julia:

https://julialang.org/
Parent

Messages : 2770

Enregistré le : 13 mai 2014 21:12

Classe : intégré

Re: Logiciel pour du calcul matriciel efficace

Message par Jay Olsen » 04 janv. 2021 16:10

Victoire !
Je trouve désormais une équation du temps correcte :
Image

Le souci comme vous le voyez, c'est maintenant la performance du logiciel.
En 30 secondes j'ai pu tracer la courbe ci dessous qui n'est pas parfaite mais a clairement un sens physique.
Si je réduis la précision du calcul (écartement entre deux étapes supérieur à 1° de rotation terrestre) j'obtiens cette courbe qui a toujours du sens physique mais il faut le chercher... :
https://i.gyazo.com/efe168ae7a9a7e26e71 ... 4e4141.png
Si j'augmente au contraire la précision du calcul, j'obtiens une courbe plus lisse mais toujours pas bien lisse.
https://i.gyazo.com/4db6159106c89cb51dc ... 049779.png

J'ai maintenant un souci de précision.
Je me demande ce qui relève de la précision astronomique (gestion des années bissextiles, lente modification de l'orbite terrestre, etc..) et donc pour le coup des vrais professionnels et ce qui pourrait relever du manque d'optimisation/puissance du calcul, avec peut-être un souci de chiffres significatifs ou d'optimisations ad hoc du code (avec perte de généralité dans les résultats).
Toujours en train de calculer des matrices de rotation

Messages : 85

Enregistré le : 18 juil. 2017 16:50

Classe : Prof en école d'ingé

Re: Logiciel pour du calcul matriciel efficace

Message par Puffin » 05 janv. 2021 10:46

Jay Olsen a écrit :
04 janv. 2021 12:40
Pour passer à une résolution de 4 secondes ça fait donc 130000*60=7.8 millions de lignes de résultat plus exactement.
Mais chaque ligne de résultats résulte d'un seul calcul (les 10-15-20 matrices je sais plus).
Ok, dans n'importe quel autre vrai langage on ne parle pas de ligne, c'est juste une variable de dimension 8 millions.

Par exemple en Python :

Code : Tout sélectionner

x = linspace(-pi, pi, 8e6)
y = cos(x)
plot(x,y)	# graphe 2D de deux vecteurs de dimension 8 million
La ligne "y = cos(x)" prend moins d'une seconde à calculer sur mon PC.
Le graphe prend environ 1 seconde.

Comme vu plus haut, Julia est sympa à découvrir également.

Messages : 2770

Enregistré le : 13 mai 2014 21:12

Classe : intégré

Re: Logiciel pour du calcul matriciel efficace

Message par Jay Olsen » 05 janv. 2021 11:08

C'est moi qui parle de ligne car je ne suis pas informaticien :) ( ou :( d'ailleurs )

Merci pour les chiffres !
Python est clairement plus rapide que excel !
Le calcul équivalent de x et de y=cos(x) prend environ une seconde (à peu près équivalent donc, pour la partie VBA).
Par contre le graphe de 8 millions de lignes, déjà, n'est pas possible. Il n'y a que 10^6 environ lignes de disponibles dans la feuille de calcul. L'écriture du tableau prend 1.75 secondes (étape inexistante en python, à moins que tu ne la demandes)

Par contre sur le graphe, là c'est autre chose.
6 secondes pour avoir un graphe de 1 millions de points. Avec un temps linéaire (ou presque). Si on tient compte du fait que tu as 8 millions de points, python serait 50 fois plus rapide !
Pourtant mon PC est une machine de guerre, le problème ne vient pas de là. Il vient certainement de l'accès requis au disque dur (plus lent) et au fait que excel n'utilise pas la pleine puissance de calcul de mon PC (mais 10% maximum environ)
Toujours en train de calculer des matrices de rotation

Répondre