Browser you have is obsolate. Please, download the modern Firefox, Chrome, Opera or Yandex browser for comfort surfing!
  √ Programs, √ Sites, √ Sources, √ C++,
√ Libraries, √ Hosting, √ Domains
= MaaSoftware OOO, +7(999)633-15-17
support@maasoftware.com, 9:00-17:00 GMT+3
 
 
  0  0
ToolsLib is faster than STL by 15 times.
Тест хеш-таблиц ToolsLib.
Скачать Test_STL_vs_ToolsLib.rar (RAR, 1.04 KB), 196 загрузок., перенесено с форума
Переработанные тест 1 (CPP, 3.42 KB), 189 загрузок и тест 2 (CPP, 5.00 KB), 204 загрузок.

По данным тестов (2015 г.) ToolsLib до 15 раз быстрее STL для машины класса Core2Duo.
На современном VDS (2017 г.) с Linux Debian 9.2 x64 gcc version 6.3.0 (c++11) тесты показывают только 1.5х увеличение производительности.

Тест 1:
/*
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;
}

Тест 2:
/*
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;
}


Ratio:

Back  Top

November 2024
   Su   Mo   Tu   We   Th   Fr   Sa   
             1   2   
   3   4   5   6   7   8   9   
   10   11   12   13   14   15   16   
   17   18   19   20   21   22   23   
   24   25   26   27   28   29   30   
 14 November 2024 year, Thursday 
User
Autorization
e-mail:

password:


Register
New on site
Online
Guests: 0
Users: 0
Bots: 1
Total users: 36
Other resources
Copyright © 2012-2024 MaaSoftware OOO   
Посетителей сегодня: 1, всего: 86, максимально: 16, начиная с 22.07.2023, вы просматриваете эту страницу 1 раз(а). Заходите ещё!!!