<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=us-ascii">
<meta name=Generator content="Microsoft Word 12 (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:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","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;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>The default scope is the default for that particular piece of
code. What we do is generate a .NET type which has a bunch of static fields in
it – 1 for each global that is accessed. The compiled code then can access
these directly and we wrap this all up in a Python dictionary object for late
bound access. When you run against a non-default scope we have to run against
a piece of code which is compiled to lookup all the globals from a real dictionary.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>It’ll be interesting to hear what you find out what you can
narrow it down to.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@lists.ironpython.com [mailto:users-bounces@lists.ironpython.com] <b>On
Behalf Of </b>Ronnie Maor<br>
<b>Sent:</b> Monday, September 29, 2008 12:16 AM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] IPyb5 performance<o:p></o:p></span></p>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<div>
<p class=MsoNormal style='margin-bottom:12.0pt'>thanks for the help.<br>
I tried both suggestions, but unfortunately it didn't change anything.<br>
<br>
I now use a benchmark that builds a typical setup and then checks performance
of calculations in steady state:<br>
Ipy 1.1.1: total time: 80 sec. single "compute actions": 0.23 sec<br>
Ipy 2.0b5: total time: 200 sec. single "compute actions": 1.2 sec<br>
<br>
I believe the changes didn't help because most of the code is python, so the
main is just the "tip of the iceberg". The main file is 64 lines and
the code it launches is about 15K lines. IIUC what Dino said, the changes you
proposed only affect how the 64 lines are run. The rest are compiled when they
are imported (directly or indirectly by the main module) and run in their own
scopes.<br>
<br>
the good and bad news is that for steady state the degradation is 600%. The
good part is that maybe it's this bad because I'm using one or two flows which
have a very specific and silly problem (like the **kw which you fixed already).<br>
I will try to focus the problem better once I've gotten over Rosh Hashana
dinner :-)<br>
<br>
btw, the only way I found to get the default scope was through
CompiledCode.DefaultScope. Expected it to be accessible directly from the
engine. Is there are reason it's not? (or have I just missed it)<br>
<br>
thanks<br>
Ronnie<o:p></o:p></p>
<div>
<p class=MsoNormal>On Mon, Sep 29, 2008 at 2:55 AM, Dino Viehland <<a
href="mailto:dinov@microsoft.com">dinov@microsoft.com</a>> wrote:<o:p></o:p></p>
<div>
<div>
<p><span style='font-size:11.0pt;color:#1F497D'>Also not passing a scope is
probably bound to help – especially if the perf critical code is in this file
and accesses lots of globals. Do .Compile, get the DefaultScope, update
that w/ the vars you want set, and then just do .Execute().</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<div>
<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color -moz-use-text-color'>
<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Jimmy Schementi<br>
<b>Sent:</b> Sunday, September 28, 2008 1:32 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] IPyb5 performance</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p> <o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>Make that last line call
compile and see if it helps. When the Silverlight integration was written that
gave a 4x speedup when using top-level functions/variables:</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>source.Compile().Execute(mainScope);</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>Not sure if that's the case
anymore, but it's worth a try.</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'>~js</span><o:p></o:p></p>
<p><span style='font-size:11.0pt;color:#1F497D'> </span><o:p></o:p></p>
<div style='border:none;border-left:solid windowtext 1.5pt;padding:0in 0in 0in 4.0pt;
border-color:-moz-use-text-color -moz-use-text-color -moz-use-text-color blue'>
<div>
<div style='border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;
border-color:-moz-use-text-color -moz-use-text-color'>
<p><b><span style='font-size:10.0pt'>From:</span></b><span style='font-size:
10.0pt'> <a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>
[mailto:<a href="mailto:users-bounces@lists.ironpython.com" target="_blank">users-bounces@lists.ironpython.com</a>]
<b>On Behalf Of </b>Ronnie Maor<br>
<b>Sent:</b> Saturday, September 27, 2008 11:22 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> [IronPython] IPyb5 performance</span><o:p></o:p></p>
</div>
</div>
<p> <o:p></o:p></p>
<div>
<p style='margin-bottom:12.0pt'>Hi all,<br>
<br>
I've finally managed to get my code running correctly under IPy2b5 - thanks
everyone who helped!<br>
<br>
I'm now left with a performance problem. My code seems to run roughly 2 times
slower:<br>
* infra tests regressed from 19 seconds in IPy 1.1.1 to 33 seconds in IPy2b5<br>
* application level tests regressed from 375 seconds in 1.1.1 to 705 seconds in
IPy2b5<br>
(these are single measurements, but variance is not too big - about 5%)<br>
startup time is also much longer, but I can live with that.<br>
<br>
before trying to pinpoint the bottlenecks, I wanted to check I'm not missing
something stupid, like turning on optimizations in the DLR...<br>
below is the hosting code I'm using to run the tests. I tried with and without
"Debug" flag, and it doesn't seem to change anything (except debug
allows me to understand the stack traces). I can also run the infra tests with
ipy directly, which showed that -O and -OO don't help either.<br>
<br>
Is there something else I should be doing? any tips?<br>
thanks!<br>
<br>
// set up runtime and engine<br>
Dictionary<string, object> runtimeOptions = new Dictionary<string,
object>();<br>
runtimeOptions["Debug"] = true;<br>
ScriptRuntime runtime = IronPython.Hosting.Python.CreateRuntime(runtimeOptions);<br>
runtime.LoadAssembly(typeof(String).Assembly); // Add reference to System<br>
runtime.LoadAssembly(typeof(Uri).Assembly); // Add reference to mscorlib<br>
engine =
runtime.GetEngine("Python");<br>
....<br>
<br>
// run file as __main__<br>
engine.SetSearchPaths(new string[] {".", progdir, backend_dir,
stdlib_dir});<br>
<br>
List argv =
new List();<br>
argv.append(filename);<br>
for (int i =
2; i < args.Length; ++i)<br>
argv.append(args[i]);<br>
engine.GetSysModule().SetVariable("argv", argv);<br>
<br>
mainScope =
engine.CreateScope();<br>
mainScope.SetVariable("__name__", "__main__");<br>
var
main_module = Microsoft.Scripting.Hosting.Providers.HostingHelpers.GetScope(mainScope);<br>
runtime.Globals.SetVariable("__main__", main_module);<br>
mainScope.SetVariable("__file__",filename);<br>
<br>
ScriptSource
source = engine.CreateScriptSourceFromFile(filename, Encoding.Default,
SourceCodeKind.Statements);<br>
source.Execute(mainScope);<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class=MsoNormal style='margin-bottom:12.0pt'><br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com"
target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><o:p></o:p></p>
</div>
<p class=MsoNormal><o:p> </o:p></p>
</div>
</div>
</body>
</html>