2011-09-18 28 views

答えて

2

大規模では、意味のある方法でこれを行うことはできません。途中でスケジューラーが質問をしたり、別のプロセッサーで再開したりすることがあります。

2

ポータブルな方法はありません。 GNU/Linuxを使用している場合は、関数sched_getcpuを試すことができます。

+1

実際には、あなたの質問を慎重に読んでから答えませんでした。「shced_getcpu」は論理IDだけを返します。私は/ proc/cpuinfoで物理的な情報(物理CPU、コア、ハイパースレッディングなど)を取得する必要があると思います。 – chys

1

スレッドは1つのプロセッサではなくスケジュールによって実行されているため、これは可能ではないと思います。プロセッサはその時点で空いていますから、ある程度時間がかかり、プロセッサがそのジョブを実行する可能性があります。

+0

しかし、OSはコアアフィニティがあるかどうかを確認しようとしません。できるだけ多くのスレッドを実行して、そのスレッドに関連付けられたTLBなどをクリアする必要がないようにします。そうでなければ、TLBミスがたくさんあるでしょうか?少なくともLinuxではスレッドはプロセスとして多かれ少なかれ見られます。 –

+1

@Davidとスタッカーは、返された結果が失効しており、もはや有効ではない可能性があることを指摘しています。 OSのスケジューラはできるだけ最適化を行いますが、ユーザーがブラウザリンクをクリックして、「コア」呼び出し中にすぐに数十の準備スレッドをシステムにダンプすると、スレッドTLBキャッシュの内容は時間が経つほど長くなりますそれは再び実行され、どのコアでもポップアップする可能性があります。 –

関連する問題