ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/outil/src/ot_cpu.cpp
Revision: 727
Committed: Fri Sep 11 20:56:47 2015 UTC (9 years, 8 months ago) by francois
File size: 3657 byte(s)
Log Message:
Utilisation de code aster multicore

File Contents

# User Rev Content
1 francois 277 #include "gestionversion.h"
2     #include "ot_cpu.h"
3     #include <stdio.h>
4     #include <map>
5    
6 francois 674 double CODE_ASTER_CPU;
7 francois 727 double CODE_ASTER_ECOULE;
8 francois 277
9    
10    
11     OT_CPU::OT_CPU()
12     {
13 francois 283 initialise();
14 francois 277 }
15    
16     OT_CPU::OT_CPU(OT_CPU &mdd)
17     {
18 francois 283 for (int i=0;i<mdd.tabcpu.size();i++)
19     tabcpu.insert(tabcpu.end(),mdd.tabcpu[i]);
20     for (int i=0;i<mdd.tabnom.size();i++)
21     tabnom.insert(tabnom.end(),mdd.tabnom[i]);
22 francois 277 }
23    
24     OT_CPU::~OT_CPU()
25     {
26     }
27    
28    
29     void OT_CPU::initialise(void)
30     {
31 francois 283 tabcpu.clear();
32     tabnom.clear();
33     tabcpu.insert(tabcpu.end(),clock());
34     tabnom.insert(tabnom.end(),"Initialisation");
35 francois 277 }
36    
37    
38 francois 410 double OT_CPU::ajouter_etape(std::string nom)
39 francois 277 {
40 francois 283 tabcpu.insert(tabcpu.end(),clock());
41     tabnom.insert(tabnom.end(),nom);
42 francois 410 double temps=tabcpu[tabcpu.size()-1]-tabcpu[tabcpu.size()-2];
43     return temps/CLOCKS_PER_SEC;
44 francois 277 }
45    
46     int OT_CPU::get_nb_etape(void)
47     {
48 francois 283 return tabcpu.size()-1;
49 francois 277 }
50    
51     void OT_CPU::get_etape(int num,std::string &nom,double &temps)
52     {
53 francois 283 temps=1.*(tabcpu[num]-tabcpu[num-1]);
54 francois 410 temps=temps*1./CLOCKS_PER_SEC;
55 francois 283 nom=tabnom[num];
56 francois 277 }
57    
58    
59     void OT_CPU::get_etape(std::string nom,double &temps)
60     {
61 francois 283 temps=0.;
62     for (int i=0;i<get_nb_etape();i++)
63     {
64     std::string nomtmp;
65     double tempstmp;
66     get_etape(i+1,nomtmp,tempstmp);
67     if (nomtmp==nom) temps=temps+tempstmp;
68     }
69 francois 277
70     }
71    
72     void OT_CPU::get_etape(int num1,int num2,std::string &nom,double &temps)
73     {
74 francois 283 temps=1.*(tabcpu[num2]-tabcpu[num1-1]);
75     temps=temps*1/CLOCKS_PER_SEC;
76     nom=tabnom[num1]+"-"+tabnom[num2];
77 francois 277 }
78    
79     void OT_CPU::get_total(int num,double &temps)
80     {
81 francois 283 temps=1.*(tabcpu[num]-tabcpu[0]);
82     temps=temps*1./CLOCKS_PER_SEC;
83 francois 277 }
84    
85    
86    
87     void OT_CPU::get_tabfinal(std::vector<std::string> &tab)
88     {
89 francois 283 tab.clear();
90     std::string nom;
91     double temps;
92     char mess[255];
93     for (int i=0;i<get_nb_etape();i++)
94     {
95     get_etape(i+1,nom,temps);
96     char mess[255];
97     sprintf(mess," %30s : %.2lf s",nom.c_str(),temps);
98     tab.insert(tab.end(),mess);
99     }
100     get_total(get_nb_etape(),temps);
101     nom="Total";
102     sprintf(mess," %30s : %.2lf s",nom.c_str(),temps);
103     tab.insert(tab.end(),mess);
104 francois 277 }
105    
106     void OT_CPU::get_tabfinalcompresse(std::vector<std::string> &tab)
107     {
108 francois 283 tab.clear();
109     std::string nom;
110     double temps;
111     char mess[255];
112     std::map<std::string,std::string> lst;
113     for (int i=0;i<get_nb_etape();i++)
114     {
115     get_etape(i+1,nom,temps);
116     std::map<std::string,std::string>::iterator it=lst.find(nom);
117     if (it==lst.end())
118     {
119     get_etape(nom,temps);
120     char mess[255];
121     sprintf(mess," %30s : %.2lf s",nom.c_str(),temps);
122     tab.insert(tab.end(),mess);
123     std::pair<std::string,std::string> tmp(nom,nom);
124     lst.insert(tmp);
125     }
126     }
127     get_total(get_nb_etape(),temps);
128     nom="Total";
129     sprintf(mess," %30s : %.2lf s",nom.c_str(),temps);
130     tab.insert(tab.end(),mess);
131 francois 277 }
132    
133    
134    
135     void OT_CPU::enregistrer(char* fichier)
136     {
137 francois 283 std::vector<std::string> tab1,tab2;
138     get_tabfinal(tab1);
139     get_tabfinalcompresse(tab2);
140     FILE *out=fopen(fichier,"rt");
141     for (int i=0;i<tab1.size();i++)
142     fprintf(out,"%s\n",(char*)tab1[i].c_str());
143     for (int i=0;i<tab2.size();i++)
144     fprintf(out,"%s\n",(char*)tab2[i].c_str());
145     fclose(out);
146 francois 277 }
147    
148 francois 532 void OT_CPU::affiche(void)
149     {
150     std::vector<std::string> tab1;
151     get_tabfinal(tab1);
152     for (int i=0;i<tab1.size();i++)
153     printf("%s\n",(char*)tab1[i].c_str());
154    
155     }
156    
157     void OT_CPU::affichecompresser(void)
158     {
159     std::vector<std::string> tab2;
160     get_tabfinalcompresse(tab2);
161     for (int i=0;i<tab2.size();i++)
162     printf("%s\n",(char*)tab2[i].c_str());
163     }
164