J'avais pas vu. Ok je note ça.
Merci, je sais, je n'ai pas dit le contraire. Mon argument était que :
- Un tri, en O(n log n) en moyenne, peut dégénérer en O(n²), c'est à dire être si long qu'on puisse considérer qu'il est comme non déterministe (ou alors, la gestion de la mémoire le devient aussi, il suffit de parcourir toute la mémoire après tout).
- Tous les algos d'analyse d'image que je connais sont non déterministes.
- Les algorithmes d'optimisation sont non déterministes
- ...
Tout ça pour dire que si l'on se prive de l'allocation dynamique pour ça, on se prive d'énormément d'autres choses. Si c'est admissible dans certains cas, ça ne l'est pas dans d'autres. A tel point que certains fonctions d'un logiciel ne pourraient pas être remplies.
Je peux te citer tout un tas de systèmes temps réel où l'allocation dynamique est pourtant largement utilisée, et sans complexes. Par exemple un logiciel de prédiction météorologique (système temps réel, puisque s'il met pour prédire le temps de lendemain plus d'une journée, il ne remplis plus sa fonction) ne s'en prive pas.
Un simulateur de vol, de conduite,... en utilise tant qu'il veut sur certains aspects (simulation des véhicules externes, gestion événementielle du scripting d'une session), avec une parcimonie relative sur d'autres (dynamique du véhicule, stratégie de contrôle de la plate-forme à vérins,..), et peu ou pas sur d'autres (interface avec certaisn capteurs, intégration HIL (hardware in the loop) d'électronique existant dans les vrais véhicules (par exemeple un calculateur ABS).
Je n'aime pas trop l'utilisation d'arguments d'autorité, surtout quand elle est relative et que mon but est de démonter le point de vue dominant. Je suis près à entendre de vrais arguments.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
il existe beaucoup d'algorithmes sur les images en O(n) (n nombre de pixels, soit m x p) malgré tout, nottament les calculs de squelettes ou la determination des formes, des calculs de distance (sur des images en niveau de gris)
sinon pour etre franc, JolyLoic, en tant qu'exterieur au temps reel ( mois d'etude a peine sur ce sujet, a peine touche du doigt) je suis interesse par savoir ton experience dans ce sujet, ca aide a justifier tes dires. parce que pour moi, quand tu dis
ca n'a aucune valeur si tu ne dis pasPar exemple un logiciel de prédiction météorologique (système temps réel, puisque s'il met pour prédire le temps de lendemain plus d'une journée, il ne remplis plus sa fonction) ne s'en prive pas.
"j'ai travaillé sur un logiciel de prediction meteorologique ici ou la", la ca ressemble a des paroles en l'air. je ne dis pas que c'est faux, que tu pipeautes ou quoi, mais vu que deux avis divergent et que l'un traine dedans, si tu n'avances pas une experience mais juste des phrases dites en l'air, ca a moins de valeur pour moi.
En disant que je suis en GISTR je voulais simplement dire que c'était mon domaine d'activité. Loin de moi l'idée d'être une autorité en la matière.
Pour en revenir au non déterministe, un tri même s'il dégénère en O(n^42) (valeur volontairement abérente) finira et au final on aura les bonnes valeurs aux bons endroits. Dans le cas d'une allocation dynamique efectivement dans le pire des cas on fera un parcours de toute la mémoire mais on peut sortir du malloc (ou new) en n'ayant pas alloué de mémoire, malloc peut retourné NULL et new lève une exception, dans ce cas là que fais tu avec ton système?
Effectivement dans certain cas on utilise l'allocation dynamique mais c'est sur des systèmes qui ne sont pas critique.
Nous n'avons peut être pas la même définition de temps réel. Pour moi c'est un système qui est temps réel (hardware + software), apparement pour toi ce peut n'être q'un logiciel (ton exemple pour la météorologie).
Siu ce n'est qu'un logiciel rien n'empeche de rajouter des ressources pour ton exemple un processeur un peu plus puissant pour que le calcul revienne en dessous de la barre de la journée. Dans le cas d'un système complet on ne peut pas changer le matériel si simplement car il y a souvent des contraintes: place, poids, résistance aux chocs, à la chaleur, ...
J'ai travaillé pendant 8/9 ans sur un simulateur de conduite. C'était du temps réel "soft" (un louper de pas de temps n'avait pas de conséquences graves, il fallait juste que ce soit un évènement pas trop courant), sachant qu'on s'appuyait souvent sur du matériel (plate-forme à vérins, volant à retour d'affort...) qui incluait déjà un certain niveau de logiciel (souvent en temps réel plus "hard", lui) et qui prenait déjà en compte ses propres aspects de sécurité.
Pour la météorologie, je n'ai pas d'expérience directe, mais ai discuté avec un gars qui faisait sa thèse là dessus (sur but était comment réintroduire dans l'algo de prédiction les nouvelles observation qui ont pu être faites depuis le début du calcul), et je peux t'assurer que ses problématiques étaient à 100 lieux d'une minimisation des allocations mémoire...
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Je reporte l'erreur aux couches appropriées du système, qui elles n'ont pas besoin d'allocation mémoire, en leur laissant décider quoi faire. Ca peut aller de faire exploser Ariane à rebooter automatiquement le système à basculer vers une stratégie survivaliste minimale, à...
Ce qui me semble important, plus que l'allocation mémoire, est l'indépendance entre couche de façon à ce qu'une erreur haut niveau ne vienne pas mettre en cause le bas niveau.
Justement, je pense que j'ai une vision plus large de ce qu'est un système temps réel. Prenons une voiture, un des systèmes temps réel où la sécurité compte beaucoup les plus utilisés actuellement. Et bien, dans ce système, certains aspects se moquent totalement du déterminisme (la navigation, par exemple, et tout ce qui est habitacle en général (d'ailleurs des langages comme Java y sont de plus en plus présent)), certains aspects y font bien plus attention (les calculateurs ABS ou ESP, les directions assistées électriques...(1)). Et de toute façon, tout est prévu (pour l'instant du moins, mais ça risque(2) de changer, ce n'est par exemple plus le cas dans l'aéronautique) pour qu'en cas de défaillance complète de l'électronique, la mécanique reste suffisamment stable pour assurer la sécurité des personnes.
En l'occurrence, pour la météo, ce n'est généralement pas possible, le bottleneck étant dans la possibilité de distribuer les algorithmes sur n processeurs (n se comptant en milliers), et je crois aussi dans le débit de communication entre les différents processeurs. S'il suffisait d'acheter un millier d'ordinateurs en plus pour avoir les résultats plus vite, les ingénieurs de météofrance seraient au chômage...
Et prix...
Mais de toute façon, changer un matériel a un impact sur les performances, pas sur le déterminisme.
(1) D'ailleurs, chose amusante, quand on lit la définition du protocole CAN, utilisé pour communiquer entre les différents éléments d'une voiture, un peu comme de l'USB pour l'informatique, mais vendu comme déterministe et temps réel, on se rend compte qu'en fait il n'est pas déterministe...
(2) Voire c'est en train de changer, je ne bosse plus chez un constructeur automobile, et n'ai donc pas suivi.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Partager