Intenta entender el código de forma correcta antes de adaptarlo a tu trabajo si tquieres aportar algo puedes dejarlo en la sección de comentarios.
Solución:
Si abre varias ventanas R, cada ventana se ejecutará en un núcleo diferente hasta la cantidad máxima de núcleos que tenga. Esto se implementa automáticamente en computadoras Windows y Mac. Si desea saber cuántos núcleos tiene, puede ejecutar:
library(parallel)
detectCores()
En Linux, puede enviar el comando ps al sistema: le brinda el uso promedio de la CPU y el uso de la memoria del programa llamado rsession:
splitted <- strsplit(system("ps -C rsession -o %cpu,%mem,pid,cmd", intern = TRUE), " ")
df <- do.call(rbind, lapply(splitted[-1],
function(x) data.frame(
cpu = as.numeric(x[2]),
mem = as.numeric(x[4]),
pid = as.numeric(x[5]),
cmd = paste(x[-c(1:5)], collapse = " "))))
df
# cpu mem pid cmd
#1 0.8 0.7 11001 /usr/lib/rstudio/bin/rsession
#2 0.0 0.2 12397 /usr/lib/rstudio/bin/rsession
#3 0.1 0.7 14960 /usr/lib/rstudio/bin/rsession
#4 0.4 0.2 26122 /usr/lib/rstudio-server/bin/rsession
#5 0.3 8.3 35782 /usr/lib/rstudio/bin/rsession
Probablemente pueda mejorarlo para obtener la identificación principal y el uso instantáneo de la CPU con otras opciones pasadas a ps o top y deducir la cantidad de núcleos utilizados por cada sesión.
En Windows puedes probar esto:
a <- system("wmic path Win32_PerfFormattedData_PerfProc_Process get Name,PercentProcessorTime", intern = TRUE)
df <- do.call(rbind, lapply(strsplit(a, " "), function(x) x <- x[x != ""];data.frame(process = x[1], cpu = x[2])))
df[grepl("Rgui|rstudio", df$process),]
# process cpu
# 105 Rgui 0
# 108 rstudio 0
Usando R, ¿cómo verificar cuántos núcleos/subprocesos están ejecutando R en Windows y Linux? (O cuántas R se están ejecutando)
Una respuesta válida que aún no he leído aquí es simplemente usar el PD Paquete R con la función ps()
luego puede crear un subconjunto de la tabla devuelta por los procesos con el nombre "rsession":
ps::ps()[ps::ps()$name == "rsession",]
Número de filas le dará el número de sesiones existentes en la computadora/servidor:
nrow(ps::ps()[ps::ps()$name == "rsession",])
No estoy completamente seguro de lo que function ps_num_threads()
lo hace, pero también podría ser interesante comprobar si el resultado tiene sentido:
ps::ps_num_threads(ps::ps_handle())
Desafortunadamente, no encontré nada sobre el uso de %CPU en el PD R, pero puede probar la función que cito en mi otra respuesta, debería funcionar en Linux.
Si conservas alguna desconfianza y disposición de renovar nuestro tutorial eres capaz de realizar una nota y con mucho placer lo interpretaremos.