我正在开发一个进行音频编码/解码的库。如果可用,编码器应能够使用多个内核(即多线程,使用 boost 库)。我现在拥有的是一个执行所有编码相关操作的类。
我要采取的下一步是使该类线程化。所以我想知道如何做到这一点。
我考虑过编写一个线程类,为 n 个内核创建 n 个线程,然后使用适当的参数调用编码器。但也许这有点矫枉过正,不需要另一个类,所以我将使用“用户界面”来创建线程。
我希望有任何建议。
编辑:我被迫使用多个线程进行预处理,使用 CUDA 创建输入数据的统计信息。因此,如果系统中有多个卡,并行使用它们的唯一方法是创建多个线程。
示例: 4 个文件,4 个不同的计算单元(单独的内存,唯一的设备 ID)。每个文件应在一个计算单元上执行。
我现在拥有的是:
class Encoder {
[...]
public:
worker(T data, int devId);
[...]
}
所以我认为最好的方法是从 main() 线程调用 worker
boost::thread w1(&Encoder::worker, data0, 0);
boost::thread w2(&Encoder::worker, data1, 1);
boost::thread w3(&Encoder::worker, data2, 2);
boost::thread w4(&Encoder::worker, data3, 3);
而不是实现线程类。