GNU/Linux >> Linux の 問題 >  >> Linux

スレッドが実行されているプロセッサ番号を見つけるにはどうすればよいですか?

XP の場合、これを明らかにした簡単なグーグル:

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm これは役に立ちますか?


競合を避けたいだけなら、現在の CPU を知る必要はありません。ヒープをランダムに選択できます。または、スレッドごとにヒープを持つこともできます。そのようにして多かれ少なかれ競合が発生する可能性がありますが、現在の CPU をポーリングするオーバーヘッドを回避できます。これは、重要である場合とそうでない場合があります。また、インテル スレッド ビルディング ブロックのスケーラブルなアロケーターもチェックしてください。これは、この問題をあなたよりもうまく解決しているかもしれません。


man sched_getcpu の出力から :

NAME
       sched_getcpu - determine CPU on which the calling thread is running

SYNOPSIS
       #define _GNU_SOURCE
       #include <utmpx.h>

       int sched_getcpu(void);

DESCRIPTION
   sched_getcpu() returns the number of the CPU
   on which the calling thread is currently executing.

RETURN VALUE
   On success, sched_getcpu() returns a non-negative CPU number.
   On error, -1 is returned and errno is set to indicate the error.

SEE ALSO
   getcpu(2)

残念ながら、これは Linux 固有のものです。これを行う移植可能な方法があるとは思えません。


Antony Vennard の回答と引用されたサイトのコードに加えて、Visual C++ x64 でも機能するコードを次に示します (インライン アセンブラーなし):

DWORD GetCurrentProcessorNumberXP() {
   int CPUInfo[4];   
   __cpuid(CPUInfo, 1);
   // CPUInfo[1] is EBX, bits 24-31 are APIC ID
   if ((CPUInfo[3] & (1 << 9)) == 0) return -1;  // no APIC on chip
   return (unsigned)CPUInfo[1] >> 24;
}

Win7 x64 での GetCurrentProcessorNumber() の実装を簡単に見てみると、プロセッサ番号を取得するために異なるメカニズムが使用されていることがわかりますが、私の (少数の) テストでは、自作の関数と公式の関数の結果は同じでした。


Linux
  1. ターミナルで利用可能な垂直線の数を見つける方法は?

  2. インストールされている glibc ライブラリのバージョンを確認するにはどうすればよいですか?

  3. スレッドが実行されている CPU コアを確認するにはどうすればよいですか?

  1. Bash変数の文字数をカウントするにはどうすればよいですか

  2. Linux を使用してドライブ内のフォルダー数をカウントするにはどうすればよいですか?

  3. ディレクトリツリーで最も古いファイルを見つけるにはどうすればよいですか

  1. メモリとCPU使用率で上位のプロセスを見つける方法

  2. CentOS/RHEL システムの CPU ソケット数を調べる方法

  3. 使用している Fedora のバージョンを確認するにはどうすればよいですか?