2017-05-12 9 views
1

大きな文字配列(614400)と高性能ビデオストリーミングアプリケーション(1フレームで100fps、10ms)があります。 1つのフレームで、私のフレームを修正し、この8つのスレッドに使用する必要があります。大容量アレイでのC++パフォーマンス

より速いもの: 1.スレッド1のすべての要素に1、アクセスします。 e。 g。スレッド1(1,2,3、... n) スレッド2(n + 1、n + 2、... n * 2) ... 2次アクセス順要素: スレッド1 、17 ...) スレッド2(2、10、18) ... どのように高速化できますか?今私は第二の方法を持っています:

workers = new std::thread*[workersCount]; 
for (int j = 0; j < workersCount; j++){ 
    workers[j] = new std::thread(&parameterController::extractPart, this, j*2, workersCount*2); 
} 
for (int j = 0; j < workersCount; j++){ 
     workers[j]->join(); 
     delete workers[j]; 
    } 
delete workers; 
+0

私は疑問に思っています*測定*あなたの質問には、もし何かが速ければ、答えます。 – WhozCraig

+2

各フレームのスレッドを作成して破棄しますか? o.O – nakiya

+0

私はこれが間違った方法だと知っていますが、今はこれをどのように実装するのか分かりません。今度は、コンストラクタ内のinit 8無限大スレッドを探します。新しいスレッドを待っています。任意のアイデア、どのようにキャッチする、そのスレッドは、新しいフレームを待っている?この後、私はこのデータでもっとやる必要があります。 – Nick

答えて

1

両方のプロファイルを見て、それが確かな唯一の方法です。私はだと思います。各スレッドが連続したチャンクを生成することは、先読みとキャッシュの使いやすさのために高速になりますが、測定だけで確実にすることができます。

+0

はい、各スレッドは一度作成する必要があります。あなたはスレッドの数をお勧めできますか?この値はCPUコアに関連していますか? – Nick

+0

@ニック私はそれにGPUを使うべきだと言いたいのですが、その数多くのスレッドを持つCPU ..コアの数を上回るものはパフォーマンスに負の影響しか与えません。非サーバCPUのフォームは4から16コアです。数十人で終わります。しかし、あなたのケースでは、主なパフォーマンスの影響は、ポインタの配列のアクセスではなく、スレッドの作成と破棄で行われます。 – Swift

関連する問題