Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 124 558 vues
- 130 followers
Anonyme
Dr Pouet
Par ailleurs, l'esprit humain est super mal équipé pour penser des flux d'information parallèles intriqués (préemption de threads, partage de ressources...).
Ça c’est clair que c’est un gros souci.
Sur l’un des logiciels dont je m’occupe (2 millions de lignes de code ; d’ailleurs les chiffres de l’article me semblent exagérés de bien un facteur 10), on vient de corriger des gros bugs de ce genre, qui datent de la version 1 en 1980, et qui se produisent beaucoup plus fréquemment depuis un changement de plateforme (processeur monocœur à multicœurs). Ça n’a pas été simple.
Il semble que certains modèles de programmation récents aident bien pour ce genre de choses : Enterprise Java Beans, Corba Components...
Sinon le SDL Z100 est très efficace là-dessus. Mais c’est de l’artillerie beaucoup plus lourde ; même si on se contente de l’utiliser seulement pour les communications et accès concurrents aux ressources, entre threads.
[ Dernière édition du message le 26/11/2017 à 19:00:10 ]
Jimbass
on vient de corriger des gros bugs de ce genre, qui datent de la version 1 en 1980, et qui se produisent beaucoup plus fréquemment depuis un changement de plateforme (processeur monocœur à multicœurs). Ça n’a pas été simple.
Je bosse précisément sur ce sujet.
Dans un processeur multi-cœur, les cœurs se partagent des ressources matérielles : périphériques, bus d'interconnexion (ou de préférence network-on-chip), et même la mémoire (souvent dès le cache L2). Quant un cœur accède à une ressource partagée, elle n'est plus disponible pour les autres, qui doivent attendre qu'il ait fini. Donc le temps d'exécution d'une tâche sur un cœur de processeur dépend de ce qui se passe sur les autres cœurs.
Or les normes de certification pour systèmes critiques (tu dois être familier de la DO-178C dans l'avionique civile) imposent une isolation stricte entre les applications, un logiciel n'a pas le droit d'impacter le temps d'exécution d'un autre.
C'est notamment pour ca qu'il n'y a pas encore de processeurs multi-cœurs dans les avions.
Ajoute que les processeurs modernes ne sont absolument pas optimisés pour le déterminisme, mais au contraire pour maximiser la performance en moyenne, souvent au détriment du pire cas (avec plein de mécanismes spéculatifs comme l'exécution dans le désordre, la prédiction de branchement, le pré-fetch, etc.) et que beaucoup de mécanismes matériels ne sont pas documentés (pour des questions de propriété intellectuelle), et tu vois qu'on ne risque pas de manquer de boulot.
Il semble que certains modèles de programmation récents aident bien pour ce genre de choses : Enterprise Java Beans, Corba Components...
Tu veux dire que ca aide à faire des bugs ?
Musikmesser 2013 - Bullshit Gourous - Tocxic Instruments - festivals Foud'Rock, Metal Sphère et la Tour met les Watts
Dr Pouet
Or les normes de certification pour systèmes critiques (tu dois être familier de la DO-178C dans l'avionique civile)
Ça c’est pour l’avionique (= l’électronique de bord ess avions de ligne) ; c’est plus critique que ce sur quoi je bosse.
Je travaille dans le contrôle aérien, donc des logiciels de contrôle, au sol. On a différents niveaux de criticité, le plus critique étant la radio, puis l’image radar ; mais le plus gros volume des logiciels porte sur des données « plan de vol », météo... et c’est de l’informatique industrielle ; SWAL 3 si ma mémoire est bonne. Par contre, depuis toujours on fait très attention aux redondances, aux basculements système actif / système de secours... Et aussi à l’anti-intrusion (nos systèmes sont très isolés).
Sinon pour les bugs dont je parlais, ils étaient dûs à du codage fait par des cochons. Dans des call-backs de signaux Unix, il y avait beaucoup trop de code : manipulations de variables partagées et appels de fonctions pas conçues pour être ré-entrantes... Par contre des évolutions récentes de Linux nous aidés à résoudre ces problèmes en permettant de traiter ces interruptions par des signaux, comme des activations de File Descriptor dans une boucle principale à base de select() ou poll(). Ça a beaucoup simplifié ces corrections. Et on peut penser que cet enrichissement du select/poll vient du fait que ce mauvais codage est malheureusement courant...
[ Dernière édition du message le 26/11/2017 à 21:59:36 ]
.: Odon Quelconque :.
Après si on ne connaît pas ces sujets, cet article reste une introduction assez intéressante.
Je pense qu’il a aussi raison de souligner qu’en automobile la criticité semble un peu sous-évaluée.
C'est effectivement mon point de vue, ne côtoyant de l'informatique "professionnelle" que celle de gestion, applis web ou - las - bureautique.
Il me semble que l'article original en provenance de The Atlantic est plus fouillé.
Et j'expérimente très modestement la même impression que lorsqu'on a une idée très claire d'un traitement à effectuer ou d'un petit logiciel métier à créer, autant dire pour des choses triviales dans mon domaine, les outils pour parvenir rapidement à un résultat concret demeurent encore bien trop lourds, complexes, sans parler des adhérences avec le système d'exploitation ou l'environnement d'exécution cible.
L'exemple du copier/coller de code vbs/js qui fonctionne depuis StackOverflow sent très fort le vécu.
Du temps de ma splendeur passée, j'ai participé à l'introduction de quelques bugs sur des applications comptables transactionnelles (COBOL inside) qui ne sont apparus qu'en production, d'où des coups de fils paniqués de mes collègues le lendemain matin alors que je roupillais du sommeil du juste.
Une fois la situation apaisée, la réplique habituelle devant la tasse de café matinale était : "heureusement qu'on ne fabrique pas des avions !"
En tout cas vos échanges sont super intéressants.
« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)
miles1981
Combien de packages sont écrits par des gens qui n'ont aucune idée de ce qu'ils font ? Combien sont des matheux qui n'ont jamais su ce qu'était un processeur ?
Autre chose, on parle de perf et Corba/Java ? Non, mais faut arrêter :D
Audio Toolkit: http://www.audio-tk.com/
Dr Pouet
Dr Pouet
https://archive.org/stream/byte-magazine-1990-09/1990_09_BYTE_15-09_15th_Anniversary_Summit#page/n453/mode/2up
Jimbass
(Je pense qu'il faut avoir pratiqué le wrapping d'une carte à microprocesseur --un Z80 en ce qui me concerne-- pour apprécier la "beauté" de la chose.)
Musikmesser 2013 - Bullshit Gourous - Tocxic Instruments - festivals Foud'Rock, Metal Sphère et la Tour met les Watts
[ Dernière édition du message le 28/11/2017 à 11:15:00 ]
Truelle est un manchot
J'aurais besoin d'appeler cette fonction dans un script python: https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms686223(v=vs.85).aspx
Minimum supported client: Windows XP
Library: Kernel32.lib
DLL: Kernel32.dll
Si j'ai bien compris c'est une fonction déjà implémenté dans une librairie sur tous les OS Crosoft à parti d'XP? C'est bien ça?
'Fin j'ai pas besoin de créer une lib c++ perso, d'y coller la fonction et de compiler tout le bordel pour pouvoir ensuite l'importer dans mon script?
Je devrais juste avoir à importer la fonction qui est dans le fichier kernel32.dll avec ctypes?
Edit: Bon je crois avoir résolu mon problème comme un grand.
import ctypes
lib = ctypes.WinDLL('kernel32')
lib.SetProcessAffinityMask()
[ Dernière édition du message le 06/02/2018 à 21:41:00 ]
VvSurLeRiddim
Si j'ai bien compris c'est une fonction déjà implémenté dans une librairie sur tous les OS Crosoft à parti d'XP? C'est bien ça?
Oui.
'Fin j'ai pas besoin de créer une lib c++ perso, d'y coller la fonction et de compiler tout le bordel pour pouvoir ensuite l'importer dans mon script?
En C/C++, tu aurais juste besoin de mettre un
#include WinBase.h
dans ton code, de linker Kernel32.lib pour compiler, et d'avoir Kernel32.dll dans le PATH pour exécuter.
Mais comme c'est une lib Windows, le .lib est linké automatiquement si tu utilises Visual et le .dll est déjà dans le path, donc dans la pratique t'aurais plus qu'à mettre le #include.
En Python, je ne sais pas.
- < Liste des sujets
- Charte