www.maasoftware.ru

MaaSoftware forum
Текущее время: 23 окт 2017 12:46

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
 Заголовок сообщения: ToolsLib быстрее, чем STL, в 15 раз
СообщениеДобавлено: 08 апр 2015 11:58 
Не в сети

Зарегистрирован: 11 авг 2008 18:33
Сообщения: 193
ToolsLib is 15x faster than STL.
Вложение:
Комментарий к файлу: Тест хеш-таблиц
Test_STL_vs_ToolsLib.rar [1.04 КБ]
391 скачивание
Код:
/*
ToolsLib CMaaUnivHash is 3.5x - 15x faster than unordered_map

git clone git://git.maasoftware.ru/ToolsLib.git

output (Visual C++ 2010, 32 bits, Windows XP, Core2Duo E7400, 2800 MHz):

unordered_map<int, int> :
 359,772 hmap.insert()
 282,048 hmap.erase(iter)
 357,760 hmap.insert()
 307,778 hmap.erase(val)

CMaaUnivHash<int, int> :
  94,252 h.Add()
  38,232 it.Remove()
  45,917 h.Add()
  20,542 h.Remove()

$ g++ -o a2.out -std=c++11 -lstdc++ -lpthread main2.cpp ../ToolsLib/ToolsLib.a
output (on Linux Debian 7.6 x64 VDS, Intel Xeon E5, 2000 MHz):

unordered_map<int, int> :
 625,677 hmap.insert()
 285,488 hmap.erase(iter)
 595,525 hmap.insert()
 252,544 hmap.erase(val)

CMaaUnivHash<int, int> :
 277,266 h.Add()
 244,400 it.Remove()
 129,552 h.Add()
  74,735 h.Remove()

*/

#ifdef __unix__
#include "../ToolsLib/ToolsLib.h"
#else
#include "..\ToolsLib\ToolsLib.h"
#endif

#include <iostream>
//#include <algorithm>
//#include <hash_map>
#include <unordered_map>

int main()
{
     typedef std::pair <int, int> ipair;
     std::unordered_map<int, int> hmap;
     std::unordered_map<int, int>::iterator ihmap, ihmap2;

     int i;

     CHrtMultiTimer t0, t1;
     CMaaString s0, s1;
     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.insert(ipair(i, i));
     }
     t0.Stop("hmap.insert()");

     t0.Start();
     for (ihmap = hmap.begin(); ihmap != hmap.end(); ihmap = ihmap2)
     {
          ihmap2 = ihmap;
          ++ihmap2;
          hmap.erase(ihmap);
     }
     t0.Stop("hmap.erase(iter)");

     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.insert(ipair(i, i));
     }
     t0.Stop("hmap.insert()");

     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.erase(i);
     }
     t0.Stop("hmap.erase(val)");

     s0 = t0.GetResult("unordered_map<int, int> :\n");
     __utf8_printf("%S\n", &s0);

     CMaaUnivHash<int, int> h;
     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Add(i, i);
     }
     t1.Stop("h.Add()");

     t1.Start();
     CMaaUnivHash<int, int>::iterator it(h);
     for (; it; ++it)
     {
          it.Remove();
     }
     t1.Stop("it.Remove()");

     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Add(i, i);
     }
     t1.Stop("h.Add()");

     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Remove(i);
     }
     t1.Stop("h.Remove()");

     s1 = t1.GetResult("CMaaUnivHash<int, int> :\n");
     __utf8_printf("%S\n", &s1);


     for (ihmap = hmap.begin(); ihmap != hmap.end(); ++ihmap)
     {
          std::cout << "hmap[" << ihmap->first << "]=" << ihmap->second << " ";
     }
     std::cout << '\n';

     {
          CMaaUnivHash<int, int>::iterator it(h);
          for (; it; ++it)
          {
               __utf8_printf("h[%d]=%d ", it.key(), it.data());
          }
          __utf8_printf("\n");
     }
     return 0;
}


Вернуться к началу
 Заголовок сообщения: Re: ToolsLib быстрее, чем STL, в 15 раз
СообщениеДобавлено: 09 апр 2015 09:03 
Не в сети

Зарегистрирован: 11 авг 2008 18:33
Сообщения: 193
Код:
/*
ToolsLib CMaaUnivHash is 3.5x - 15x faster than unordered_map

git clone git://git.maasoftware.ru/ToolsLib.git

output (Visual C++ 2010, 32 bits, Windows XP, Core2Duo E7400, 2800 MHz):

q = 499999500000
q = 0
unordered_map<int, int> :
 314,784 hmap.insert()
  72,753 hmap.find(existed)
 255,102 hmap.erase(iter)
  63,864 hmap.find(not existed)
 294,268 hmap.insert()
 296,055 hmap.erase(val)

q = 499999500000
q = 0
CMaaUnivHash<int, int> :
  91,024 h.Add()
   8,833 h.Find(existed)
  52,243 it.Remove()
   7,840 h.Find(not existed)
  44,055 h.Add()
  18,900 h.Remove()

$ g++ -o a3.out -std=c++11 -lstdc++ -lpthread main3.cpp ../ToolsLib/ToolsLib.a
output (on Linux Debian 7.6 x64 VDS, Intel Xeon E5, 2000 MHz):

q = 499999500000
q = 0
unordered_map<int, int> :
 577,276 hmap.insert()
 170,402 hmap.find(existed)
 291,785 hmap.erase(iter)
 115,816 hmap.find(not existed)
 590,268 hmap.insert()
 213,276 hmap.erase(val)

q = 499999500000
q = 0
CMaaUnivHash<int, int> :
 254,875 h.Add()
  36,704 h.Find(existed)
 207,689 it.Remove()
  30,051 h.Find(not existed)
 117,712 h.Add()
  89,317 h.Remove()

*/

#include "stdafx.h"

#ifdef __unix__
#include "../ToolsLib/ToolsLib.h"
#else
#include "..\ToolsLib\ToolsLib.h"
#endif

#include <iostream>
//#include <algorithm>
//#include <hash_map>
#include <unordered_map>

int main()
{
     typedef std::pair <int, int> ipair;
     std::unordered_map<int, int> hmap;
     std::unordered_map<int, int>::iterator ihmap, ihmap2;

     int i;

     CHrtMultiTimer t0, t1;
     CMaaString s0, s1;
     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.insert(ipair(i, i));
     }
     t0.Stop("hmap.insert()");

     t0.Start();
     _qword q = 0;
     int n = 0;
     for (i = 0; i < 1000000; i++)
     {
          ihmap = hmap.find(i);
          if (ihmap != hmap.end())
          {
               q += ihmap->first;
               n++;
          }
     }
     t0.Stop("hmap.find(existed)");
     __utf8_printf("q = %D\n", q);

     t0.Start();
     for (ihmap = hmap.begin(); ihmap != hmap.end(); ihmap = ihmap2)
     {
          ihmap2 = ihmap;
          ++ihmap2;
          hmap.erase(ihmap);
     }
     t0.Stop("hmap.erase(iter)");

     t0.Start();
     q = 0;
     n = 0;
     for (i = 0; i < 1000000; i++)
     {
          ihmap = hmap.find(i+1000000);
          if (ihmap != hmap.end())
          {
               q += ihmap->first;
               n++;
          }
     }
     t0.Stop("hmap.find(not existed)");
     __utf8_printf("q = %D\n", q);

     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.insert(ipair(i, i));
     }
     t0.Stop("hmap.insert()");

     t0.Start();
     for (i = 0; i < 1000000; i++)
     {
          hmap.erase(i);
     }
     t0.Stop("hmap.erase(val)");

     s0 = t0.GetResult("unordered_map<int, int> :\n");
     __utf8_printf("%S\n", &s0);

     CMaaUnivHash<int, int> h;
     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Add(i, i);
     }
     t1.Stop("h.Add()");

     t1.Start();
     q = 0;
     n = 0;
     for (i = 0; i < 1000000; i++)
     {
          int x = 0;
          if (!h.Find(i, &x))
          {
               q += x;
               n++;
          }
     }
     t1.Stop("h.Find(existed)");
     __utf8_printf("q = %D\n", q);

     t1.Start();
     CMaaUnivHash<int, int>::iterator it(h);
     for (; it; ++it)
     {
          it.Remove();
     }
     t1.Stop("it.Remove()");

     t1.Start();
     q = 0;
     n = 0;
     for (i = 0; i < 1000000; i++)
     {
          int x = 0;
          if (!h.Find(i + 1000000, &x))
          {
               q += x;
               n++;
          }
     }
     t1.Stop("h.Find(not existed)");
     __utf8_printf("q = %D\n", q);

     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Add(i, i);
     }
     t1.Stop("h.Add()");

     t1.Start();
     for (i = 0; i < 1000000; i++)
     {
          h.Remove(i);
     }
     t1.Stop("h.Remove()");

     s1 = t1.GetResult("CMaaUnivHash<int, int> :\n");
     __utf8_printf("%S\n", &s1);


     for (ihmap = hmap.begin(); ihmap != hmap.end(); ++ihmap)
     {
          std::cout << "hmap[" << ihmap->first << "]=" << ihmap->second << " ";
     }
     std::cout << '\n';

     {
          CMaaUnivHash<int, int>::iterator it(h);
          for (; it; ++it)
          {
               __utf8_printf("h[%d]=%d ", it.key(), it.data());
          }
          __utf8_printf("\n");
     }
     return 0;
}


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB