Энергопотребление кода OpenCL, работающего на графическом процессоре NVIDIA
Я пытаюсь запустить код OpenCL для декодера MJPEG на графическом процессоре Nvidia (Tesla K20c). Я задавал вопросы на других веб-сайтах по обмену стеками о реализации декодера на графическом процессоре, и сейчас я пытаюсь рассчитать энергопотребление каждого отдельного ядра OpenCL, работающего на Tesla K20c. (Я перевел 4 последовательные функции C, а именно iqzz, IDCT, повышающую дискретизацию и преобразование цветов в ядра OpenCL).
Я использую nvidia-smi
чтобы проверить мощность, потребляемую графическим процессором, когда я запускаю свой код OpenCL. Потребляемая мощность холостого хода K20c составляет 17 Вт, когда код не запускается.
Я использовал следующий метод, чтобы проверить мощность каждого отдельного ядра:
Чтобы рассчитать энергопотребление конкретного ядра OpenCL, я закомментировал оставшиеся ядра OpenCL и позволил их эквивалентным версиям C работать на их месте. Я делал это, чтобы код работал правильно. Следовательно, когда я хочу запустить другое ядро OpenCL, я активирую (раскомментирую) однопоточные версии C других ядер.
Каждое отдельное ядро, мощность которого я хотел изучить вышеописанным способом, потребляло мощность в диапазоне приблизительно от 49 до 55 Вт. Ядро для функции Upsampling потребляло наибольшее количество энергии (55 Вт).
Более того, я считаю, что если я запускаю все ядра OpenCL одновременно на графическом процессоре, общее значение потребляемой мощности должно быть суммой значений, которые я получил, когда запускал каждое ядро отдельно. Вместо этого общее энергопотребление, когда я запускал все ядра сразу, составило 54,83 Вт! Потребляемая мощность даже ниже, чем мощность, потребляемая ядром для Upsampling.
Есть ли у вас какие-либо предложения для правильного расчета мощности, потребляемой каждым ядром в моем коде OpenCL? В большинстве исследовательских работ (например, в этой) упоминаются причудливые методы, такие как подключение зондов к шине PCI, процессору и графическому процессору. Однако у меня есть закрытая система, и я не могу использовать физические средства для измерения мощности.
Сложение:
Процент использования графического процессора достиг 98 %, когда я однажды добавил printf
заявления к одному из моих ядер.
1 ответ
nvidia-smi
возвращает информацию об энергопотреблении для всего графического процессора, который, я думаю, не сможет дать вам необходимую степень детализации.
Потребление энергии для "отдельного ядра" не имеет большого смысла в этом контексте; GPU будет включен и потреблять некоторое количество энергии, независимо от того, что вы используете на нем. (Этот номер должен быть вашим базовым показателем для потребления энергии.)
- Число 54,83 Вт, которое вы указали, означает, что ваше ядро потребляет меньше энергии, чем повышающая дискретизация, что имеет смысл, поскольку повышающая дискретизация является очень дорогостоящей операцией, и ее легко можно сжечь на 170 мВт больше.
(Измерение холостого хода 17 Вт вводит в заблуждение, потому что чипсет, вероятно, находится в некотором состоянии приостановки ACPI, когда части чипа полностью отключены, что позволяет "ненормально" низкое энергопотребление, которого вы никогда не сможете достичь при любом типе ядра.)