IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[Temps Réel] avec du C++ ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Temps Réel] avec du C++ ?
    Bonjour à Tous!

    Je vais me lancer dans un gros projet ( 18 mois ) sur une analyse d'un phénomène physique très complexe...
    L'analyse devra être effectué en temps réel... C'est une analyse événementielle d'images (analyse comportementale)...
    Je dois donc détecter des événements anormaux.

    J'ai quelques questions à vous poser:
    1) Le C++ peut - il convenir à ce genre de tâche? J'ai pour ça un gros PC de calcul sous Windows et Unix si nécessaire.
    Quand je programmais sur DSP, c'était du C, mais là j'ai d'autres outils de travail, nettement plus puissants... Alors je ne sais pas trop...

    2) Pour afficher les images en temps-réel, montrer les résultats de mes analyses, suivre les phénomènes, quelle bibliothèque utiliser? Pendant mon précédent projet de six mois j'ai utilisé CImg, mais là?
    Qt, WxWidget???

    Je vous remercie beaucoup pour toutes vos réponses et/ou remarques!!!

  2. #2
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Le traitement d'image temp réel en C++ est possible, cela depand de la taille de la video a analysé et aussi de la complexité de ton traitement. Parfois il faut ecrire des algo en ASM pour optimisé (si cela est possible). Le nouveau truc à la mode est aussi d'utilise le GPU.
    Pour ce qui est de l'affichage il existe des lib portable (SDL). Mais il faut savoir que l'affichage prend boucoup de temp, et il faut parfois utiliser des outils plus pres de la machine ( DirectX, OpenGL...)
    Je crois pour un projet d'une durée longue, il est difficile d'estimer la rapidité du code. Fait rapidement des maquettes de ton prog pour savoir si l'ordre de gradeur est acceptable.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le C++ est fait pour des projets où le temps compte. Par contre, quel que soit le langage, tout ce qui est affichage est long, et souvent non déterministe en terme de temps d'exécution. Il est donc préférable de bien séparer traitement et affichage, de façon à effectuer ces derniers dans une tâche à faible priorité.

    En plus du langage, il te faudra aussi choisir ton OS. Ni Windows ni les Unix classiques ne sont temps réels. Si louper de temps en temps tes contraintes de temps n'est pas très grave (temps réel mou), et que ces contraintes sont de l'ordre de quelques millisecondes, ils peuvent quand même convenir. Si ce n'est pas le cas, il faudra te tourner vers un véritable OS temps réel. Ce qui risque de limiter le choix de langage, le C++ n'étant pas disponible (ou pas bien supporté, ou buggé) sur certains de ces OS.
    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.

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par JolyLoic
    Le C++ est fait pour des projets où le temps compte. Par contre, quel que soit le langage, tout ce qui est affichage est long, et souvent non déterministe en terme de temps d'exécution. Il est donc préférable de bien séparer traitement et affichage, de façon à effectuer ces derniers dans une tâche à faible priorité.

    En plus du langage, il te faudra aussi choisir ton OS. Ni Windows ni les Unix classiques ne sont temps réels. Si louper de temps en temps tes contraintes de temps n'est pas très grave (temps réel mou), et que ces contraintes sont de l'ordre de quelques millisecondes, ils peuvent quand même convenir. Si ce n'est pas le cas, il faudra te tourner vers un véritable OS temps réel. Ce qui risque de limiter le choix de langage, le C++ n'étant pas disponible (ou pas bien supporté, ou buggé) sur certains de ces OS.
    D'accord Loïc pour la séparation traitement et affichage.

    Ensuite, je ne pense pas être dans le temps réel pur, à compter le nombre de cycles de calcul... Je pênse que le temps réel mou fera l'affaire, je ne suis pas à la milliseconde...

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Tu parles de SDL je trouve cette API très lente voire plus par rapport au simple GDI parfois sous Windows.
    SI tu veux des performances faut accèder à des API natives comme Direct X ou simple GDI sous Windows je ne recommande pas trop les "wrappers"
    Et puis l'OS a son importance comme le dit Loic Joly.
    Vaut mieux un OS véritablement temps réel comme par exemple QNX

  6. #6
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Moi je dirais comme les autres :

    - si tu as une contrainte forte sur le temps réel => OS temps réel, y'a que ça

    - si tu as une contrainte "molle" sur le temps réels => au mieux un linux specialement optimisé, au pire un windows spécialement optimisé (un minimum de services qui tournent...)

    Dans le deuxieme cas, que tu soit sous windows ou linux :

    - un processus haute priorité pour le traitement, avec des algos bien pensés, bien optimisés, avec pour les parties les plus critiques un peu d'assembleur

    - un processus faible priorité pour l'affichage, si possible avec le choix entre 2 ou 3 tailles/qualités d'affichage (pour accelerer si besoin). Pour l'affichage, rien de plus simple et de plus rapide que le GDI (à mon avis) si tu souhaites uniquement afficher des images (pas de calcul 3D...)

    En tout cas, si ton but est la vitesse et pas l'ergonomie, evites les grosses bibliotheques graphiques qui vont t'ajouter des centaines de lignes de codes dont tu n'as rien à faire pour avoir juste une fenetre avec une image et un bouton "start"

    Dans tous les cas, rien ne t'empeche d'utiliser une carte à DSP pour booster le tout, ou alors d'utiliser les fonctions specifiques du GPU pour accelerer le traitement sur les images.

    Par exemple (je suis pas à 100% sur, mais en gros) :
    Mettons que dans ton traitement temps réel tu ai besoin d'appliquer un filtre 9x9 sur ton image, tu peux utiliser directX pour ça. Du coup, si la carte graphique sait appliquer des filtres 9x9, c'est elle qui va le faire, et c'est autant de ressources economisées sur le CPU....

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Pour l'instant, je n'ai aucune idée des traitements à effectuer.
    C'est sur que dans un premier temps, je vais plutôt m'occuper des algos à développer...

    Le but ici est de voir quels sont les outils qui peuvent être à ma disposition.
    J'ai déjà utiliser un peu la SDL, mais pas Qt, ni WxWidget.

    Pour le temps réel, une lib pas trop gourmande serait la bienvenue!
    A moins que le GPU prenne le relais. J'imagine que pour l'affichage graphique, l'utilisation du GPU serait un plus, mais est-ce différent alors comme manière de programmer?

    Merci !

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par poukill
    Bonjour à Tous!

    Je vais me lancer dans un gros projet ( 18 mois ) sur une analyse d'un phénomène physique très complexe...
    L'analyse devra être effectué en temps réel... C'est une analyse événementielle d'images (analyse comportementale)...
    Je dois donc détecter des événements anormaux.

    J'ai quelques questions à vous poser:
    1) Le C++ peut - il convenir à ce genre de tâche? J'ai pour ça un gros PC de calcul sous Windows et Unix si nécessaire.
    Quand je programmais sur DSP, c'était du C, mais là j'ai d'autres outils de travail, nettement plus puissants... Alors je ne sais pas trop...

    2) Pour afficher les images en temps-réel, montrer les résultats de mes analyses, suivre les phénomènes, quelle bibliothèque utiliser? Pendant mon précédent projet de six mois j'ai utilisé CImg, mais là?
    Qt, WxWidget???

    Je vous remercie beaucoup pour toutes vos réponses et/ou remarques!!!
    Avez-vous mesurer les quantités de données manipulées ?
    Quels sont les "circuits" suivi par ces données et quelles sont les débits possibles tout au long ce ces circuits ?
    Quelles ont les transformations (calculs) des données que vous devez effectués ?
    Avez-vous fait des benchmarks de ces calculs ?
    Vous parlez d'images : ce sont des images acquises (quelle interface hardware ? (débit ?), dimension, résolution, profondeur, faut-il convertir les espaces couleurs au vol ? …) qui doivent être manipulées ou simplement des graphiques déduits de vos calculs ?
    Si ce sont des graphiques, il faudra analyser la répartition entre les parties "fixes" (invariant d'un frame à l'autre) et les parties "variables"…
    Les résultats intermédiaires doivent-il être sauvés sur disque ? Quantité ?

    etc.

    l'analyse de la faisabilité d'une application "temps réel" commence par la définition de la notion de "temps réel" pour le contexte donné…
    et ensuite il faut déterminer tous les chemins suivis par les données,
    examiner le parallélisme logique, voir s'il peut se traduire par un parallélisme physique et examiner sur les différents chemins obtenus quels sont les débits possibles, voir s'il y a des conditions de compétition pour certaines resources à certains moments (CPU, mémoire, bus accès GPU, disque, GPU, interfaces vers l'hardware d'acquisition, …), bref déterminer le chemin critique…
    (entre devoir faire des grosses FFT en temps réel et acquérir de l'HDTV les "bottlenecks" ne seront pas au même endroit : dans le premier cas, la conclusion pourrait être qu'il faut un multi-processeur dont chaque cpu a sa propre cache d'accès à la RAM, dans l'autre qu'il faut une carte graphique qui permette les meilleurs transferts DMA possibles, un RAID SCSI haut de gamme et un OS qui permette de copier la mémoire d'acquisition video directement dans celle du GPU sans copie intermédiaire…)


    … vous avez posé une question relativement vague…
    et à mon avis les réponses obtenues, même si elles peuvent être correctes dans un contexte donné, le sont tout autant car il manque essentiellement une vue d'ensemble de ce que vous devrez faire et ne fusse qu'un pré-analyse des "coûts" de chaque étape…

  9. #9
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par JeitEmgie
    Avez-vous mesurer les quantités de données manipulées ?
    Quels sont les "circuits" suivi par ces données et quelles sont les débits possibles tout au long ce ces circuits ?
    Quelles ont les transformations (calculs) des données que vous devez effectués ?
    Avez-vous fait des benchmarks de ces calculs ?
    Vous parlez d'images : ce sont des images acquises (quelle interface hardware ? (débit ?), dimension, résolution, profondeur, faut-il convertir les espaces couleurs au vol ? …) qui doivent être manipulées ou simplement des graphiques déduits de vos calculs ?
    Si ce sont des graphiques, il faudra analyser la répartition entre les parties "fixes" (invariant d'un frame à l'autre) et les parties "variables"…
    Les résultats intermédiaires doivent-il être sauvés sur disque ? Quantité ?

    etc.

    l'analyse de la faisabilité d'une application "temps réel" commence par la définition de la notion de "temps réel" pour le contexte donné…
    et ensuite il faut déterminer tous les chemins suivis par les données,
    examiner le parallélisme logique, voir s'il peut se traduire par un parallélisme physique et examiner sur les différents chemins obtenus quels sont les débits possibles, voir s'il y a des conditions de compétition pour certaines resources à certains moments (CPU, mémoire, bus accès GPU, disque, GPU, interfaces vers l'hardware d'acquisition, …), bref déterminer le chemin critique…
    (entre devoir faire des grosses FFT en temps réel et acquérir de l'HDTV les "bottlenecks" ne seront pas au même endroit : dans le premier cas, la conclusion pourrait être qu'il faut un multi-processeur dont chaque cpu a sa propre cache d'accès à la RAM, dans l'autre qu'il faut une carte graphique qui permette les meilleurs transferts DMA possibles, un RAID SCSI haut de gamme et un OS qui permette de copier la mémoire d'acquisition video directement dans celle du GPU sans copie intermédiaire…)


    … vous avez posé une question relativement vague…
    et à mon avis les réponses obtenues, même si elles peuvent être correctes dans un contexte donné, le sont tout autant car il manque essentiellement une vue d'ensemble de ce que vous devrez faire et ne fusse qu'un pré-analyse des "coûts" de chaque étape…
    Je sais bien que ma question est vague...
    Cependant, les réponses qui me sont apportées ici me sont très utiles pour éliminer des pistes.
    Le projet ici est beaucoup plus conséquent que tout ce que j'avais vu à présent. Je pars de pas grand chose (bcp à défricher !!), et mes connaissances en développement sérieux et propre restent largement à parfaire, notamment sur du temps-réel (mou ici) multi-tâches

    Beaucoup d'habitués ici connaissent bien que moi les outils disponibles, ainsi que les différentes façons d'attaquer mon problème.

    Je peux quand même donner plus de précision :

    image : 320 * 240
    Période d'échantillonnage : 20 ms
    Durée du film : 30 secondes environ

    La détection d'événements anormaux (algos pour l'instant complètement indéfinis, c'est le but du projet) devra permettre de stopper l'expérience (asservissement sur un circuit physique)

    Voilà, j'espère être plus précis!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tracer Temps Réel avec la Data Acquisition Toolbox
    Par Dizayeure dans le forum MATLAB
    Réponses: 0
    Dernier message: 26/04/2008, 14h50
  2. [XML] Traiter xml en temps réel avec simple xml
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/12/2007, 20h30
  3. Réponses: 2
    Dernier message: 26/08/2007, 12h22
  4. Déplacer des objets en temps réel avec la souris.
    Par johnnyjohnny dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/07/2007, 14h54
  5. Informatique temps réel avec VxWorks
    Par Mastero dans le forum C++
    Réponses: 3
    Dernier message: 02/09/2005, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo