<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://nuitka.net/</id>
  <title>Nuitka Blog - Posts tagged benchmark</title>
  <updated>2026-07-13T17:30:41.252190+00:00</updated>
  <link href="https://nuitka.net/"/>
  <link href="https://nuitka.net/blog/tag/benchmark/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.13">ABlog</generator>
  <entry>
    <id>https://nuitka.net/posts/speedcenter-is-back.html</id>
    <title>Nuitka Speedcenter is back</title>
    <updated>2012-06-30T16:39:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="nuitka-speedcenter-is-back"&gt;

&lt;p&gt;Once a long time ago, I was benchmarking Nuitka more often. Check &lt;a class="reference external" href="/pages/overview.html"&gt;“What
is Nuitka?”&lt;/a&gt; in case you don’t know what it is.&lt;/p&gt;
&lt;section id="problem"&gt;
&lt;h2&gt;Problem&lt;/h2&gt;
&lt;p&gt;And I was considering the use of codespeed, and had some data online.
But ultimately, it got discontinued. This has 3 reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Moved the website to a dedicated machine, which broke the previous
install.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Controlling which data is used for display was hard and not
satisfactory.&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p&gt;For example, I didn’t want to have to commit and push, just to let
the benchmarks run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And I wanted to be able to re-run benchmarks with newer compiler,
even newer Python, but old Nuitka. Using g++ 4.6 over g++ 4.5
should not impact the data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It turned out to be a nightmare to migrate to newer codespeed
versions. I found myself starting from empty database - over and
over.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Many things were not supported.&lt;/p&gt;
&lt;p&gt;For example, I would want to collect all PyBench results, but only
publish those who are expressive. That seemed difficult to
achieve.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Benchmarks of Nuitka are not yet useful&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka was not yet doing type inference&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most of the work was aimed at correctness, and effectively was
often degrading performance even if only temporary. Seeing it
wouldn’t have been too motivating.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="solution"&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;I have simply created a small wrapper:&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p&gt;Small script to run benchmarks and collect data.&lt;/p&gt;
&lt;p&gt;It checks out Nuitka in all versions in a playground, and then runs
defined benchmarks, with valgrind, etc. taking exe sizes, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is stored in local sqlite databases.&lt;/p&gt;
&lt;p&gt;I have a database per machine, i.e. a distributed repository, where I
collect information. That works for me, and will allow me to compare
different kinds of machines.&lt;/p&gt;
&lt;p&gt;The advantage is that I have no risk of data loss anymore, and no
issues and difficulty with poor interfaces to replace existing data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is merged on one machine, and then pushed.&lt;/p&gt;
&lt;p&gt;That allows me to inspect the changes before publishing them. It
allows me to play with local commits, branches, with information that
will go away. I can then push when I choose to.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That integrates better with my work flow. It allows me to retro-fit
benchmarks results on the machine and to be tool independent.&lt;/p&gt;
&lt;p&gt;In principle, I could publish the data in other forms as well, and I
likely will. Making tables of e.g. PyBench results seems like one
application. Recently, I have worked with Nikola, and could also imagine
to integrate Codespeed graph functionality (which is apparently all I
want) to there.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;Yours,&lt;/div&gt;
&lt;div class="line"&gt;Kay&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/speedcenter-is-back.html"/>
    <summary>Once a long time ago, I was benchmarking Nuitka more often. Check “What
is Nuitka?” in case you don’t know what it is.</summary>
    <category term="Nikola" label="Nikola"/>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="benchmark" label="benchmark"/>
    <category term="compiler" label="compiler"/>
    <published>2012-06-30T16:39:00+02:00</published>
  </entry>
  <entry>
    <id>https://nuitka.net/posts/nuitka-on-pybench---good-and-bad.html</id>
    <title>Looking where Nuitka stands</title>
    <updated>2011-04-16T11:52:00+02:00</updated>
    <author>
      <name>Kay Hayen</name>
    </author>
    <content type="html">&lt;section id="looking-where-nuitka-stands"&gt;

&lt;p&gt;In case you wonder, [what Nuitka is](/pages/overview.html), look here.
Over the 0.3.x release cycle, I have mostly looked at its performance
with “pystone”. I merely wanted to have a target to look at and &lt;a class="reference external" href="/pages/performance.html"&gt;enjoy
the progress&lt;/a&gt; we have made there.&lt;/p&gt;
&lt;p&gt;In the context of the Windows port then, Khalid Abu Bakr used the
pybench on Windows and that got me interested. It’s a nice collection of
micro benchmarks, which is quite obviously aimed for looking CPython
implementations only. In that it’s quite good to check where Nuitka is
good at, and where it can still take improvements for the milestone 2
stuff.&lt;/p&gt;
&lt;section id="enhancements-to-pybench"&gt;
&lt;h2&gt;Enhancements to PyBench&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;The pybench refused to accept that Nuitka could use so little time on
some tests, I needed to hack it to allow it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then it had “ZeroDivisionError” exceptions, because Nuitka can run
fully predictable code not at all, thus with a time of 0ms, which
gives interesting factors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also these are many results, we are going to care for regressions
only, so there is an option now to output only tests with negative
values.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="the-interesting-parts"&gt;
&lt;h2&gt;The Interesting Parts&lt;/h2&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Nuitka currently has some fields where optimizations are already so
effective as to render the whole benchmark pointless. Longterm, most
of PyBench will not be looked at anymore, where the factor becomes
“infinity”, there is little point in looking at it. We will likely
just use it as a test that optimizations didn’t suddenly regress.
Publishing the numbers will not be as interesting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then there are slow downs. These I take seriously, because of course
I expect that Nuitka shall only be faster than CPython. Sometimes the
implementation of Nuitka for some rarely used features is sub par
though. I color coded these in red in the table below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ComplexPythonFunctionCalls: These are twice as slow, which is an
tribute to the fact, that the code in this domain is only as good as
it needs to be. Of course function calls are very important, and this
needs to be addressed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TryRaiseExcept: This is much slower because of the cost of the raise
statement, which is extremely high currently. For every raise, a
frame object with a specific code object is created, so the traceback
will point to the correct location. This is very inefficient, and
wasteful. We need to be able to create code objects that can be used
for all lines needed, and then we can re-use it and only have one
frame object per function, which then can be re-used itself. There is
already some work for that in [current git](/doc/download.html)
(0.3.9 pre 2), but it’s not yet complete at all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WithRaiseExcept: Same problem as TryRaiseExcept, the exception
raising is too expensive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note also that -90% is in fact much worse that +90%, the “diff”
numbers from pybench make improvements look much better than
regressions do. You can also checkout the comparison on the new
[benchmark pages](&lt;a class="reference external" href="https://speedcenter.nuitka.net"&gt;https://speedcenter.nuitka.net&lt;/a&gt;) that I am just
creating, they are based on codespeed, which I will blog upon
separately.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at this table of results as produced by pybench:&lt;/p&gt;
&lt;/section&gt;
&lt;section id="benchmark-results"&gt;
&lt;h2&gt;Benchmark Results&lt;/h2&gt;
&lt;table summary="Comparing CPython and Nuitka with PyBench"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;Test Name&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;min CPython&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;min Nuitka&lt;/span&gt;**&lt;/td&gt;
&lt;td&gt;**&lt;span style="color: #000000;"&gt;di&lt;/span&gt;&lt;span style="color: #000000;"&gt;ff&lt;/span&gt;**&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BuiltinFunctionCalls&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;54ms&lt;/td&gt;
&lt;td&gt;+41.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BuiltinMethodLookup&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+22.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareFloats&lt;/td&gt;
&lt;td&gt;79ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareFloatsIntegers&lt;/td&gt;
&lt;td&gt;75ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareIntegers&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareInternedStrings&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;32ms&lt;/td&gt;
&lt;td&gt;+113.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareLongs&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+inf%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareStrings&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+38.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CompareUnicode&lt;/td&gt;
&lt;td&gt;61ms&lt;/td&gt;
&lt;td&gt;50ms&lt;/td&gt;
&lt;td&gt;+21.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ComplexPythonFunctionCalls&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;179ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-52.3%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ConcatStrings&lt;/td&gt;
&lt;td&gt;98ms&lt;/td&gt;
&lt;td&gt;99ms&lt;/td&gt;
&lt;td&gt;-0.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ConcatUnicode&lt;/td&gt;
&lt;td&gt;127ms&lt;/td&gt;
&lt;td&gt;124ms&lt;/td&gt;
&lt;td&gt;+2.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateInstances&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;52ms&lt;/td&gt;
&lt;td&gt;+46.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateNewInstances&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+22.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateStringsWithConcat&lt;/td&gt;
&lt;td&gt;85ms&lt;/td&gt;
&lt;td&gt;90ms&lt;/td&gt;
&lt;td&gt;-6.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreateUnicodeWithConcat&lt;/td&gt;
&lt;td&gt;74ms&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;+9.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictCreation&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;36ms&lt;/td&gt;
&lt;td&gt;+60.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithFloatKeys&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;44ms&lt;/td&gt;
&lt;td&gt;+51.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithIntegerKeys&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;30ms&lt;/td&gt;
&lt;td&gt;+113.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DictWithStringKeys&lt;/td&gt;
&lt;td&gt;60ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;+130.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ForLoops&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;15ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+216.2%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IfThenElse&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;16ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+322.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ListSlicing&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;70ms&lt;/td&gt;
&lt;td&gt;-0.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NestedForLoops&lt;/td&gt;
&lt;td&gt;72ms&lt;/td&gt;
&lt;td&gt;25ms&lt;/td&gt;
&lt;td&gt;+187.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NestedListComprehensions&lt;/td&gt;
&lt;td&gt;87ms&lt;/td&gt;
&lt;td&gt;42ms&lt;/td&gt;
&lt;td&gt;+105.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalClassAttribute&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;77ms&lt;/td&gt;
&lt;td&gt;-18.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NormalInstanceAttribute&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;24ms&lt;/td&gt;
&lt;td&gt;+129.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PythonFunctionCalls&lt;/td&gt;
&lt;td&gt;72ms&lt;/td&gt;
&lt;td&gt;34ms&lt;/td&gt;
&lt;td&gt;+116.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PythonMethodCalls&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;38ms&lt;/td&gt;
&lt;td&gt;+120.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recursion&lt;/td&gt;
&lt;td&gt;97ms&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;+73.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondImport&lt;/td&gt;
&lt;td&gt;61ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+31.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondPackageImport&lt;/td&gt;
&lt;td&gt;66ms&lt;/td&gt;
&lt;td&gt;29ms&lt;/td&gt;
&lt;td&gt;+125.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SecondSubmoduleImport&lt;/td&gt;
&lt;td&gt;86ms&lt;/td&gt;
&lt;td&gt;32ms&lt;/td&gt;
&lt;td&gt;+172.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleComplexArithmetic&lt;/td&gt;
&lt;td&gt;74ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+18.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleDictManipulation&lt;/td&gt;
&lt;td&gt;65ms&lt;/td&gt;
&lt;td&gt;35ms&lt;/td&gt;
&lt;td&gt;+89.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleFloatArithmetic&lt;/td&gt;
&lt;td&gt;77ms&lt;/td&gt;
&lt;td&gt;56ms&lt;/td&gt;
&lt;td&gt;+39.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleIntFloatArithmetic&lt;/td&gt;
&lt;td&gt;58ms&lt;/td&gt;
&lt;td&gt;39ms&lt;/td&gt;
&lt;td&gt;+48.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleIntegerArithmetic&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;37ms&lt;/td&gt;
&lt;td&gt;+57.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleListComprehensions&lt;/td&gt;
&lt;td&gt;75ms&lt;/td&gt;
&lt;td&gt;33ms&lt;/td&gt;
&lt;td&gt;+128.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleListManipulation&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;27ms&lt;/td&gt;
&lt;td&gt;+109.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SimpleLongArithmetic&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;+19.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmallLists&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;41ms&lt;/td&gt;
&lt;td&gt;+66.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SmallTuples&lt;/td&gt;
&lt;td&gt;66ms&lt;/td&gt;
&lt;td&gt;98ms&lt;/td&gt;
&lt;td&gt;-32.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpecialClassAttribute&lt;/td&gt;
&lt;td&gt;63ms&lt;/td&gt;
&lt;td&gt;49ms&lt;/td&gt;
&lt;td&gt;+29.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpecialInstanceAttribute&lt;/td&gt;
&lt;td&gt;130ms&lt;/td&gt;
&lt;td&gt;24ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+434.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringMappings&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;62ms&lt;/td&gt;
&lt;td&gt;+8.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringPredicates&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;+16.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;StringSlicing&lt;/td&gt;
&lt;td&gt;73ms&lt;/td&gt;
&lt;td&gt;47ms&lt;/td&gt;
&lt;td&gt;+54.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryExcept&lt;/td&gt;
&lt;td&gt;57ms&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+3821207.1%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryFinally&lt;/td&gt;
&lt;td&gt;65ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;+153.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TryRaiseExcept&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;610ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-89.5%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TupleSlicing&lt;/td&gt;
&lt;td&gt;76ms&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;+12.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeMappings&lt;/td&gt;
&lt;td&gt;88ms&lt;/td&gt;
&lt;td&gt;91ms&lt;/td&gt;
&lt;td&gt;-2.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodePredicates&lt;/td&gt;
&lt;td&gt;64ms&lt;/td&gt;
&lt;td&gt;59ms&lt;/td&gt;
&lt;td&gt;+8.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeProperties&lt;/td&gt;
&lt;td&gt;69ms&lt;/td&gt;
&lt;td&gt;63ms&lt;/td&gt;
&lt;td&gt;+8.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UnicodeSlicing&lt;/td&gt;
&lt;td&gt;80ms&lt;/td&gt;
&lt;td&gt;68ms&lt;/td&gt;
&lt;td&gt;+17.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WithFinally&lt;/td&gt;
&lt;td&gt;84ms&lt;/td&gt;
&lt;td&gt;26ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #339966;"&gt;+221.2%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WithRaiseExcept&lt;/td&gt;
&lt;td&gt;67ms&lt;/td&gt;
&lt;td&gt;1178ms&lt;/td&gt;
&lt;td&gt;&lt;span style="color: #ff0000;"&gt;-94.3%&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/section&gt;
&lt;/section&gt;
</content>
    <link href="https://nuitka.net/posts/nuitka-on-pybench---good-and-bad.html"/>
    <summary>In case you wonder, [what Nuitka is](/pages/overview.html), look here.
Over the 0.3.x release cycle, I have mostly looked at its performance
with “pystone”. I merely wanted to have a target to look at and enjoy
the progress we have made there.</summary>
    <category term="Nuitka" label="Nuitka"/>
    <category term="Python" label="Python"/>
    <category term="benchmark" label="benchmark"/>
    <category term="compiler" label="compiler"/>
    <published>2011-04-16T11:52:00+02:00</published>
  </entry>
</feed>
