From edd @end|ng |rom deb|@n@org  Tue Aug  8 02:07:37 2023
From: edd @end|ng |rom deb|@n@org (Dirk Eddelbuettel)
Date: Mon, 7 Aug 2023 19:07:37 -0500
Subject: [Rd] 
 Detecting physical CPUs in detectCores() on Linux platforms
In-Reply-To: <CC836864-15F7-4D44-BED6-20CA02FCD8BA@R-project.org>
References: <CAObhMffcPOLHN_ko1VQEu-taHjCiuc5kPCA9ybS1O9r_UOn1GQ@mail.gmail.com>
 <25808.57266.337153.29417@rob.eddelbuettel.com>
 <20c86758cf57baa0c045aa39d99bc950a8cb8b31.camel@uni-jena.de>
 <CC836864-15F7-4D44-BED6-20CA02FCD8BA@R-project.org>
Message-ID: <25809.34633.249825.74893@rob.eddelbuettel.com>


On 8 August 2023 at 11:21, Simon Urbanek wrote:
| First, detecting HT vs cores is not necessarily possible in general, Linux may assign core id to each HT depending on circumstances:
| 
| $ grep 'cpu cores' /proc/cpuinfo | uniq
| cpu cores	: 32
| $ grep 'model name' /proc/cpuinfo | uniq
| model name	: Intel(R) Xeon(R) Gold 6142 CPU @ 2.60GHz
| 
| and you can look up that Xenon 6142 has 16 cores.
| 
| Second, instead of "awk"ward contortions it's easily done in R with something like
| 
| d=read.dcf("/proc/cpuinfo")
| sum(as.integer(tapply(
|   d[,grep("cpu cores",colnames(d))],
|   d[,grep("physical id",colnames(d))], `[`, 1)))
| 
| which avoids subprocesses, quoting hell and all such issues...

Love the use of read.dcf("/proc/cpuinfo") !!

On my box a simpler

  > d <- read.dcf("/proc/cpuinfo") 
  > as.integer(unique(d[, grep("cpu cores",colnames(d))]))
  [1] 6
  > 

does the right thing.

Dirk

-- 
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org



[Rd] Detecting physical CPUs in detectCores() on Linux platforms
Dirk Eddelbuettel