Возможно, это не ваша ОС, а компилятор. Компиляторы движутся цели, из года в год они улучшают (надеюсь) их автоматическую оптимизацию. Ваш код все еще может быть векторизован, и вы этого не знаете. Да, я понимаю, что вы используете новый компилятор на своем ноутбуке.
Посмотрите, есть ли у вас дельта производительности, когда вы отключите все оптимизации (-O0 или некоторые такие). Если вы пытаетесь максимизировать циклы CPU, вы можете использовать численные вычисления, которые легко векторизовать. То же самое касается распараллеливания. Вы также можете получить общие отчеты об оптимизации, а также специальный отчет по векторизации от gcc. Я не помню параметр, но вы можете легко найти его в режиме онлайн.
Также существует мир различий между # ядрами на сервере (возможно, многоядерным Xeon) и вашим i3. Ваш i3 имеет 2 ядра, каждый из которых способен работать на двух аппаратных потоках, что означает, что у вас есть 4 процессора. В зависимости от конфигурации вашего сервера вы можете иметь до 18 ядер с двумя аппаратными потоками в процессоре. Это соответствует 36 эффективным процессорам. Кроме того, вы можете иметь несколько процессоров на материнскую плату. Ты можешь сделать математику.
Оба компилятора и ОС могут влиять на использование процессора приложения. Если вы пытаетесь обработать несколько потоков, чтобы попробовать и потреблять обработку, ОС может обрабатывать их на разных процессорах, что снижает использование ЦП в вашей системе. Даже если вы используете чистый последовательный код, интеллектуальный компилятор может разбить код на несколько потоков, которые ваша библиотека потоков может распространять на эти 36 эффективных процессоров.
Вы также можете измерить количество обработки, которую вы можете совершить. Если этот сервер не находится под вашим контролем, администратор может установить политику, ограничивающую процент обработки, которую может использовать любое приложение.
Итак, в заключении: (1) Отключить все оптимизации (2) Проверьте на индивидуальном использовании ядра процессора, чтобы увидеть, что нагрузка на все ваши эффективных процессоры (3) реструктуризировать ваш код откупа задачи, которые будут распределенных по вашим эффективным процессорам, каждый из которых потребляет как можно больше обработки. (4) Убедитесь, что ваш администратор не ограничивает объем обработки отдельными приложениями.
Какой инструмент вы используете для показа использования ЦП? Возможно, что инструмент показывает использование как часть * всех * процессоров, поэтому, если ваш код является однопоточным, он просто будет использовать небольшую часть мультипроцессора. – Rufflewind
Я использую верх. Но время, затрачиваемое на работу на сервере, больше, чем в моем ноутбуке. –
Я думаю, что ваш подход неправильный. Вы должны думать о том, «как я могу заставить это приложение вычислять/выполнять то, что ему нужно делать наиболее эффективно», а не «как я могу сделать такую программу с ограниченным процессором, что она использует как можно больше времени процессора». , – twalberg