1

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

あなたが私を助けることができればうれしいです.

4

1 に答える 1

1

4 コアで合計 8 スレッドを実行しようとしています。*

(a) 複数のプロセス (スレッドではない) を生成するか、(b) Global Interpreter Lockを持たない代替インタープリターを使用しない限り、Python を使用して複数のコアで実行することは決してありません。

標準の Python は、同時に複数のスレッドで Python コードを実行しません。

于 2013-01-22T01:01:21.470 に答える