2015-05-12 3 views
2

В настоящее время я работаю над ускорением одной из моих программ на C++ и пытаюсь открыть прекрасный мир многопоточности.Многопоточность не меняет скорость

std::vector<std::thread> threadPool; 
threadPool.clear(); 
for(int t = 0; t < nbThreads; ++t){ 
    threadPool.push_back(std::thread(myFunction, std::ref(rep), std::ref(branch1)); 
} 
for(auto t = threadPool.begin(); t < threadPool.end() ; ++t){ 
    t->join(); 
} 

Что я не понимаю, так это то, что независимо от количества потоков, которые я использую, скорость не меняется! (около 30 секунд).

Подводя итог: Если мой код неверен, что не так? Если это не так, в каком случае следует использовать многопоточность для ускорения вычислений?

Edit: я бегу на машине i7-4810MQ

Edit 2: вот что делает туРипсЫоп (он анализирует XML-файлы)

void myfunction(DIR*& rep, struct dirent*& branch1){ 
mtx.lock(); 
while ((branch1 = readdir(rep)) != NULL){ 
    mtx.unlock() 

    TiXmlDocument doc(branch1->d_name); 
    if(doc.LoadFile()){ 
      //parse file 
    } 

    mtx.lock(); 
} 
mtx.unlock(); 
} 
+11

Да. Нет. Нет. Да. –

+3

Вы не показываете, как вы делитесь своей работой между вашими потоками и как они сообщают свои зависимые результаты друг другу (если есть). – jxh

+2

без реализации myFunction, трудно сказать. –

ответ

2

Там хороший шанс, что ваш код ограничено файловыми вводами/выводами. Также есть хороший шанс, что ваш парсер XML сделает много распределений памяти, а выделение памяти может замедляться, если многие потоки распределяют память одновременно.

+0

есть ли способ проверить, действительно ли это происходит одновременно или если процессы секвенированы? – Arcyno

Смежные вопросы