Saltar al contenido

R: cómo verificar cuántos núcleos/uso de CPU están disponibles

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *