Чтобы сравнить C++ и Java по определенным задачам, я создал две аналогичные программы: одну на Java и одну на C++. Когда я запускаю Java, он занимает 25% процессор без колебаний, чего вы ожидаете, когда я использую четырехъядерный ядро. Тем не менее, версия C++ использует только около 8% и сильно колеблется. Я запускаю обе программы на том же компьютере, в той же ОС, с теми же программами, которые активны в фоновом режиме. Как заставить C++ использовать одно полное ядро? Это две программы, которые не прерываются ничем. Они оба запрашивают некоторую информацию, а затем вводят бесконечный цикл до выхода из программы, давая обратную связь о том, сколько вычислений в секунду.Выполнение C++ на полной скорости
Код:
Чтобы ответить на некоторые вопросы:
Я в основном зацикливание кучу кода и, видя, как часто в секунду это петли. Проблема в том, что он не использует весь процессор, который он может использовать. Все дело в том, чтобы один и тот же процессор выполнял одну и ту же задачу в Java и C++ и сравнивал количество циклов в секунду. Но если вы используете нерегулярные объемы процессорного времени, а другие - стабилизируются циклически с определенным процентом, их трудно сравнивать. Кстати, если я попрошу его выполнить это:
while(true){}
Требуется 25%, почему он не делает это с моим кодом?
---- редактировать: ----
После нескольких экспериментов, кажется, что мой код начинает использовать менее чем на 25%, если я использую COUT заявление. Мне непонятно, почему cout приведет к тому, что программа будет использовать меньше процессоров (я предполагаю, что она приостанавливается до тех пор, пока не будет написано заявление, которое занимает некоторое время?
С этими знаниями я перепрограммирую обе программы (чтобы их сохранить сопоставим) и просто сообщайте результаты через 60 секунд, а не каждый раз, когда он завершает цикл.
Спасибо за помощь, некоторые из советов были действительно полезны. После того, как я обнаружил ответ, кто-то также оказал это как ответ, поэтому, даже если бы я не нашел его сам, я бы получил ответ. Спасибо!
(хотя я хотел бы знать, почему std :: cout занимает такое количество времени)
Зависит полностью от того, что он делает. Возможно, это время ждет ... чего-то. Память, диск, i/o, я не знаю. – BoBTFish
Без просмотра код, невозможно. Ваша программа на C++ менее эффективна или скомпилирована без оптимизации или чего-то еще. – Joe
Я мог бы опубликовать код, если вы считаете это полезным, но не менее эффективный означает, что он просто делает меньше с использованием процессора? – Wysaard