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++

  1. #21
    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 : 45
    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
    Ben, a mon avis (mais je ne suis sur de rien) si tu veux un code réellement optimisé, qui turbine à fond, il te faudra notamment :

    - faire un peu d'assembleur (dans certaines boucles des algos)
    - tirer parti des possibilités de l'OS (hyperthreading, temps réel... selon l'OS)
    - tirer parti du materiel (bi-processeur, GPU...)

    Du coup, ben c'est plus trop portable.

    Par contre, tu peux peut-etre faire une version portable, fonctionnelle et pas forcement très optimisée, pour servir de base à des versions optimisées spécifiques à chaque système.

    Pour ce qui est des thread et de la couche graphique, je connait mal boost, mais souvent des #ifdef / #endif selon le systeme suffisent.

    Bon courage !

    (et je veux bien etre tenu au courant des performances, par curiosité)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 964
    Par défaut
    Citation Envoyé par poukill
    Juste une dernière question alors:

    Quelle méthode utiliser pour du Multithreading (un processus pour l'affichage, l'autre pour les calculs), afin que le code soit portable?
    Boost est-il une bonne idée?

    Merci
    API portable : pthread

    a priori, 3 threads :
    a. principal : interaction avec l'utilisateur et affichage
    b. acquisition
    c. calcul (mais pourrait faire l'objet de + d'1 thread…)

    utilisez pthread_attr_setschedpolicy pour déterminer la priorité d'accès aux mutex, mais comme toutes les plate-formes ne supportent pas cette fonctionnalité, mettrez le code d'optimisation des priorités dans une fonction à part qui regroupera les compilations conditionnelles en fonction de l'environnement,
    (ce qui vous permettra d'utiliser d'autres techniques de gestion des priorités des threads sur certaines plate-formes…)

    communication entre threads (en gros)

    principal vers acquisition
    start
    stop
    (pause ?)

    acquisition vers principal
    status

    acquisition vers calcul
    data available

    calcul vers principal
    refresh display

    verrous sur les données partagées (buffers d'acquisition, résultats des calculs,…)
    verrous conditionnels pour exprimer les états

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Le projet étant relativement conséquent (il risque d'avoir un diagramme UML assez chargé), je pense que ça va être difficile d'optimiser en assembleur les boucles.
    Je pense plutôt porté mon optimisation sur une très bonne conception du programme! (enfin, je vais essayer ! )

    Sinon, pour l'aspect portable, je pense que tu as raison. Si je développe sur le PC qui fera les calculs, alors tout est OK.
    Mais je pense que ce ne sera pas le cas: le développement se fera sous Windows, et l'exécution sous Unix (meilleur en temps-réel mou je pense).

    Le seul problème, c'est le multithreading... Il faudrait qu'il soit compatible dans les deux cas...

    Merci pour ton aide buzzkaido!

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par JeitEmgie
    API portable : pthread

    a priori, 3 threads :
    a. principal : interaction avec l'utilisateur et affichage
    b. acquisition
    c. calcul (mais pourrait faire l'objet de + d'1 thread…)

    utilisez pthread_attr_setschedpolicy pour déterminer la priorité d'accès aux mutex, mais comme toutes les plate-formes ne supportent pas cette fonctionnalité, mettrez le code d'optimisation des priorités dans une fonction à part qui regroupera les compilations conditionnelles en fonction de l'environnement,
    (ce qui vous permettra d'utiliser d'autres techniques de gestion des priorités des threads sur certaines plate-formes…)

    communication entre threads (en gros)

    principal vers acquisition
    start
    stop
    (pause ?)

    acquisition vers principal
    status

    acquisition vers calcul
    data available

    calcul vers principal
    refresh display

    verrous sur les données partagées (buffers d'acquisition, résultats des calculs,…)
    verrous conditionnels pour exprimer les états
    pthread est vraiment compatible 100% Windows/Unix ?

    Pour mieux comprendre ce que tu viens de me dire, je viens de dessiner le diagramme des tâches de chaque processus.

    acquisition vers principal
    status
    Je suis pas sur de comprendre parfaitement ce que tu veux dire? Le thread acquisition renvoi un truc du genre "acquisition en cours" au thread principal?

    Sinon c'est OK, j'ai un graphe de communication assez clair sur papier!

    Merci !

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 964
    Par défaut
    Citation Envoyé par poukill
    pthread est vraiment compatible 100% Windows/Unix ?

    Pour mieux comprendre ce que tu viens de me dire, je viens de dessiner le diagramme des tâches de chaque processus.


    Je suis pas sur de comprendre parfaitement ce que tu veux dire? Le thread acquisition renvoi un truc du genre "acquisition en cours" au thread principal?

    Sinon c'est OK, j'ai un graphe de communication assez clair sur papier!

    Merci !
    c'est une proposition sans connaître les détails de votre matériel, mais en général quand on acquiert des données à partir d'un hardware il est sympa de refléter dans l'interface utilisateur le statut (ou les statuts…) du matériel (quand bien sûr le dit matériel a un protocole de communication qui permet de le faire…) : ON/OFF/RECORDING/PAUSE/ERROR N° …/FRAME COUNTER/…

    pthread c'est du POSIX… et c'est disponible sous tous les Unix, avec des subtilités dans certaines parties mais cela ne devrait pas vous toucher dans ce projet…

    et il existe des bibliothèques pthread pour Windows…

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par JeitEmgie
    c'est une proposition sans connaître les détails de votre matériel, mais en général quand on acquiert des données à partir d'un hardware il est sympa de refléter dans l'interface utilisateur le statut (ou les statuts…) du matériel (quand bien sûr le dit matériel a un protocole de communication qui permet de le faire…) : ON/OFF/RECORDING/PAUSE/ERROR N° …/FRAME COUNTER/…
    Oui, je comprend parfaitement... C'est toujours sympa de voir où on en est!

    Citation Envoyé par JeitEmgie
    pthread c'est du POSIX… et c'est disponible sous tous les Unix, avec des subtilités dans certaines parties mais cela ne devrait pas vous toucher dans ce projet…
    J'ai déjà utilisé du POSIX sous Unix, mais jamais sous Windows. Je me demande si un programme développé sous Windows avec <pthread.h> fonctionnera de la même manière sous Unix?
    Citation Envoyé par JeitEmgie
    et il existe des bibliothèques pthread pour Windows…
    Jamais utilisé encore, mais pourquoi pas donc!

    Merci beaucoup pour ton aide!

  7. #27
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 306
    Par défaut
    Et si tu veux faire du C++ plutôt que du C, tu as effectivement boost (un peu léger en fonctionalités), ACE (un peu une enclume), ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    Et si tu veux faire du C++ plutôt que du C, tu as effectivement boost (un peu léger en fonctionalités), ACE (un peu une enclume), ...
    pthread peut aussi s'utiliser en C++, non?

    Luc, étant donné que mon projet sera définitivement orienté objet, quelle différence y a t-il alors entre boost et le standard POSIX?
    L'un est t-il plus pratique, rapide que l'autre?

    Je n'ai encore jamais utilisé boost...

    Merci!

  9. #29
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 306
    Par défaut
    POSIX est un standard très répandu sur unix. Il y est implémenté avec des menus différences. Son API est en C.

    ACE, comme boost, sont des bibliothèques C++ qui enveloppent les détails d'implémentation lié à un OS ou un autre. Elles font ainsi de leur mieux pour fournir une interface C++ portable qui encapsule les POSIX, win32, ...

    Le côté C++ apporte des avantages pas si négligeables
    - Un meilleur typage qui évite les erreurs idiotes dans les passages de paramètres

    - Des façons plus propres qui définir des classes qui sont des tâches

    - Il est possible de d'avoir des callbacks sur autre chose que des fonctions libres ayant des void * en paramètre.

    - Elles définissent (ACE en particulier) toutes sortes d'"outils" de haut niveau pour faire du multi-tâches (reactor/proactor, barrières, système de messagerie inter-threads, compteurs atomiques, futures, intégration propre avec des sockets&autres timers, ...) et le tout de façon portable.


    Le secret est que suivant l'OS cible, en interne, ce sont des appels aux primitives win32 ou POSIX (les détails de variations entre les divers UNIX étant déjà pris en compte) qui sont réalisés.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Luc Hermitte
    POSIX est un standard très répandu sur unix. Il y est implémenté avec des menus différences. Son API est en C.
    Ok, c'est pas que je suis contre le C, mais dans un souci d'unité, je resterai bien dans du C++...

    Citation Envoyé par Luc Hermitte
    ACE, comme boost, sont des bibliothèques C++ qui enveloppent les détails d'implémentation lié à un OS ou un autre. Elles font ainsi de leur mieux pour fournir une interface C++ portable qui encapsule les POSIX, win32, ...
    Ok, boost choisi donc, en fonction de l'OS sur lequel le programme trourne, l'implémentation adéquate. C'est très bien pour moi si j'ai à travailler sur deux systèmes différents.

    Maintenant, si j'ai la possibilité de travailler sur la même machine, du développement à l'exécution, est-ce qu'il vaut mieux coder directement en POSIX ou Win32? (meilleure performance ?)
    Ou bien le gain de clarté est-il significatif en choisissant boost? (meilleure intégration dans mon environnement C++) La performance est-elle vraiment réduite?

    Merci Luc pour tes précieux conseils !

  11. #31
    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
    Je n'aime pas sortir du cadre des questions d'un forum. Mais vue quelques questions posé j'aimerai proposer la création d'un petit tuto. en français sur l'utilisation des GPUs. Personnellement je n'ai aucune connaissance dans ce domaine, mais cela m'interesse. Si des personnes sont interessés, ou motivé pour m'aider contacter moi.

  12. #32
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par themadmax
    Je n'aime pas sortir du cadre des questions d'un forum. Mais vue quelques questions posé j'aimerai proposer la création d'un petit tuto. en français sur l'utilisation des GPUs. Personnellement je n'ai aucune connaissance dans ce domaine, mais cela m'interesse. Si des personnes sont interessés, ou motivé pour m'aider contacter moi.
    Moi, ça m'intéresse.
    Je n'ai également aucune connaissance dans le domaine des GPU. On est probablement pas les seuls.
    J'apprécierais un tutoriel "pour les nuls".

  13. #33
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Le problème, c'est que pour exploiter le GPU il faut passer par une API 3D, donc DirectX ou OpenGL. Donc il n'y a pas à proprement parler de "programmation GPU pour les nuls", mais plutôt "comment débuter avec DirectX / OpenGL" puis "comment utiliser les shaders". C'est pas vraiment trivial.

    A la limite ce qu'il serait intéressant de faire (si ça n'existe pas déjà) ce serait une bibliothèque pour abstraire les détails de programmation 3D et fournir une interface focalisée sur l'exploitation du GPU pour des calculs mathématiques.

  14. #34
    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 : 45
    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
    Une bibliotheque mathematique pour GPU, ça existe... a moitié !

    En partie sur :

    http://www.gpgpu.org

    Et sinon, NVIDIA vient de sortir ce qui ressemble à une API mathematique pour leurs GPUs :

    http://www.developer.nvidia.com/object/cuda.html

    Je n'ai pas creusé en détails ces docs, mais je crois bien que ce sont les references en matière de "General Purpose GPU"...

    Pour peu qu'un standard se mette en place, ça pourrait signifier une forte augmentation des performances de nos PC en calculs scientifiques.

  15. #35
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 306
    Par défaut
    Citation Envoyé par poukill
    Maintenant, si j'ai la possibilité de travailler sur la même machine, du développement à l'exécution, est-ce qu'il vaut mieux coder directement en POSIX ou Win32? (meilleure performance ?)
    On est en mesure de s'attendre que de procéder directement aux appels natifs soit plus rapide. D'un autre côté boost et ACE sont excessivement template ce qui peut amener vitesse, comme code bloating.

    Je t'avoue que je ne me suis jamais amusé à faire des mesures de perfs comparatives. Au taf, j'utilise ACE sur du solaris, il y a énormément de traffic en temps réel, et on tient les contraintes de perf sur la partie routeur.
    Et pourtant à plusieurs reprises, j'ai croisé des avis négatifs (en termes de perfs) sur ACE.

    Bref, fait des essais et vois si cela te convient.

    Ou bien le gain de clarté est-il significatif en choisissant boost? (meilleure intégration dans mon environnement C++) La performance est-elle vraiment réduite?
    J'estime que le gain en robustesse, en relative portabilité, et en patterns orientés réseaux/TR en vaut la peine.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Ta réponse est très claire! Merci Luc

    Donc va pour la bibliothèque portable, je le sentais mieux comme ça aussi... Deux avis valent mieux qu'un seul...

    Bonne continuation,

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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, 15h50
  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, 21h30
  3. Réponses: 2
    Dernier message: 26/08/2007, 13h22
  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, 15h54
  5. Informatique temps réel avec VxWorks
    Par Mastero dans le forum C++
    Réponses: 3
    Dernier message: 02/09/2005, 23h08

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