Коллеги , а что вы не юзаете тот же интеловский компилятор, он то именно на такой синтетики должен давать максимальные результаты.

On 02/10/2015 04:33 PM, Andrey Kovbovich wrote:

Потестил на более менее современной тачке... вариант Монса у меня сегфолтится почему-то, прогнал слегка модифицированный из пред комментов

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>

int main()
{
        uint32_t *arr;
        arr  = (uint32_t *) malloc(10000000 * sizeof(uint32_t));

        int i,z;
        for( i=0; i<10000000; i++) {
                arr[i] = i;
        }

        clock_t start = clock();
        uint64_t sum;

        for(z = 0; z < 100; z++ ){
            sum = 0;
            for( i=0; i<10000000; i++) {
                            sum+=arr[i];
            }
        }

        clock_t end = clock();
printf("Time:(%0.8f)ms . Sum: %" PRIu64, ((double)end-start)*1000/CLOCKS_PER_SEC/z, sum);

        return 0;
}

$ cat /proc/cpuinfo
model name: Intel(R) Core(TM) i7 CPU       X 980  @ 3.33GHz

$ gcc --std=c99 -O3 -march=native 3.c -o 3.native
$ ./3.native
Time:(5.20000000)ms . Sum: 49999995000000$


еще раз на скриптовом J

$ ./jconsole.sh
   x =: i.10000000
   6!:2 's =: +/x'
0.009537
   s
49999995000000

9+ ms

10 февраля 2015 г., 14:48 пользователь Анатолий Гришаев <[email protected] <mailto:[email protected]>> написал:

    10.02.2015 14:36, Михаил Монашёв пишет:

        Здравствуйте, Анатолий.

            Кстати лучше  считать  с  нуля  тогда  процесор  может
            использовать
            prefetch

        Ещё  в  С  можно  как-то задать выравнивание массива. Не знаю,
        правда,
        поможет ли это, но мне кажется, что всё упирается в скорость
        чтения из
        памяти. Ещё возможно попытаться задать выравнивание для тела
        цикла.

    В POSIX написано, что результат вызова malloc всегда выровнен, а
    всякие массивы объявленные статично компилятор выравнивает.
    Можно поэтому не волноваться :)
    Конечно, если ты сам адрес массива не посчитаешь/укажешь типа
    0x...7f.


-- Moscow.pm mailing list
    [email protected] <mailto:[email protected]> | http://moscow.pm.org





--
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить