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 :

Interception des outputs C/fortran depuis C++


Sujet :

C++

  1. #1
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut Interception des outputs C/fortran depuis C++
    Bonjour,

    Mon but est de bufferiser dans une variable tous les outputs, sur stderr ou stdin de routines appel�s dans une librairie qui utilise du C et du fortran.

    Voil� o� j'en suis apr�s qques moments pass� sur google.

    Si intercepter des outputs (par cout) en C++ est assez simple (utilisation des stringstream et consort), et que pour le C on pour se d�broutiller par setbuf/setvbuf, je ne trouve aucun moyen pour intercepter les outputs de program fortran ( la m�thode setbuf ne marche pas).

    Je cherche donc un moyen d'intercepter tous les outputs et les enregistrer dans un buffer qui marcherait pour C/fortran..

    Une id�e?

  2. #2
    Membre chevronn�
    Inscrit en
    D�cembre 2010
    Messages
    290
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2010
    Messages : 290
    Par d�faut
    Il est aussi possible de rediriger les sorties stderr et stdout de tout un programme vers un pipe et de lire ce pipe, tu en penses quoi ?

  3. #3
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634

  4. #4
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    Malheureusement l'id�e de cr�er un processus fils pour intercepter les outputs ne me semble pas viable:

    1/ les routines utilis�es dont je veux intercepter l'output peuvent �tre multithread�s via OpenMP
    2/ je travaille de surcro�t dans un environnement MPI

    L'id�e de forker des processes (un par process MPI) risque de bloquer mes ressources et d'overloader la machine juste pour trapper des outputs....

    A moins que je comprenne pas qqchose.

  5. #5
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    La cr�ation d'un child process c'est juste pour lancer un ex�cutable dont tu veux mapper les entr�es/sorties (stdin,err,out) sur des pipes ma�tris�es par ton processus de bufferisation. Ensuite, que cet ex�cutable distribue son calcul, grand bien lui fasse du moment que la gestion des I/O est correcte.

  6. #6
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    Si par exemple j'ai 4 coeurs sur ma machine...
    Je lance le programme sur 1 process.
    Je spawne un process pour trapper les outputs.
    Le process spawn� va utiliser des pragmas OpenMP ou autres, sur 4 threads.

    Si je compte bien �a fait 5 processes sur une machine de 4 coeurs. Et �a c'est pas bon. Il faut bien que le process p�re continue � vivre pour r�cup�rer les out de son fils via le pipe...

    On a donc un process en trop qui spin � 100% de consommation CPU, pour rien. Enfin si pour des outputs qui arriveront plus lentement...

  7. #7
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par Fortran90 Voir le message
    On a donc un process en trop qui spin � 100% de consommation CPU, pour rien. Enfin si pour des outputs qui arriveront plus lentement...
    Je ne sais pas trop ce que signifie spin, mais j'ose esp�rer qu'une attente sur un pipe n'est pas impl�ment�e comme une attente active. Ensuite, de deux choses l'une : soit la t�che de bufferisation des E/S est d�l�gu�e � un process (ou un thread) d�di� - ce qu'il m'avait sembl� comprendre de ta question premi�re - et alors il faut bien lui donner aussi du temps CPU pour r�aliser sa t�che. Soit chaque t�che s'en occupe et alors cette gestion doit �tre explicitement faite au sein de celles-ci (ou avec un outil permettant de la programmation par aspect) mais ne peut plus �tre d�tach�e dans un programme s�par�.
    Ou quelque chose m'�chape

  8. #8
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    Par spin, il faut comprendre ce que tu as compris.

    Le probl�me est que le type d'attente lors d'un pipe impl�ment� en C par exemple va d�pendre, � mon humble avis, du compilateur. J'ai d�j� vu un process qui �tait en attente active dans un wait apr�s un fork avec le compilateur portland...d'o� le sens de mes remarques.

    De plus, si le process p�re p�se lourd en RAM, ce qui est mon cas, je ne peux pas me permettre de dupliquer le process par un fork.

    Apr�s je ne suis pas expert �s pipe...

  9. #9
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    J'ai l'impression qu'il y a quelque chose qui m'�chappe : ton use-case, c'est quoi :
    1/ Les librairies C et/ou Fortran sont invoqu�es depuis un processus qui veut monitorer leur E/S ?
    2/ Les librairies C et/ou Fortran sont invoqu�es dans un processus diff�rent de celui qui veut monitorer leur E/S ?

  10. #10
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    C'est la situation num�ro 1. Typiquement un calcul hybride ( mpi et openMP ).

  11. #11
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par d�faut
    Si ton thread en attente spin � 100%, c'ets que ton OS est bien moisi. Un thread en attente via le scheduler ne consomme pas de ressource.

    Tu te rends compte que la ta machine fait tourner 400-500 threads sur 2-4 cores rien que pour l'OS ? et que bon, ton CPU ets pas � 100 % ?

    La solution de Archi3D est correcte.

  12. #12
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    Oh mais j'ai pas dit qu'elle n'est pas correcte.

    J'ai juste dit que �a colle pas avec mes besoins. J'ai l'impression d'�craser une mouche avec une patte d'�l�phant.

    Par contre pour les processus tu as enti�rement raison...et en fait je me souviens avoir vu �a pour des processus openMP pour le compilateur portland, rien � voir avec un OS moisi.

    Par contre, j'aimerai �tre s�r...

    Quand je fais le pipe, la m�moire des processus "p�re et fils" est elle dupliqu�e ou partag�e?

  13. #13
    Membre confirm� Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par d�faut
    Personne n'a id�e ?

Discussions similaires

  1. [D�butant] Intercepter des Erreurs depuis un DataGriview li�.
    Par boby15000 dans le forum VB.NET
    R�ponses: 0
    Dernier message: 20/03/2015, 14h00
  2. [WD16] Intercepter des Evenements Windows depuis une classe
    Par dahlback dans le forum WinDev
    R�ponses: 8
    Dernier message: 15/01/2013, 13h55
  3. Intercepter des Evenements Windows depuis une classe
    Par jimmypage dans le forum WinDev
    R�ponses: 4
    Dernier message: 13/07/2012, 17h01
  4. interception des output console
    Par r0d dans le forum C#
    R�ponses: 2
    Dernier message: 19/10/2011, 14h08
  5. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    R�ponses: 13
    Dernier message: 18/12/2002, 16h55

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