telefono - overclock android root
Cómo obtener la cantidad de núcleos de un dispositivo Android (6)
En primer lugar, parece que esto no es posible, aquí hay información sobre esto:
Usaremos la CPU Samsung Exynos 5 Octa como un ejemplo para este hilo, pero generalmente cualquier procesador ARM funcionará de la misma manera.
La CPU Samsung Exynos 5 Octa tiene 8 núcleos de CPU. pero en realidad tiene dos procesos con 4 núcleos cada uno. Esto se llama big.LITTLE. Tienes 1 procesador rápido y 1 procesador de potencia eficiente.
Dentro de la CPU Exynos 5 tiene dos CPUs diferentes en construcción, una Cortex a15 y una Cortex a7 ...
Dentro de big.LITTLE ambas CPU no pueden ejecutarse al mismo tiempo, solo una CPU puede estar activa en un momento dado ...
Pero también hay algo llamado "big.LITTLE mp" en el que ambas CPU pueden estar activas al mismo tiempo, pero aquí está la trampa (otra vez). Solo CUATRO núcleos pueden estar activos para el software en cualquier momento dado. Aquí hay una imagen para explicar esto un poco mejor:
Ahora, como puede ver, un núcleo de CPU único se utiliza desde el procesador más potente aquí y luego los otros cuatro núcleos están activos desde el clúster de CPU a7 más eficiente energéticamente.
Puede leer más sobre la arquitectura grande.LITTLE aquí: http://www.arm.com/products/processors/technologies/biglittleprocessing.php
Puede leer más sobre la arquitectura de Big.LITTLE mp aquí: http://www.arm.com/products/processors/technologies/biglittleprocessing.php
Lo que quiere saber ahora es si es posible saber si la arquitectura de la CPU es Big.LITTLE o BIG.LITTLE mp. Luego vea si puede averiguar directamente el recuento de CPU de cada CPU individual, pero no puedo encontrar ningún código relevante. Hay una gran cantidad de documentación en el sitio web de ARM, pero no estoy muy seguro de si es posible obtener esta información. De todos modos, solo se pueden utilizar 4 núcleos de CPU, por lo que el código que tiene es técnicamente correcto ya que es la cantidad de núcleos utilizables.
Espero que esto haya sido útil. Si tiene alguna pregunta o desea aclarar algo, hágamelo saber. Hay mucha información por ahí
Estaba buscando determinar (o contar) la cantidad de núcleos en el procesador integrado del dispositivo Android.
Intenté usar /proc/cpuinfo
, ¡pero no devuelve la cantidad de núcleos del dispositivo!
No encontré el código en ninguna parte de Internet. ¿Alguien aquí sabe cómo puedo determinar esto, entonces por favor responde. Gracias por adelantado
ACTUALIZAR:
Las respuestas a esta pregunta ¿Cómo se puede detectar una CPU de doble núcleo en un dispositivo Android desde el código? no funciona bien en algunos dispositivos. Los probé con procesadores de doble núcleo y cuádruple núcleo, devolvieron 2 y 4 respectivamente, ¡bien!
Pero, en el procesador Octa Core como en Samsung Note 3, devolvió 4 . ( Quizás en la nota 3 hay 2 conjuntos de procesadores quad core que se ejecutan individualmente )
Estaba buscando resolver este problema.
ACTUALIZAR
La aplicación CPU-Z está devolviendo el recuento correcto de núcleos en mi dispositivo Nota de Samsung 3 Aquí parece que existe una posible solución ...
Lo bueno es usar JNI, si es posible en el proyecto
std :: thread :: hardware_concurrency ()
Prueba esto:
Runtime.getRuntime().availableProcessors();
Esto devuelve la cantidad de CPU disponible para ESTA máquina virtual específica, tal como lo experimenté. Puede que eso no sea lo que quieres, aun así, para algunos propósitos esto es muy útil. Puedes probar esto muy fácilmente: mata todas las aplicaciones, ejecuta el código anterior. Abra 10 aplicaciones muy intensivas y luego vuelva a ejecutar la prueba. Claro, esto solo funcionará en un dispositivo multi cpu, supongo.
Puede probar este método para obtener el número de núcleo.
private int getNumOfCores()
{
try
{
int i = new File("/sys/devices/system/cpu/").listFiles(new FileFilter()
{
public boolean accept(File params)
{
return Pattern.matches("cpu[0-9]", params.getName());
}
}).length;
return i;
}
catch (Exception e)
{
e.printstacktrace();
}
return 1;
}
Puede usar una combinación de la respuesta anterior con esta. De esta forma, funcionará más rápido en dispositivos con API 17+, ya que este método es mucho más rápido que el filtrado de archivos.
private int getNumberOfCores() {
if(Build.VERSION.SDK_INT >= 17) {
return Runtime.getRuntime().availableProcessors()
}
else {
// Use saurabh64''s answer
return getNumCoresOldPhones();
}
}
/**
* Gets the number of cores available in this device, across all processors.
* Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu"
* @return The number of cores, or 1 if failed to get result
*/
private int getNumCoresOldPhones() {
//Private Class to display only CPU devices in the directory listing
class CpuFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
//Check if filename is "cpu", followed by a single digit number
if(Pattern.matches("cpu[0-9]+", pathname.getName())) {
return true;
}
return false;
}
}
try {
//Get directory containing CPU info
File dir = new File("/sys/devices/system/cpu/");
//Filter to only list the devices we care about
File[] files = dir.listFiles(new CpuFilter());
//Return the number of cores (virtual CPU devices)
return files.length;
} catch(Exception e) {
//Default to return 1 core
return 1;
}
}
public int availableProcessors ()
Agregado en el nivel de API 1 Devuelve la cantidad de núcleos de procesador disponibles para la VM, al menos 1. Tradicionalmente, esto devolvía el número actualmente en línea, pero muchos dispositivos móviles pueden desconectar los núcleos no utilizados para ahorrar energía, por lo que lanzan versiones más nuevas que Android 4.2 ( Jelly Bean) devuelve la cantidad máxima de núcleos que podrían estar disponibles si no hubiera restricciones de potencia o de calor.
También hay información sobre el número de núcleos dentro de un archivo ubicado en /sys/devices/system/cpu/present
Informa el número de CPU disponibles en el siguiente formato:
- 0 -> CPU / núcleo individual
- 0-1 -> dos CPU / núcleos
- 0-3 -> cuatro CPU / núcleos
- 0-7 -> ocho CPU / núcleos
etc.
También compruebe qué hay dentro /sys/devices/system/cpu/possible
en una nota 3
Ambos archivos tienen r--r--r--
o 444
permisos de archivo establecidos en ellos, por lo que debería poder leerlos sin un dispositivo rooteado en el código.
EDITAR: código de publicación para ayudarte
private void printNumberOfCores() {
printFile("/sys/devices/system/cpu/present");
printFile("/sys/devices/system/cpu/possible");
}
private void printFile(String path) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(path);
if (inputStream != null) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
do {
line = bufferedReader.readLine();
Log.d(path, line);
} while (line != null);
}
} catch (Exception e) {
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
}
Con el resultado
D//sys/devices/system/cpu/present﹕ 0-3
D//sys/devices/system/cpu/possible﹕ 0-3
La prueba se ejecutó en OnePlus One ejecutando BlissPop ROM con Android v5.1.1 y se imprime como debería. Por favor prueba tu Samsung
Use esto para obtener no. de núcleos. Lea este enlace detenidamente y también vea lo que el autor está tratando de decir entre un dispositivo virtual y un dispositivo real.
El código se deriva de ESTE SITIO
/**
* Gets the number of cores available in this device, across all processors.
* Requires: Ability to peruse the filesystem at "/sys/devices/system/cpu"
* @return The number of cores, or 1 if failed to get result
*/
private int getNumCores() {
//Private Class to display only CPU devices in the directory listing
class CpuFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
//Check if filename is "cpu", followed by a single digit number
if(Pattern.matches("cpu[0-9]+", pathname.getName())) {
return true;
}
return false;
}
}
try {
//Get directory containing CPU info
File dir = new File("/sys/devices/system/cpu/");
//Filter to only list the devices we care about
File[] files = dir.listFiles(new CpuFilter());
Log.d(TAG, "CPU Count: "+files.length);
//Return the number of cores (virtual CPU devices)
return files.length;
} catch(Exception e) {
//Print exception
Log.d(TAG, "CPU Count: Failed.");
e.printStackTrace();
//Default to return 1 core
return 1;
}
}