2

pthread (C++) を使用して複数のスレッドを使用する必要があるプロジェクトに取り組んでいます。質問があります:

他の多くのスレッドがスレッドを中断することなく、そのスレッドでハイ パフォーマンス コンピューティングを実行したい場合、最適な pthread パラメータ構成設定は何ですか?

現在、私は次のようなものを使用しています:

pthread_t thread;

struct sched_param param;
int sched = SCHED_FIFO;
memset(&param, 0, sizeof(sched_param));

// Now I set priority to max value (sched_get_priority_max() returns that value)
param.sched_priority = sched_get_priority_max();

// Create my thread
pthread_create(&thread, NULL, (void *) &hard_number_crunching, (void *) &structure_passed_to_thread);

// finally I set parameters to thread
pthread_setschedparam(&thread, sched, &param);

SCHED_FIFO と SCHED_RR の間で「int sched」を切り替えていましたが、あまり役に立ちませんでした。このスレッドを現在よりも長く CPU で実行するように強制することはできますか?

4

3 に答える 3

2

コアごとに 1 つのスレッドを作成する場合は、おそらくスレッドのアフィニティを設定して、コア間でローミングしないようにする必要があります。これにより、通常、各スレッドがキャッシュされたデータの近くにとどまるため、パフォーマンスが向上します。見る:

int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);

注: コアよりも多くのスレッドを作成する場合は、アフィニティを設定しないでください! これにより、あらゆる種類のクレイジーなことが発生する可能性があり、デッドロックが発生する可能性があります。

于 2013-02-12T13:56:46.113 に答える
0

スレッドにXサイクルかかるとしましょう。優先順位が何であるか、またはシステムが他に何をしているかは関係ありませんが、それでもXサイクルかかります。システムが他のことをするのに忙しくない場合、スレッドは終了するまでほぼ継続的に実行されます。システムがビジー状態の場合、他のことを実行できるようにするために、おそらく頻繁にスレッドが停止されます。最終的に、スレッドはXサイクルを取得します。ここでの目的のために、2つのタイプの優先順位があることに注意してください...スレッドの優先順位(1つのスレッドの優先順位と他のスレッドの優先順位)とプロセスの優先順位(プロセス/プログラムの優先順位と他のスレッドの優先順位)プロセス/プログラム/オペレーティングシステム)。スレッドの優先度を設定しています。これと同等以上の優先度の他のスレッドが競合していますか?あなたのシステムプロセスと競合する優先度の高いシステムプロセスはありますか?答えが「いいえ」の場合、CPUはほとんど自分のものになります。また、複数のプロセッサやコアがある場合、スレッドが複数でうまく実行されない可能性があるため、タスクを適切に分割していないと、システム全体の処理が100%にならない可能性があることにも注意してください。

于 2013-02-12T12:56:11.630 に答える
0

どちらも zr. マークの回答が私を助けてくれました。また、個々のスレッドにアフィニティを設定する方法も見つけました。方法については、このリンクを確認してください: pthread_attr_setaffinity_np()

助けてくれたみんなに感謝します。

于 2013-02-13T08:05:46.937 に答える