Мне нужна помощь или некоторые идеи о том, как заставить цикл в этом коде прекратить выполнение, когда коэффициент speedUp опустится до определенного значения. Идея этого метода постоянно запускает все большее количество потоков и выводит коэффициент ускорения из результатов. Коэффициент округления speedUp - это количество ядер, присутствующих на машине. Запуск задачи с четырьмя потоками будет иметь тот же коэффициент ускорения, что и 16-разрядная задача на 4-ядерном компьютере. Я хочу, чтобы у меня не было возможности вручную установить количество потоков для запуска. Когда коэффициент speedUp опустится до значения, я хочу, чтобы программа завершилась. Нет необходимости запускать тест для 8, 16 или 32 потоков, если коэффициент ускорения уже установлен на уровне 2, например.Как получить цикл для остановки
Пример вывода для 4 сердечника машине:
Количество нитей испытания: 1 Скорость до фактор: 1,0
Количество нитей испытания: 2 Ускорение фактор: 1,8473736372646188
Количество течения: 4 Фактор ускорения: 3.9416666666666669
Количество тестируемых нитей: 8 Фактор ускорения: 3.9 750993377483446
Количество нитей испытания: 16 Скорость до фактор: 4,026086956521739
Эта машина имеет: 4 НАПОЛНЕНИЯ
приложение завершило выполнение. СПАСИБО ВАМ
private static void multiCoreTest() {
\t \t // A runnable for the threads
\t \t Counter task = new Counter(1500000000L);
\t \t
\t \t // A variable to store the number of threads to run
\t \t int threadMultiplier = 1;
\t \t
\t \t // A variable to hold the time it takes for a single thread to execute
\t \t double singleThreadTime = ThreadTest.runTime(1, task);
\t \t // Calculating speedup factor for a single thread task
\t \t double speedUp = (singleThreadTime * threadMultiplier)/(singleThreadTime);
\t
\t \t // Printing the speed up factor of a single thread
\t \t System.out.println("Number of threads tested: " + threadMultiplier);
\t \t System.out.println("Speed up factor: " + speedUp);
\t \t // Testing multiple threads
\t \t while (threadMultiplier < 16) {
\t \t \t // Increasing the number of threads by a factor of two
\t \t \t threadMultiplier *= 2;
\t \t \t // A variable to hold the time it takes for multiple threads to
\t \t \t // execute
\t \t \t double multiThreadTime = ThreadTest.runTime(threadMultiplier, task);
\t \t \t // Calculating speedup factor for multiple thread tests
\t \t \t speedUp = (singleThreadTime * threadMultiplier)/(multiThreadTime);
\t \t \t // Message to the user
\t \t \t System.out.println("\n" + "Number of threads tested: "
\t \t \t \t \t + threadMultiplier);
\t \t \t System.out.println("Speed up factor: " + speedUp);
\t \t }
\t \t // Print number of cores
\t \t System.out.println("\n" + "THIS MACHINE HAS: " + Math.round(speedUp)
\t \t \t \t + " CORES");
\t \t System.out.println("\n"
\t \t \t \t + "THE APPLICATION HAS COMPLETED EXECUTION. THANK YOU");
\t \t // Exiting the system
\t \t System.exit(0);
\t }
}
Спасибо, я попробую! Да, я знаю, что это простой способ найти ядра ха-ха. Моя параллель в инструкторе хочет, чтобы мы писали программу, которая делает это по-другому. – golferdrew32
BTW «Доступныепроцессоры» - это количество логических процессоров в машине, но не количество ядер, если у вас есть гиперпоточность, и если мы используем нашу привязанность или машина занята, вы получите очень разные результаты. –