Вложенные потоки в многопоточном программировании на C ++ 11 - PullRequest
0 голосов
/ 22 января 2019

Сначала я создаю четыре потока, и каждый из них вызывает функцию графического процессора. Однако внутри каждой из четырех я также хочу создать две темы. Один - это чтение данных с диска, а другой - выполнение вычислений. Я не уверен, что смогу создать вложенный поток в C ++. Я думаю, что это не аккуратный код. Могу ли я найти другой способ решения проблемы?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете использовать std :: async и полностью отказаться от управления потоками. Или используйте гибридный подход, когда у вас есть 4 основных потока, которые, я полагаю, никогда не умрут, а затем в тех функциях, где вы хотите выполнять больше асинхронной работы, вы можете использовать std :: async.

https://solarianprogrammer.com/2012/10/17/cpp-11-async-tutorial/

Не ясно, используют ли асинхронные задачи пулы потоков. Если вы хотите обеспечить высокую производительность, которая, вероятно, вас волнует, поскольку вы используете графические процессоры, вам следует использовать пул потоков.

http://roar11.com/2016/01/a-platform-independent-thread-pool-using-c14/

0 голосов
/ 22 января 2019

В общем случае не должно быть проблем с созданием нового потока из запущенного потока. Как вы предполагаете, это не лучшее решение, потому что создание / удаление потоков часто не дешево и чем больше у вас потоков, тем больше у вас переключений контекста, что является или может быть также ухудшением производительности.

Таким образом, вы можете создать пул потоков, который определил количество потоков, и позволить потокам пула потоков работать над чтением данных с диска и выполнять вычисления. Вы бы избежали массового создания и уничтожения потоков.

Если вы также часто создаете / уничтожаете потоки, вызывающие функции GPU, вы можете создать два пула потоков, один для потоков, вызывающих функции GPU, и один пул потоков для чтения с диска и вычислений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...