4 コアで合計 8 スレッドを実行しようとしています。
アフィニティを設定して、スレッドを 2 つずつコアにバインドします。
0,1 -> core A
2,3 -> core B
4,5 -> core C
6,7 -> core D
スレッドをポーリングして、スレッドが実行されているかどうかを確認できます。また、(s)started 時刻、(e)nd 時刻、および (performnace イベントが収集された) 時刻も正確に収集できます。セット内の 2 つのスレッドのどちらが死んでいるかを知っています (つまり、実行時間は過ぎています)。スレッド 0 またはスレッド 1 が互いに長い場合があります。
どちらの場合でも、つまり、スレッド 0 またはスレッド 1 が長い場合、短い方のスレッドを大きい方のスレッドの最後まで繰り返します。
以前は、システム全体でコアあたり 2 つのスレッドしかなかったときです。私は以前、次のような手動チェックを行っていました..どちらかのスレッドが死んでいる場合..もう一方も死んでいるポイントまで実行し続けます.
しかし、これには多くの冗長性と効率の低下が伴います(IFステートメントを使用していたため)
各コアに 2 つ以上のスレッドがある場合に、コアごとに 2 つのスレッド/2 つ以上のスレッドにスケーリングする場合。どうすればそれができますか?
I need ideas so that we can discuss on that.
これは私が得たものです: 例として、"ted" と "talks" をコア A の 2 つのスレッドとして取り上げます。ted が 2 つのスレッドのうち短いと仮定します。私たちが持っているデータ: 開始時間、終了時間、およびデータ収集時間。スレッド ted の終了開始とスレッド トークの間の時間差を計算できます。
TED_TIME_DIFF = 100ms
しかし、スレッドトークの時間は増加し続けています(収集時間の計算(c)から確認)。たとえば、収集時間が1ミリ秒であると仮定すると、TALKS_TIME_DIFF = 110ms
次のミリ秒は111ミリ秒になります..など.
話の時間差が停滞するまで ted を繰り返し続けます。
Scripting language: Python 2.7
OS: Linux
Kernel:2.6.xx
using SPEC CPU BENCHMARK threads - if that is any importance
あなたが私を助けることができればうれしいです.