На GPU использование 100% означает, что все ядра в основном выполняют инструкции. Он работает с максимальной производительностью, когда все эти инструкции представляют собой операции слияния-умножения-сложения: a = a + b * c
, что большинство современных графических процессоров могут выполнять, используя только одну инструкцию.
Когда вы пишете программу, которая выполняет вычисления на GPU (с использованием CUDA или OpenCL), вы распределяете работу в так называемых сетках блоков потоков (терминология CUDA). GPU должен планировать все эти потоки (в «перекосах» 32 потоков), чтобы все ядра GPU были заняты. Я не знаю, насколько вы знакомы с этим предметом, но это введение может быть интересным чтением.
Пример объясняет, как это связано с использованием. Допустим, они GPU простаивают, а затем вы запускаете приложение, которое запускает ядро только для одного потока, но с достаточным количеством вычислений в этом блоке. Графический процессор будет планировать блок потоков на одном из потоковых мультипроцессоров (SM = группа из 128 ядер) на графическом процессоре. В случае, например, Nvidia GTX 1080, который имеет 20 SM, это приведет к использованию только (1/20 * 100%) = 5%.
Имея базовые знания в области вычислений на GPU, вы можете запустить их через Nvidia Visual Profiler (для приложений CUDA) или через CodeXL for (приложения OpenCL), чтобы увидеть эти конфигурации потоков для любого ядра, которое приложение использует для обоснования использования GPU , Но это еще не все, этот инструмент неоценим, чтобы точно знать, какие операции (и насколько эффективно) выполняет графический процессор.