LINUX.ORG.RU

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

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

Все оказалось банально:

sizeof(std::unordered_map<K, V>) == 56

(грррррр! 8 байт сэкономили, молодцы че). Дальше вот такая конструкция

std::vector<std::unordered_map<K, V> > table(omp_get_num_threads());

при совместном доступе из разных потоков встает колом потому что разные потоки ломятся в одну строку кэша.

@bugfixer, спасибо!;-)

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

Все оказалось банально:

sizeof(std::unordered_map<K, V>) == 56

(грррррр! 8 байт сэкономили, молодцы че). Дальше вот такая конструкция

std::vector<std::unordered_map<K, V> > table(omp_get_um_threads());

при совместном доступе из разных потоков встает колом потому что разные потоки ломятся в одну строку кэша.

@bugfixer, спасибо!;-)