Module: Parallel::ProcessorCount
- Included in:
- Parallel
- Defined in:
- lib/parallel/processor_count.rb
Overview
TODO: inline this method into parallel.rb and kill physical_processor_count in next major release
Instance Method Summary collapse
-
#physical_processor_count ⇒ Object
Number of physical processor cores on the current system.
-
#processor_count ⇒ Object
Number of processors seen by the OS, used for process scheduling.
Instance Method Details
#physical_processor_count ⇒ Object
Number of physical processor cores on the current system.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/parallel/processor_count.rb', line 12 def physical_processor_count @physical_processor_count ||= begin ppc = case RbConfig::CONFIG["target_os"] when /darwin1/ IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i when /linux/ cores = {} # unique physical ID / core ID combinations phy = 0 IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln| if ln.start_with?("physical") phy = ln[/\d+/] elsif ln.start_with?("core") cid = phy + ":" + ln[/\d+/] cores[cid] = true if not cores[cid] end end cores.count when /mswin|mingw/ require 'win32ole' result_set = WIN32OLE.connect("winmgmts://").ExecQuery( "select NumberOfCores from Win32_Processor") result_set.to_enum.collect(&:NumberOfCores).reduce(:+) else processor_count end # fall back to logical count if physical info is invalid ppc > 0 ? ppc : processor_count end end |
#processor_count ⇒ Object
Number of processors seen by the OS, used for process scheduling
7 8 9 |
# File 'lib/parallel/processor_count.rb', line 7 def processor_count @processor_count ||= Integer(ENV['PARALLEL_PROCESSOR_COUNT'] || Etc.nprocessors) end |