スレッドと並列処理を試してみたいです。私はプロセッサに複数のコアがあることを知っていますが、各コアで何が起こっているのかを確認する方法がわかりません。この情報にアクセスする正しい方法は何ですか?
具体的には以下を計画しています。複数のスレッドを起動する小さなプログラムを書くことを想像してください。このプログラムはコア全体に分散しており、必要に応じて互いに通信する必要があります。どのスレッドが実行されているかを観察したいと思います。どのようなヒントがありますか?
私はこの種の作業を初めて試しています。 (問題を直接解決できない情報についても喜んで回答いたします。)
最高、バート
(グーグルをすると「cat /proc/cpuinfo」にしか接続されません。これはプロセッサが7つあることを知らせるようです。これは本当ではなく、この出力の読み方がわからないことを意味します。)
答え1
各コアには独自のエントリがあるため、/proc/cpuinfo
ここには重複した情報がたくさんあります。
保持しているCPUおよび/またはコアの数を確認するには、次の手順を実行します。
# egrep 'processor|core id|physical id' /proc/cpuinfo
processor : 0
physical id : 0
core id : 0
processor : 1
physical id : 0
core id : 1
これは私のシングルチップデュアルコアコンピュータで実行されます。したがって、番号0と1の2つのコアがありますが、どちらも物理CPU 0に属します。
覚えておいて、コンピュータの専門家は0から世紀を始めるのが好きです。
デュアルCPU、シングルコアシステムの出力は次のとおりです。
$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor : 0
processor : 1
そのため、CPUが2つなのにコアが指定されていないため、プロセッサチップあたりコアが1つずつあることがわかっています。
もっと興味深い点があります。
$ egrep 'processor|core id|physical id' /proc/cpuinfo
processor : 0
physical id : 0
core id : 0
processor : 1
physical id : 0
core id : 1
processor : 2
physical id : 1
core id : 0
processor : 3
physical id : 1
core id : 1
これが私のデュアルCPUデュアルコアシステムです。プロセッサ0または1には、それぞれコア0または1として「プロセッサ」0-3があります。
あなたは理解しました。
要約すると、プロセッサ0〜7を含むデュアルCPUクアッドコアシステムがあるようです。
答え2
プロセッサ数:番号は0から始まるので、プロセッサ1がある場合は少なくとも2つは必要です。
スレッドにバインドスレッドはCPUにバインドされません(cpulimitとco.を使用してトリックを実行しない限り、ほとんどの場合は実行しないでください)。コアを1000Hzに設定し、I / Oがないと仮定すると、コンテキスト切り替えは毎秒1000回完了します。現在、2つのプロセッサ設定では、この時点で約300のスレッドが実行されています。これは、各プロセスに6.(6)個のスロットが割り当てられることを意味します。各プロセスがいつでも2つのコアを占めると仮定するのは安全です。
与えられた階段アルゴリズムによると、I / Oはこれは必ずしも真ではありませんが、1秒間の各スレッドは2つのコアにあることも、待機中に実行されない可能性があります(したがってコアによって制限されません)。
ハイパースレッディング私はあなたがハイパースレッディング機能を備えた4コアIntel iXを持っていると推測します(デュアルプロセッサシステムを持っていない場合)。ハイパースレッディングは別々のコアをシミュレートして動作します。したがって、プロセスがあるコアでI / Oを待っている場合は、別のコア実行に切り替えることができ、これはもちろん状況をより複雑にします。