<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";}
p.msonormal0, li.msonormal0, div.msonormal0
{mso-style-name:msonormal;
mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:"Consolas",serif;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="SV" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Yeah, that makes sense. Or, it was about what I expected at least. It is a pity though, as handling thousands of filters isn’t necessarily a strange thing to do with a software like Scilab, and making a special serialization
like that would be nothing less than a hack.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Do you think there is a way forward under the hood that could make big deep list structures >10x faster in the future? Otherwise, the whole object orientation part of Scilab (tlist and mlist etc.) would be hard to use
for anything that comes in large numbers, which would be a shame, especially as it used to work just fine (well, I can see how the old structure wasn’t “just fine” in other ways, but still).<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Cheers,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Arvid<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-left:36.0pt"><b><span lang="EN-US" style="font-size:12.0pt;color:black">From:
</span></b><span lang="EN-US" style="font-size:12.0pt;color:black">users <users-bounces@lists.scilab.org> on behalf of Stéphane Mottelet <stephane.mottelet@utc.fr><br>
<b>Organization: </b>Université de Technologie de Compiègne<br>
<b>Reply-To: </b>Users mailing list for Scilab <users@lists.scilab.org><br>
<b>Date: </b>Monday, 15 October 2018 at 14:37<br>
<b>To: </b>"users@lists.scilab.org" <users@lists.scilab.org><br>
<b>Subject: </b>Re: [Scilab-users] HDF5 save is super slow<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:36.0pt"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal" style="margin-left:36.0pt">Hello,<br>
<br>
I looked a little bit in the sources: the evident bottleneck is the nested creation of an hdf5 group each time that a container variable is met.<br>
For the given example, this is particularly evident. If you replace the syslin structure by the corresponding [A,B;C,D] matrix, then save is ten times faster:<br>
<br>
N = 4;<br>
n = 1000;<br>
filters = list();<br>
for i=1:n<br>
G=syslin('c', rand(N,N), rand(N,1), rand(1,N), rand(1,1));<br>
filters($+1) = G;<br>
end<br>
tic();<br>
save('filters.dat', 'filters');<br>
disp(toc());<br>
--> disp(toc());<br>
<br>
0.724754<br>
<br>
N = 4;<br>
n = 1000;<br>
filters = list()<br>
for i=1:n<br>
G=syslin('c', rand(N,N), rand(N,1), rand(1,N), rand(1,1));<br>
filters($+1) = [G.a G.b;G.c G.d];<br>
end<br>
tic();<br>
save('filters.dat', 'filters');<br>
disp(toc());<br>
--> disp(toc());<br>
<br>
0.082302<br>
<br>
Serializing container objects seems to be the solution, but it goes towards an orthogonal direction w.r.t. the hdf5 portability spirit.<br>
<br>
S.<br>
<br>
<br>
Le 15/10/2018 à 12:22, Antoine Monmayrant a écrit :<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="margin-left:36.0pt">Le 15/10/2018 à 11:55, Arvid Rosén a écrit :<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Hi,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Thanks for getting back to me!</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Unfortunately, we used Scilab’s pretty cool way of doing object orientation, so we have big nested tlist structures with multiple instances of various lists of filters and other structures, as in my example. Saving those structures in some
explicit manual way would be extremely complicated. Or is there some way of writing explicit HDF5 saving/loading schemes using overloading? That would be great! I am sure we could find the main culprits and do something explicit for them, but as they can be
located wherever in a big nested structure, it would be painful to do anything on the top level.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Another, related I guess, problem here is that the new file format uses about 15 times as much disk space as the old format (for a typical ill-behaved nested structure). That adds to the save/load time too I guess, but is probably not the
main source here.</span><o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal" style="margin-left:36.0pt">Argh, yes, I tested it and in your example, I have a file x8.5 bigger.<br>
I think that both increases in time and size are real issues and should be reported as bugs.<br>
<br>
By the way, I rewrote your script to run it under both 6.0 and 5.5:<br>
<br>
/////////////////////////////////<br>
N = 4;<br>
n = 10000;<br>
filters = list();<br>
<br>
for i=1:n<br>
G=syslin('c', rand(N,N), rand(N,1), rand(1,N), rand(1,1));<br>
filters($+1) = G;<br>
end<br>
<br>
ver=getversion('scilab');<br>
<br>
if ver(1)<6 then<br>
tic();<br>
save('filters_old.dat', filters);<br>
ts1 = toc();<br>
else<br>
tic();<br>
save('filters_new.dat', 'filters');<br>
ts1 = toc(); <br>
end<br>
<br>
printf("Time for save %.2fs\n", ts1);<br>
/////////////////////////////////<br>
<br>
Hope it helps,<br>
<br>
Antoine<br>
<br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">I think I might have reported this earlier using Bugzilla, but I’m not sure. I’ll check and report it if not.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Cheers,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US">Arvid</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:36.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<b><span lang="EN-US" style="font-size:12.0pt;color:black">From: </span></b><span lang="EN-US" style="font-size:12.0pt;color:black">users
<a href="mailto:users-bounces@lists.scilab.org"><users-bounces@lists.scilab.org></a> on behalf of
<a href="mailto:amonmayr@laas.fr">"amonmayr@laas.fr"</a> <a href="mailto:amonmayr@laas.fr">
<amonmayr@laas.fr></a><br>
<b>Reply-To: </b><a href="mailto:antoine.monmayrant@laas.fr">"antoine.monmayrant@laas.fr"</a>
<a href="mailto:antoine.monmayrant@laas.fr"><antoine.monmayrant@laas.fr></a>, Users mailing list for Scilab
<a href="mailto:users@lists.scilab.org"><users@lists.scilab.org></a><br>
<b>Date: </b>Monday, 15 October 2018 at 11:08<br>
<b>To: </b><a href="mailto:users@lists.scilab.org">"users@lists.scilab.org"</a> <a href="mailto:users@lists.scilab.org">
<users@lists.scilab.org></a><br>
<b>Subject: </b>Re: [Scilab-users] HDF5 save is super slow</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
Hello,<br>
<br>
I tried your code in 5.5.1 and the last nightly-build of 6.0: I see a slowdown of around 175 between old save in 5.5.1 and new (and only) save in 6.0.<br>
It's really related to the data structure, because we use hdf5 read/write a lot here and did not experience significant slowdowns using 6.0.<br>
I think the overhead might come to the translation of your fairly complex variable (a long array of tlist) in the corresponding hdf5 structure.<br>
In the old save, this translation was not necessary.<br>
Maybe you could try to save your data in a different way.<br>
For example:<br>
3) you could save each element of "filters" in a separate file.<br>
2) you could bypass save and directly write your data in a hdf5 file by using h5open(), h5write() directly. It means you need to write your own load() for your custom file format. But this way, you can try to find the best way to layout your data in hdf5 format.<br>
3) in addition to 2) you could try to save each entry of your "filters" array as one dataset in a given hdf5 file.<br>
<br>
Did you search on bugzilla whether this bug was already submitted?<br>
Could you try to report it?<br>
<br>
<br>
Antoine<br>
<br>
Le 15/10/2018 à 10:11, Arvid Rosén a écrit :<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">/////////////////////////////////</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">N = 4;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">n = 10000;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">filters = list();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">for i=1:n</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> G=syslin('c', rand(N,N), rand(N,1), rand(1,N), rand(1,1));</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> filters($+1) = G;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">end</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">tic();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">save('filters.dat', filters);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">ts1 = toc();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">tic();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">save('filters.dat', 'filters');</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">ts2 = toc();</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New""> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">printf("old save %.2fs\n", ts1);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">printf("new save %.2fs\n", ts2);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">printf("slowdown %.1f\n", ts2/ts1);</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:72.0pt">
<span lang="EN-US" style="font-family:"Courier New"">/////////////////////////////////</span><o:p></o:p></p>
</blockquote>
<p style="margin-left:72.0pt"> <o:p></o:p></p>
<pre style="margin-left:72.0pt">-- <o:p></o:p></pre>
<pre style="margin-left:72.0pt">+++++++++++++++++++++++++++++++++++++++++++++++++++++++<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <o:p></o:p></pre>
<pre style="margin-left:72.0pt"> Antoine Monmayrant LAAS - CNRS<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> 7 avenue du Colonel Roche<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> BP 54200<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> 31031 TOULOUSE Cedex 4<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> FRANCE<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <a href="Tel:+33">Tel:+33</a> 5 61 33 64 59<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <o:p></o:p></pre>
<pre style="margin-left:72.0pt"> email : <a href="mailto:antoine.monmayrant@laas.fr">antoine.monmayrant@laas.fr</a><o:p></o:p></pre>
<pre style="margin-left:72.0pt"> permanent email : <a href="mailto:antoine.monmayrant@polytechnique.org">antoine.monmayrant@polytechnique.org</a><o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <o:p></o:p></pre>
<pre style="margin-left:72.0pt">+++++++++++++++++++++++++++++++++++++++++++++++++++++++<o:p></o:p></pre>
<pre style="margin-left:72.0pt"> <o:p></o:p></pre>
</div>
</blockquote>
<p style="margin-left:36.0pt"><o:p> </o:p></p>
<pre style="margin-left:36.0pt">-- <o:p></o:p></pre>
<pre style="margin-left:36.0pt">+++++++++++++++++++++++++++++++++++++++++++++++++++++++<o:p></o:p></pre>
<pre style="margin-left:36.0pt"><o:p> </o:p></pre>
<pre style="margin-left:36.0pt"> Antoine Monmayrant LAAS - CNRS<o:p></o:p></pre>
<pre style="margin-left:36.0pt"> 7 avenue du Colonel Roche<o:p></o:p></pre>
<pre style="margin-left:36.0pt"> BP 54200<o:p></o:p></pre>
<pre style="margin-left:36.0pt"> 31031 TOULOUSE Cedex 4<o:p></o:p></pre>
<pre style="margin-left:36.0pt"> FRANCE<o:p></o:p></pre>
<pre style="margin-left:36.0pt"><o:p> </o:p></pre>
<pre style="margin-left:36.0pt"> <a href="Tel:+33">Tel:+33</a> 5 61 33 64 59<o:p></o:p></pre>
<pre style="margin-left:36.0pt"> <o:p></o:p></pre>
<pre style="margin-left:36.0pt"> email : <a href="mailto:antoine.monmayrant@laas.fr">antoine.monmayrant@laas.fr</a><o:p></o:p></pre>
<pre style="margin-left:36.0pt"> permanent email : <a href="mailto:antoine.monmayrant@polytechnique.org">antoine.monmayrant@polytechnique.org</a><o:p></o:p></pre>
<pre style="margin-left:36.0pt"><o:p> </o:p></pre>
<pre style="margin-left:36.0pt">+++++++++++++++++++++++++++++++++++++++++++++++++++++++<o:p></o:p></pre>
<pre style="margin-left:36.0pt"><o:p> </o:p></pre>
<p class="MsoNormal" style="margin-left:36.0pt"><br>
<br>
<br>
<o:p></o:p></p>
<pre style="margin-left:36.0pt">_______________________________________________<o:p></o:p></pre>
<pre style="margin-left:36.0pt">users mailing list<o:p></o:p></pre>
<pre style="margin-left:36.0pt"><a href="mailto:users@lists.scilab.org">users@lists.scilab.org</a><o:p></o:p></pre>
<pre style="margin-left:36.0pt"><a href="https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users">https://antispam.utc.fr/proxy/1/c3RlcGhhbmUubW90dGVsZXRAdXRjLmZy/lists.scilab.org/mailman/listinfo/users</a><o:p></o:p></pre>
</blockquote>
<p style="margin-left:36.0pt"><o:p> </o:p></p>
<pre style="margin-left:36.0pt">-- <o:p></o:p></pre>
<pre style="margin-left:36.0pt">Stéphane Mottelet<o:p></o:p></pre>
<pre style="margin-left:36.0pt">Ingénieur de recherche<o:p></o:p></pre>
<pre style="margin-left:36.0pt">EA 4297 Transformations Intégrées de la Matière Renouvelable<o:p></o:p></pre>
<pre style="margin-left:36.0pt">Département Génie des Procédés Industriels<o:p></o:p></pre>
<pre style="margin-left:36.0pt">Sorbonne Universités - Université de Technologie de Compiègne<o:p></o:p></pre>
<pre style="margin-left:36.0pt">CS 60319, 60203 Compiègne cedex<o:p></o:p></pre>
<pre style="margin-left:36.0pt">Tel : +33(0)344234688<o:p></o:p></pre>
<pre style="margin-left:36.0pt"><a href="http://www.utc.fr/%7Emottelet">http://www.utc.fr/~mottelet</a><o:p></o:p></pre>
</div>
</div>
</body>
</html>