オーディオのエンコード/デコードを行うライブラリに取り組んでいます。エンコーダーは、利用可能な場合、複数のコア (boost ライブラリを使用する複数のスレッド) を使用できる必要があります。私が今持っているのは、すべてのエンコーディング関連の操作を実行するクラスです。
私が取りたい次のステップは、そのクラスをスレッド化することです。だから私はこれを行う方法を考えています。
スレッドクラスを作成し、n 個のコアに対して n 個のスレッドを作成し、適切な引数を使用してエンコーダーを呼び出すことを考えました。しかし、これはやり過ぎで、別のクラスは必要ないので、スレッド作成に「ユーザー インターフェイス」を利用します。
何か提案があることを願っています。
編集: CUDAを使用して入力データの統計を作成し、前処理に複数のスレッドを使用することを余儀なくされています。そのため、システムに複数のカードがある場合、それらを並行して使用する唯一の方法は、複数のスレッドを作成することです。
例: 4 つのファイル、4 つの異なる計算単位 (個別のメモリ、一意のデバイス ID)。各ファイルは、1 つの計算単位で実行されます。
私が今持っているものは次のとおりです。
class Encoder {
[...]
public:
worker(T data, int devId);
[...]
}
したがって、main() からスレッド化されたワーカーを呼び出すのが最善の方法だと思います
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);
スレッドクラスを実装しないでください。