<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>