Ejemplos de Cálculo Intensivo de CPU?


Necesito unos pocos cálculos intensivos de cpu y memoria fáciles de implementar que pueda escribir en Java para un programador de subprocesos de prueba.

Deben consumir un poco de tiempo, pero lo más importante es que consumen recursos.

¿Alguna idea?

Author: MEURSAULT, 2010-09-12

7 answers

Algunos ejemplos sencillos de tareas con uso intensivo de CPU:

  • buscar números primos (implica muchas divisiones BigInteger)
  • calculando factoriales grandes, por ejemplo, 2000! ((implica muchas multiplicaciones de BigInteger)
  • muchas matemáticas.tan () cálculos (esto es interesante porque las matemáticas.tan es nativo, por lo que está utilizando dos pilas de llamadas: una para llamadas Java, la otra para llamadas C.)
 22
Author: dogbane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 00:55:21

Multiplique dos matrices. Las matrices deben ser enormes y almacenadas en el disco.

Búsqueda de cadenas. O bien, indexe un documento enorme (detecte y cuente la ocurrencia de cada palabra o cadenas de alfabetos) Por ejemplo, puede indexar todos los identificadores en el código fuente de un proyecto de software grande.

Calcular pi.

Gire una matriz 2D o una imagen.

Comprime algunos archivos enormes.

...

 6
Author: rwong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 00:11:08

La prueba de remojo de CPU para el PDP-11 fue tan(atan(tan(atan(...))) etc. Trabaja la FPU bastante duro y también la pila y los registros.

 6
Author: user207421,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-18 09:41:24

Ok esto no es Java, pero se basa en Dhrystonealgoritmo de referencia encontrado aquí. Estas implementaciones del algoritmo podrían darle una idea de cómo se hace. El enlace aquí contiene fuentes a C/C++ y Ensamblador para obtener los puntos de referencia.

 4
Author: t0mm13b,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 00:20:31
  • Calcular el n-ésimo término de la serie de fibonacci, donde n es mayor que 70. (consume mucho tiempo)

  • Calcular factoriales de grandes números. (consume mucho tiempo)

  • Buscar todo lo posible rutas entre dos nodos, en un gráfico. (consumo de memoria)

 3
Author: Rushil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-07 13:45:18
  1. Desafío Oficial RSA
  2. Unofficial RSA Challenge - Agarra algún texto cifrado que quieras leer en texto plano. Deja que la computadora lo haga. Si u utiliza un algoritmo aleatorio, hay una probabilidad pequeña pero no nula de que u tenga éxito.
 1
Author: emory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-12 01:20:40

Estaba jugando con la prioridad de subprocesos en Java y usé el código a continuación. Parece mantener la CPU lo suficientemente ocupada como para que la prioridad del subproceso marque la diferencia.

@Test
public void testCreateMultipleThreadsWithDifferentPriorities() throws Exception {
    class MyRunnable implements Runnable {
        @Override
        public void run() {
            for (int i=0; i<1_000_000; i++) {
                double d = tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(123456789.123456789))))))))));
                cbrt(d);
            }
            LOGGER.debug("I am {}, and I have finished", Thread.currentThread().getName());
        }
    }
    final int NUMBER_OF_THREADS = 32;
    List<Thread> threadList = new ArrayList<Thread>(NUMBER_OF_THREADS);
    for (int i=1; i<=NUMBER_OF_THREADS; i++) {
        Thread t = new Thread(new MyRunnable());
        if (i == NUMBER_OF_THREADS) {
            // Last thread gets MAX_PRIORITY
            t.setPriority(Thread.MAX_PRIORITY);
            t.setName("T-" + i + "-MAX_PRIORITY");
        } else {
            // All other threads get MIN_PRIORITY
            t.setPriority(Thread.MIN_PRIORITY);
            t.setName("T-" + i);
        }
        threadList.add(t);
    }

    threadList.forEach(t->t.start());
    for (Thread t : threadList) {
        t.join();
    }
}
 0
Author: Jim Tough,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-15 14:14:06