LINUX.ORG.RU

История изменений

Исправление AntonI, (текущая версия) :

однопоточная версия

$ g++ -std=c++11 -O3 -Wall -o bench -fopenmp bench.cpp
$ ./bench
generate strings 0.10222 sec
generate hash 1.13756 sec
search time 0.00106369 sec
total time 1.24084 sec
 matches 0

и многопоточная версия

$ g++ -std=c++11 -O3 -Wall -o benchP -fopenmp benchP.cpp
$ ./benchP
generate strings 0.0304989 sec
generate hash 0.627052 sec
search time 0.00173967 sec
total time 0.659291 sec
 matches 0

в четыре потока, один проход и там и там.

Генерация строк ожидаемо ускоряется почти на 100%, а вот генерация хэшей memory bound судя по всему, и при распаралливании накладные расходы на блокировки (я честно говоря сделал ооочень грубо, в лоб), поэтому ускорению чуть больше чем вдвое. Я гонял на Xeon E5-2690 v4 в 28 (не уверен) тредов - там общее время полсекунды, ускорение чуть лучше чем вдвое по сравнению с одним потоком. Можно попробовать каждому треду дать свою таблицу на заполнение и потом их слить, или заюзать какую то блочную оптимизацию, только я не соображу какую - поганая задача для распараллеливания.

@fsb4000, я забыл сколько у Вас получалось на Ъ плюсах с unordered_set. Но то что метапрогомать Диана чуть выше запостила - ихняя жгутиковая метапрога с хэшами на Ъ сях ожидаемо слила богомерзким плюсам в ПЯТЬ раз (на самом деле больше - у Дианы проц похоже медленнее).

Перефразируя Коровьева: «Читаемость кода хрясь в никуда, производительность хрясь в пять раз, закачка почитай сотни метров весит - вот до чего эти СУВТ-ты доводят!»(c) ;-)

ТС, я не буду приводить Ваш предыдущий бред о плюсах, но если будете убиваться - делайте это об угол шоб сразу.

Исходная версия AntonI, :

однопоточная версия

$ g++ -std=c++11 -O3 -Wall -o bench -fopenmp bench.cpp
$ ./bench
generate strings 0.10222 sec
generate hash 1.13756 sec
search time 0.00106369 sec
total time 1.24084 sec
 matches 0

и многопоточная версия

$ g++ -std=c++11 -O3 -Wall -o benchP -fopenmp benchP.cpp
$ ./benchP
generate strings 0.0304989 sec
generate hash 0.627052 sec
search time 0.00173967 sec
total time 0.659291 sec
 matches 0

в четыре потока, один проход и там и там.

Генерация строк ожидаемо ускоряется почти на 100%, а вот генерация хэшей memory bound судя по всему, и при распаралливании накладные расходы на блокировки (я честно говоря сделал ооочень грубо, в лоб), поэтому ускорению чуть больше чем вдвое. Я гонял на Xeon E5-2690 v4 в 28 (не уверен) тредов - там общее время полсекунды, ускорение чуть лучше чем вдвое по сравнению с одним потоком. Можно попробовать каждому треду дать свою таблицу на заполнение и потом их слить, или заюзать какую то блочную оптимизацию, только я не соображу какую - поганая задача для распараллеливания.

@fsb4000, я забыл сколько у Вас получалось на Ъ плюсах с unordered_set. Но то что метапрогомать Диана чуть выше запостила - ихняя жгутиковая метапрога с хэшами на Ъ сях ожидаемо слила богомерзким плюсам в ПЯТЬ раз (на самом деле больше - у Дианы проц похоже медленнее).