<html 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;}
/* 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:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="ES" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Thank you for your response, Vladimir.<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">> Could you please provide detailed step-by-step instructions on how you  got those results, or (ideally) a self-contained benchmark that would expose that difference?<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">I coded a simple example that performs three compress-decompress cycles, measuring only the compression time and ignoring the I/O one. It can be found here
<a href="https://github.com/SergioLuis/lz4-unsafe-performance-test" target="_BLANK">
https://github.com/SergioLuis/lz4-unsafe-performance-test</a><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">The file I used to run the test is a ~100MB one that is representative of the kind of data we need to compress, in order to make the results relevant. It can be found here
<a href="https://www.dropbox.com/s/zo7imitrn5ka4ss/datasample.bin?dl=0" target="_BLANK">
https://www.dropbox.com/s/zo7imitrn5ka4ss/datasample.bin?dl=0</a> if you want to repeat the test in the exact same conditions.<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">I repeated the tests on three virtual machines (Windows 8.1 x64, Fedora 20 x86, Ubuntu 15.04 x64) with the exact same configuration (4 virtual cores, 2GB RAM) on a Intel Core i7 4790 CPU.<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">These are the results from the Windows VM (.NET 4.5.1)<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 422 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 63 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 562 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 47 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 563 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 47 ms.<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>
<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>
<p class="MsoNormal"><span lang="EN-US">These are the results from the Fedora 20 machine under Mono 4.3.0 without LLVM<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">[tester@localhost ~]$ /opt/plasticscm5/mono/bin/mono LZ4UnsafePerformanceTest.exe datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 1954 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 69 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1149 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 67 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1118 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 66 ms.<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>
<p class="MsoNormal"><span lang="EN-US">[tester@localhost ~]$ /opt/plasticscm5/mono/bin/mono -V<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Mono JIT compiler version 4.3.0 (tarball Wed Nov 25 17:41:18 UTC 2015)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    TLS:           __thread<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    SIGSEGV:       altstack<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Notifications: epoll<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Architecture:  x86<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Disabled:      none<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Misc:          softdebug <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    LLVM:          supported, not enabled.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    GC:            sgen<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">These are the results on the exact same machine under Mono 2.10.8<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">[tester@localhost ~]$ mono --llvm LZ4UnsafePerformanceTest.exe datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 621 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 66 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 623 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 65 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 619 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 65 ms.<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>
<p class="MsoNormal"><span lang="EN-US">[tester@localhost ~]$ mono -V<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Mono JIT compiler version 2.10.8 (tarball Sat Aug  3 13:21:11 UTC 2013)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    TLS:           __thread<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    SIGSEGV:       altstack<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Notifications: epoll<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Architecture:  x86<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Disabled:      none<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Misc:          debugger softdebug <o:p>
</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    LLVM:          supported, not enabled.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    GC:            Included Boehm (with typed GC and Parallel Mark)<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">As you can see, Mono 2.10.8 runs the tests in almost half the time than 4.3.0.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">These are the results on a Ubuntu 15.04 machine with Mono 3.2.8<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">tester@ubuntu:~/Desktop$ mono --nollvm --sgen LZ4UnsafePerformanceTest.exe datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 1193 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 99 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 938 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 98 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1203 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 99 ms.<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>
<p class="MsoNormal"><span lang="EN-US">tester@ubuntu:~/Desktop$ mono --llvm --sgen LZ4UnsafePerformanceTest.exe datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 968 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 99 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 953 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 97 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1202 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 96 ms.<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>
<p class="MsoNormal"><span lang="EN-US">tester@ubuntu:~/Desktop$ mono -V<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4ubuntu4)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  TLS: __thread<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  SIGSEGV: altstack<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  Notifications: epoll<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  Architecture: amd64<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  Disabled: none<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  Misc: softdebug<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  LLVM: supported, not enabled.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  GC: sgen<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Because none of the above had LLVM support on the available Mono installations, I cloned the Mono and LLVM repositories and compiled and installed them from source, following these instructions in order to enable LLVM
 support. <a href="http://www.mono-project.com/docs/advanced/mono-llvm/" target="_BLANK">
http://www.mono-project.com/docs/advanced/mono-llvm/</a><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">These are the results, with and without LLVM, on a virtual machine running Lubuntu 15.04 (4 virtual processor on a Intel Core i5 3337U), using Mono 4.3.3<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">sergio@sergio-VirtualBox:~/Descargas$ mono LZ4UnsafePerformanceTest.exe Release/datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 1718 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 189 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1678 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 164 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 1620 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 163 ms.<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>
<p class="MsoNormal"><span lang="EN-US">sergio@sergio-VirtualBox:~/Descargas$ mono --llvm LZ4UnsafePerformanceTest.exe Release/datasample.bin<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Compressed 104000707 bytes to 73555650 bytes in 381 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 71 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 330 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 47 ms.<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">Compressed 104000707 bytes to 73555650 bytes in 338 ms.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Decompressed 73555650 bytes to 104000707 bytes in 48 ms.<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">sergio@sergio-VirtualBox:~/Descargas$ mono -V<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Mono JIT compiler version 4.3.3 (master/6fae7c2 vie feb 12 00:09:47 CET 2016)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    TLS:           __thread<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    SIGSEGV:       altstack<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Notifications: epoll<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Architecture:  amd64<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Disabled:      none<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    Misc:          softdebug<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    LLVM:          yes(3.6.0svn-mono-master/9f79399)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    GC:            sgen<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>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">So, apparently LLVM does the trick</span> (where available)<span lang="EN-US">, but without it, performance is severely affected for the C# unsafe code. I'm quite surprised about the results on the fedora 20 machine with
 Mono 2.10.8, impressively fast compared to the ones that Mono 4.3.0 achieved on the very same machine.<o:p></o:p></span></p>
</div>
</body>
</html>