Qualcuno ha esperienza con il piuttosto nuovo std::async
? Attualmente stiamo implementando un parser di file parallelo, che legge un blocco di file e passa questo blocco a una funzione asincrona.Comportamento di GCC con std :: async (std :: launch :: async) rispetto al comportamento di Clang
L'utilizzo di Clang (v3.0) funziona in modo ottimale con le politiche di default std::async
(dipendenti dall'implementazione). Su una macchina a due core, attiva fino a 4 thread ciò che funziona davvero bene.
Ma con GCC (v4.7), il thread di lettura del file non genera nuovi thread, rendendo il programma alla fine completamente sequenziale.
Utilizzando std::launch::async
, entrambe le versioni stanno praticamente facendo lo stesso (come dovrebbe essere il caso).
Qualcuno conosce lo stato della corrente delle funzionalità di threading di C++ 11 di GCC? O potrebbe essere un errore nella nostra implementazione?
Codice breve:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
Mi piacerebbe davvero usare Boost. Non sarà un grande salto al corretto supporto per C++ 11. I nuovi modelli di threading in C++ 11 richiedono un layout di memoria diverso da quello utilizzato da GCC o MSVC e non sono implementati molto. –