Я реализую параллельную хэш-карту tbb, чтобы сравнить ее производительность с набором других одновременных хеш-таблиц.
Однако производительность, которую я получаю, ужасна, я просто не могу поверить, что этоэто медленно по сравнению с другими параллельными хеш-таблицами
Вот моя реализация:
class TBB: public TestDs{
typedef tbb::concurrent_hash_map<int,int, HashCompare<int> > hash_t;
private:
hash_t _ds;
public:
TBB(const Configuration& config) : _ds(config.initial_count) {
}
bool containsKey(int key) {
hash_t::accessor a;
if(_ds.find(a,key)){
return true;
}
else
return false;
}
int get(int key) {
hash_t::accessor a;
if(_ds.find(a,key)){
return (int)(a->second);
}
else
return 0;
}
int put(int key, int value) {
return _ds.insert( std::make_pair(key, value) );
}
int remove(int key) {
return _ds.erase(key);
}
int size() {
return _ds.size();
}
const char* name() {
return "TBB";
}
void print() {}
void shutdown() {}
};
Кто-нибудь видит какие-либо проблемы с моей реализацией или знает, по какой причине она может работать медленно?Требуется более 30 минут, чтобы вставить 200 000 элементов в среде с одним потоком.Чтобы представить это в перспективе, почти все другие таблицы выполняют этот тест менее чем за 5 минут.
Вот мой код сборки:
-w -DNDEBUG -g -msse2 -m32 -DINTEL -D_REENTRANT -lrt -pthread -fno-strict-aliasing -l cds -l tbb -lllalloc
ОБНОВЛЕНИЕ: Я настроил свой код тестирования напредварительно заполните хеш-таблицы до 1000 вместо 100 000.При повторном запуске tbb выполняет 92 операции в секунду, в то время как другая реализация выполняет 89431 операции в секунду.(Среда 64 потоков) ... Просто сказать, что что-то кажется неправильным ....
Дополнительная информация: Компьютер представляет собой рабочую станцию HP Z600 с 6 ГБ оперативной памяти и 6 ядрами.
ПримечаниеКрестовая позиция по адресу: http://software.intel.com/en-us/forums/showthread.php?t=86119