Re[35]: benchmark
От: lpd Черногория  
Дата: 10.01.17 11:36
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Вот нормальный тест:

EP>- обход vector<int*> более чем на порядк медленнее чем vector<int>
EP>- обход list<int> более чем на два порядка медленнее чем vector<int>

Я, кстати, запускал свой тест последовательного обхода интов с индирекцией и без. Приведу тебе полный пример(test0 — без индирекций, test(map1) — последовательный с индирекцией, test(map2) — случайный с индирекцией.
#include <iostream>
#include <chrono>
#include <stdlib.h>
using namespace std;

#define SIZE 1000*1000*1000
int *array;
int *map1, *map2;
void test(int *map)
{
        int sum = 0;
        for (int i=0; i<SIZE; i++)
                sum += array[map[i]];
}
void test0()
{
        int sum = 0;
        for (int i=0; i<SIZE; i++)
                sum += array[i];
}
int main()
{
        srand(time(0));
        array = new int[SIZE];
        map1 = new int[SIZE];
        for (int i=0;i<SIZE;i++) {
                map1[i] = i;
                array[i] = random();
        }
        map2 = new int[SIZE];
        for (int i=0;i<SIZE;i++)
                map2[i] = random()%SIZE;
        auto start0 = std::chrono::high_resolution_clock::now();
        test0();
        auto finish0 = std::chrono::high_resolution_clock::now();
        cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish0-start0).count() << "ns\n";

        auto start1 = std::chrono::high_resolution_clock::now();
        test(map1);
        auto finish1 = std::chrono::high_resolution_clock::now();
        cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish1-start1).count() << "ns\n";

        auto start2 = std::chrono::high_resolution_clock::now();
        test(map2);
        auto finish2 = std::chrono::high_resolution_clock::now();
        cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish2-start2).count() << "ns\n";
}

Вывод:

1952730354ns
2168493713ns
2623154650ns

Видим, что индирекция при суммировании дает всего 10% разницы.
Почему у тебя другие результаты, я не знаю. Я еще пока не успел разобраться в твоем тесте, но думаю, что дело в вызовах boost.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.