√ Программы,
√ Сайты, √ Библиотеки
√ Хостинг, √ Домены
ООО МааСофтваре
+7(928)442-41-32
support@maasoftware.ru
   
ToolsLib быстрее, чем STL, в 15 раз.
Тест хеш-таблиц ToolsLib.
Скачать Test_STL_vs_ToolsLib.rar (RAR, 1.04 КБ), 1 загрузок., перенесено с форума
Переработанные тест 1 (CPP, 3.42 КБ), 1 загрузок и тест 2 (CPP, 5.00 КБ), 1 загрузок.

По данным тестов (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;
}


Рейтинг:

Назад  Наверх

Пользователь
Новости
[...] Архив новостей.
Новое на сайте
Страницы:
Каталог:
Новости:
Другие ресурсы
Copyright © 2011-2017 ООО МааСофтваре   
Мы принимаем Яндекс.Деньги Мы принимаем переводы Сбербанка России Банковский перевод Способы и порядок оплаты
Посетителей сегодня: 1, всего: 6, максимально: 2, начиная с 27.11.2017, вы просматриваете эту страницу 1 раз(а). Заходите ещё!!!