<div dir="ltr"><div><br></div>Потестил на более менее современной тачке... вариант Монса у меня сегфолтится почему-то, прогнал слегка модифицированный из пред комментов<br><br><div>#include <stdio.h></div><div>#include <time.h></div><div>#include <stdlib.h></div><div>#include <stdint.h></div><div>#include <inttypes.h></div><div><br></div><div>int main()</div><div>{</div><div>        uint32_t *arr;</div><div>        arr  = (uint32_t *) malloc(10000000 * sizeof(uint32_t));</div><div><br></div><div>        int i,z;</div><div>        for( i=0; i<10000000; i++) {</div><div>                arr[i] = i;</div><div>        }</div><div><br></div><div>        clock_t start = clock();</div><div>        uint64_t sum;</div><div><br></div><div>        for(z = 0; z < 100; z++ ){</div><div>            sum = 0;</div><div>            for( i=0; i<10000000; i++) {</div><div>                            sum+=arr[i];</div><div>            }</div><div>        }</div><div><br></div><div>        clock_t end = clock();</div><div>        printf("Time:(%0.8f)ms . Sum: %" PRIu64, ((double)end-start)*1000/CLOCKS_PER_SEC/z, sum);</div><div><br></div><div>        return 0;</div><div>}</div><div><br></div><div>$ cat /proc/cpuinfo<br></div><div>model name<span style="white-space:pre-wrap"> </span>: Intel(R) Core(TM) i7 CPU       X 980  @ 3.33GHz<br></div><div><br></div><div>$ gcc --std=c99 -O3 -march=native 3.c -o 3.native<br></div><div>$ ./3.native<br></div><div>Time:(5.20000000)ms . Sum: 49999995000000$<br></div><div><br></div><div><br></div><div>еще раз на скриптовом J</div><div><br></div><div><div>$ ./jconsole.sh</div><div>   x =: i.10000000</div><div>   6!:2 's =: +/x'</div><div>0.009537</div><div>   s</div><div>49999995000000</div></div><div><br></div><div class="gmail_extra">9+ ms</div><div class="gmail_extra"><br><div class="gmail_quote">10 февраля 2015 г., 14:48 пользователь Анатолий Гришаев <span dir="ltr"><<a href="mailto:0body0@rambler.ru" target="_blank">0body0@rambler.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">10.02.2015 14:36, Михаил Монашёв пишет:<span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Здравствуйте, Анатолий.<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Кстати  лучше  считать  с  нуля  тогда  процесор  может использовать<br>
prefetch<br>
</blockquote>
Ещё  в  С  можно  как-то задать выравнивание массива. Не знаю, правда,<br>
поможет ли это, но мне кажется, что всё упирается в скорость чтения из<br>
памяти. Ещё возможно попытаться задать выравнивание для тела цикла.<br>
<br>
</blockquote></span>
В POSIX написано, что результат вызова malloc всегда выровнен, а всякие массивы объявленные статично компилятор выравнивает.<br>
Можно поэтому не волноваться :)<br>
Конечно, если ты сам адрес массива не посчитаешь/укажешь типа 0x...7f.<div><div><br>
<br>
-- <br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div></div>