С точки зрения суперкомпьютеров, лучше не думать о загрузке CPU / GPU в процентах, а определить, сколько операций требуется вашей проблеме, а затем сравнить это с пиковой производительностью системы.
Если вы получаете 100% загрузку ЦП, это не обязательно означает, что вы получаете всю производительность системы. Процессоры часто могут делать несколько разных вещей одновременно, скажем, деление и сложение. Если вы можете начать разделение рано, оно может быть перекрыто дополнением. Ваш настольный ЦП, скорее всего, имеет неработающий модуль, который будет переупорядочивать операторы, чтобы извлечь выгоду из таких совпадений. Или если у вас есть следующая программа:
if (expr1)
expr2;
else
expr3;
Процессор переупорядочения попытается вычислить три выражения одновременно, а затем отбросит результат одного из них. Это делает это быстрее в целом. Если в вашей программе есть какой-то блокировщик, и вы не можете изменить порядок, то вы используете меньше дорожек в ЦП, но, вероятно, он все равно будет показывать 100%.
Тогда у вас есть SIMD-функции в процессорах, которые являются векторными операциями. Это похоже на GPGPU-light в том смысле, что вы обычно выполняете только четыре или восемь операций одновременно, а графические процессоры - 32 или 64. Тем не менее, вы должны использовать это для запуска FLOPS.
Такие вещи, как ложное совместное использование, могут привести к высокой стоимости синхронизации, которая обычно проявляется в виде загрузки ядра в Linux. Процессор полностью используется, но у вас мало полезной пропускной способности.
Я немного программировал на машине IBM Blue Gene / Q. Он имеет много уровней иерархии ( схема устаревшего Blue Gene / L ) и, следовательно, его трудно программировать эффективно. Вам придется использовать полную иерархию вплоть до SIMD и SMT (Intel называет это HyperThreading), чтобы добиться максимальной производительности.
И тогда сеть часто ограничивает вас. Поэтому выясняется, что в (настенные часы) быстрее вычислять данные одновременно на нескольких процессорах, а не передавать их по сети. Это увеличит нагрузку на процессоры и ускорит работу программы. Но реальная пропускная способность программы не так хороша, как кажется из необработанных чисел.
Если вы добавите графические процессоры к миксу, вам будет еще сложнее управлять всем этим, чтобы повысить производительность. Это будет одна из тех вещей, которые я начну делать в своей магистерской диссертации Lattice QCD через пару месяцев.
NO-OP
s одновременно, что приведет к загрузке обоих на 100%.