<HTML><BODY>Здравствуйте!<br><br>По поводу производительности Perl...<br><br>Привожу свой тестовый пример на Perl вместе с контрольным вариантом на C++.<br><br>CPU0: AMD Opteron 23xx (Gen 3 Class Opteron) stepping 01<br>perl -e 'use Benchmark qw/ timethese /; use List::Util qw/ sum /; use integer; my @arr = 0 .. 10_000_000 - 1; timethese(10, { FUNC => sub { sum @arr } });'<br>Benchmark: timing 10 iterations of FUNC...<br>      FUNC:  2 wallclock secs ( 1.75 usr +  0.01 sys =  1.76 CPU) @  5.68/s (n=10)<br><br>Т.е. 1/5.68 = 176ms<br><br>На том же процессоре такой код:<br><br>#include <time.h><br>#include <sys/types.h><br>#include <iostream><br>#define ARR_DIM 10000000<br>#define COUNT 100<br><br>using namespace std;<br><br>int main(void) {<br>    __uint32_t * arr = new __uint32_t[ARR_DIM];<br>    __uint64_t sum;<br><br>    int i;<br>    for( i = ARR_DIM-1; i >= 0; i--) {<br>        arr[i] = i;<br>    }<br><br>    clock_t start = clock();<br><br>    for (int count = COUNT; count > 0; count--) {<br>        sum = 0;<br>        for( i = ARR_DIM - 1; i >= 0; i--) {<br>            sum+=arr[i];<br>        }<br>    }<br><br>    clock_t end = clock();<br><br>    cout << "Time:(" << ((double)end-start)/(COUNT*CLOCKS_PER_SEC)*1000 << ")ms . Sum: " << sum << endl;<br><br>    delete arr;<br><br>    return 0;<br>}<br><br>g++ -O3 -march=native test.c -o test.exe && ./test.exe<br>Time:(13.4)ms . Sum: 49999995000000<br><br>Т.е. на данной конкретной задаче Perl в 13 раз медленнее C++.<br><br>С почтением,<br>  Илья Винокуров.<br><br><br>Вторник, 10 февраля 2015, 13:08 +03:00 от Илья Винокуров <ilvin@mail.ru>:<br>
<blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        <div id="">
        



    









        
        


        
        
        

        

        
        

        
        

        
        



<div class="js-helper js-readmsg-msg">
        <style type="text/css"></style>
        <div>
                <base target="_self" href="https://e.mail.ru/">
                
                        <div id="style_14235629570000000663_BODY">
Марку процессора укажите пожалуйста... :)<br><br>С почтением,<br>  Илья Винокуров.<br><br><br>Вторник, 10 февраля 2015, 5:22 +03:00 от Mons Anderson <v.perepelitsa@corp.mail.ru>:<br>
<blockquote style="border-left:1px solid #0857A6;margin:10px;padding:0 0 0 10px;">
        <div>
        



    









        
        


        
        
        

        

        
        

        
        

        
        



<div>
        
        <div>
                
                
                        <div><div style="margin: 0px;font-size: 13px;font-family: Monaco;color: rgb(245, 245, 245);background-color: rgb(0, 0, 0);"><div style="margin: 0px;"><span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">int</span> main (<span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">int</span> argc,<span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">char</span> **argv) {</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">long</span> <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">int</span> S = atoi(argv[<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">1</span>]);</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">long</span> <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">int</span> i,z;</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">clock_t</span> start = clock();</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">long</span> <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">int</span> sum = <span style="font-variant-ligatures: no-common-ligatures;color: #c33720">0</span>;</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #ce7924">for</span>(z = <span style="font-variant-ligatures: no-common-ligatures;color: #c33720">0</span>; z < <span style="font-variant-ligatures: no-common-ligatures;color: #c33720">1000</span>; z++ ){</div><div style="margin: 0px;">                sum = <span style="font-variant-ligatures: no-common-ligatures;color: #c33720">0</span>;</div><div style="margin: 0px;">                <span style="font-variant-ligatures: no-common-ligatures;color: #ce7924">for</span> (i=<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">0</span>;i < S - S % <span style="font-variant-ligatures: no-common-ligatures;color: #c33720">16</span>; i+=<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">16</span>) {</div><div style="margin: 0px;">                        sum += i   + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">1</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">2</span>  + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">3</span>  + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">4</span>  + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">5</span>  + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">6 </span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">7</span></div><div style="margin: 0px;">                            +  i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">8</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">9</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">10</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">11</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">12</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">13</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">14</span> + i+<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">15</span></div><div style="margin: 0px;">                        ;</div><div style="margin: 0px;">                }</div><div style="margin: 0px;">                <span style="font-variant-ligatures: no-common-ligatures;color: #ce7924">for</span> (i; i < S; i++ ) {</div><div style="margin: 0px;">                        sum += i;</div><div style="margin: 0px;">                }</div><div style="margin: 0px;">        }</div><div style="margin: 0px;">        <span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">clock_t</span> end = clock();</div><div style="margin: 0px;">        printf(<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">"</span><span style="font-variant-ligatures: no-common-ligatures;color: #d53bd3">%lu</span><span style="font-variant-ligatures: no-common-ligatures;color: #c33720"> (</span><span style="font-variant-ligatures: no-common-ligatures;color: #d53bd3">%0.8f</span><span style="font-variant-ligatures: no-common-ligatures;color: #c33720">)</span><span style="font-variant-ligatures: no-common-ligatures;color: #d53bd3">\n</span><span style="font-variant-ligatures: no-common-ligatures;color: #c33720">"</span>,sum,((<span style="font-variant-ligatures: no-common-ligatures;color: #34bd26">double</span>)end-start)/<span style="font-variant-ligatures: no-common-ligatures;color: #c33720">1e6</span>/z);</div><div style="margin: 0px;">}</div><div><br></div></div><div><br></div><div>1.5 ms</div><div><br></div><div>gcc --std=c99 -O3 -march=native</div><div><br></div><div><br></div><div apple-content-edited="true">
<div style="color: rgb(0, 0, 0);font-family: Helvetica;font-style: normal;font-variant: normal;font-weight: normal;letter-spacing: normal;line-height: normal;orphans: 2;text-align: -webkit-auto;text-indent: 0px;text-transform: none;white-space: normal;widows: 2;word-spacing: 0px;-webkit-text-size-adjust: auto;-webkit-text-stroke-width: 0px;word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space;"><div>-- </div><div>Mons Anderson</div><div><<a href="//e.mail.ru/compose/?mailto=mailto%3amons@cpan.org" target="_blank">mons@cpan.org</a>></div></div><br><br>
</div>
<br><div><blockquote type="cite"><div>On 9 февр. 2015 г., at 16:11, Михаил Монашёв <<a href="//e.mail.ru/compose/?mailto=mailto%3apostmaster@softsearch.ru" target="_blank">postmaster@softsearch.ru</a>> wrote:</div><br><div>Здравствуйте, Mons.<br><br><blockquote type="cite">Народ, я не осилил дочитать это всё до конца.<br>А давайте-ка соберёмся и померяемся.<br>Не в плане теории, а в плане конкретных чисел<br>сравним разные языки, подходы и т.п.<br></blockquote><br>А  собираться  обязательно?  Можно ведь и удалённо. Я на Go пишу всего<br>месяц  и  мне было бы сложно придти и что-то нормально на нём написать<br>за малое время. Но сравнить языки было бы интересно.<br><br>Предложу  простую  задачку,  которая  покажет,  насколько  хорошо язык<br>работает  с  памятью:  сложить  все  значения  массива,  состоящего из<br>10000000  целых чисел. Код там простой: создаём массив, заполняем его,<br>замеряем  время,  потом  в  цикле  складываем  элементы массива, снова<br>замеряем время и выдаём результат. Вот мой вариант на Go:<br><a href="https://play.golang.org/p/iHGG3nV10L" target="_blank">https://play.golang.org/p/iHGG3nV10L</a><br><br>Тонкости:  в песочнице код съедает много процессора и время там всегда<br>одно  и  то  же, поэтому его надо сохранить в файл, например main.go и<br>потом запустить вот так: go run main.go<br>Скомпилировать  в исполняемый файл можно вот так: go build main.go<br>А вот так выйдет более быстрая версия: go build -gcflags="-B" main.go<br>Скачать Go можно вот тут: <a href="http://golang.org/" target="_blank">http://golang.org/</a><br><br>-- <br>С уважением,<br> Михаил                          mailto:postmaster@softsearch.ru<br><br>-- <br>Moscow.pm mailing list<br>moscow-pm@pm.org | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br></div></blockquote></div><br></div>
                        <div>-- <br>
Moscow.pm mailing list<br>
<a target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div>
                
                
        </div>

        
</div>


</div>
</blockquote>
<br>
</div>
                        <div>-- <br>
Moscow.pm mailing list<br>
<a href="/compose?To=moscow%2dpm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div>
                
                <base target="_self" href="https://e.mail.ru/">
        </div>

        
</div>


</div>
</blockquote>
<br></BODY></HTML>