Ruby で物理コアと論理コアの数を確認する方法


Ruby の concurrent-ruby という gem を使って, 現在の PC の物理コアと論理コアの数を確認する方法を紹介します.

この記事のサンプルコードは次の環境での動作を確認しております:

  • macOS – 10.13.6
  • Ruby – 2.5.1
  • RubyGem concurrent-ruby1.0.5

インストール

RubyGem の concurrent-ruby を使って確認するので, インストールしていない場合, インストールする必要があります:

gem install concurrent-ruby

concurrent-rubyactivesupport の依存関係にあり, activesupportrails の依存関係にあるので, Rails をインストールしている人は, 自動的に concurrent-ruby をインストールしていることになります:

$ gem dependency -r /^rails$/ | grep activesupport
  activesupport (= 5.2.1)

$ gem dependency -r /^activesupport$/ | grep concurrent-ruby
  concurrent-ruby (>= 1.0.2, ~> 1.0)

インストールの確認は次のコマンドで確認できます:

$ gem list -el concurrent-ruby

*** LOCAL GEMS ***

concurrent-ruby (1.0.5)

*** LOCAL GEMS *** の下に concurrent-ruby と表示されれば, インストールされていると確認できます.

確認

物理コア数は Concurrent.physical_processor_count, 論理コア数は Concurrent.processor_count でそれぞれ確認できます:

require 'concurrent'

Concurrent.physical_processor_count  # => 4
Concurrent.processor_count           # => 8

僕の MacBook Pro の場合, 物理コア数は 4 で, 論理コア数は 8 と確認できました.

その CPU の製品名は i7-4770HQ と次のコマンドで確認しましたので:

$ sysctl -n machdep.cpu.brand_string
Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz

Intel の i7-4770HQ仕様書に書かれている “# of Cores” と “# of Threads” の数とも一致しますね.

まとめ

concurrent-ruby公式レポジトリに書かれているように, Erlang, Clojure, Scala, Haskell, F#, C#, Java といったプログラミング言語とクラシックな並行性パターンから着想を得た Ruby の為のモダンな並行性ツールです.

なので, そもそも並行処理を行う為の gem で, その並行処理の付加的なメソッドとして物理コアと論理コアの数を取得するメソッドが実装されています.