首先,我创建了四个线程,每个线程都会调用一个GPU函数。但是,在这四个线程中,我还想创建两个线程。一种是从磁盘读取数据,另一种是进行计算。我不确定是否可以在C++中创建嵌套线程。我认为这不是一个整洁的代码。我能用另一种方法解决这个问题吗?
发布于 2019-01-22 18:38:43
一般来说,从正在运行的线程创建新线程应该没有问题。就像你假设这不是最好的解决方案一样,因为创建/销毁线程通常并不便宜,而且你拥有的线程越多,你有更多的上下文切换,这也是或者可能是性能损失。
因此,您可以创建一个线程池,它具有给定的线程数,并让线程池线程从磁盘读取数据并进行计算。您可以避免大量创建和销毁线程。
如果您还经常创建/销毁调用GPU函数的线程,则可以创建两个线程池,一个用于调用GPU函数的线程,另一个用于从磁盘读取数据和进行计算。
发布于 2019-01-23 22:15:49
您可以使用std::async并完全取消线程管理。或者使用混合方法,其中你有4个核心线程,我认为它们永远不会死,然后在你想要执行更多异步工作的函数中,你可以使用std::async。
https://solarianprogrammer.com/2012/10/17/cpp-11-async-tutorial/
目前还不清楚异步任务是否在使用线程池。如果您想要确保高性能,因为您使用的是GPU,所以您可能会关心这一点,您应该使用线程池。
http://roar11.com/2016/01/a-platform-independent-thread-pool-using-c14/
https://stackoverflow.com/questions/54302079
复制相似问题