Подтвердить что ты не робот

Примеры интенсивного расчета процессора?

Мне нужно несколько легко реализуемых вычислений с одним процессором и памятью, которые я могу написать в java для планировщика тестовых потоков.

Они должны быть немного трудоемкими, но, что более важно, потреблять ресурсы.

Любые идеи?

4b9b3361

Ответ 1

Несколько простых примеров задач, требующих процессора:

  • поиск простых чисел (включает в себя множество разделов BigInteger)
  • вычисление больших факториалов, например. 2000! ((вовлекает много умножений BigInteger)
  • много вычислений Math.tan(), это интересно, потому что Math.tan является родным, поэтому вы используете два стека вызовов: один для вызовов Java, другой для вызовов C).

Ответ 2

Умножьте две матрицы. Матрицы должны быть огромными и сохраняться на диске.

Поиск по строкам. Или, индексируйте огромный документ (обнаруживайте и подсчитывайте каждое слово или строки алфавитов). Например, вы можете индексировать все идентификаторы в исходном коде большого программного проекта.

Вычислить pi.

Поверните двумерную матрицу или изображение.

Сжатие огромных файлов.

...

Ответ 3

Тест на выгрузку процессора для PDP-11 был tan(atan(tan(atan(...))) и т.д. Очень сильно работает FPU, а также стек и регистры.

Ответ 4

Хорошо, это не Java, но это основано на Dhrystone найденный алгоритм поиска здесь. Эти реализации алгоритма могут дать вам представление о том, как это делается. Ссылка здесь содержит источники для C/С++ и Assembler для получения эталонных тестов.

Ответ 5

  • Вычислить n-й член ряда фибоначчи, где n больше 70. (время)

  • Вычислить факториалы больших чисел. (отнимает много времени)

  • Найти все возможные пути между двумя узлами, на графике. (потребляемая память)

Ответ 6

  • Официальный вызов RSA
  • Неофициальный вызов RSA. Возьмите некоторый зашифрованный текст, который вы хотите прочитать в открытом тексте. Пусть компьютер у него. Если u использует рандомизированный алгоритм, существует небольшая, но ненулевая вероятность того, что u будет успешным.

Ответ 7

Я смешался с приоритетом Thread в Java и использовал приведенный ниже код. Кажется, что процессор занят настолько, что приоритет потока имеет значение.

@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();
    }
}