Estou tentando executar o código OpenCL para um decodificador MJPEG em uma GPU Nvidia (Tesla K20c). Fiz perguntas sobre outros sites de troca de pilha sobre a implementação o decodificador na GPU e agora estou tentando calcular o consumo de energia de cada kernel OpenCL individual sendo executado no Tesla K20c.
(eu traduzi 4 funções seqüenciais em C, ou seja, iqzz, IDCT, upsampling e conversão de cores em kernels OpenCL).
Eu tenho usado nvidia-smi
para verificar a potência sendo gerada pela GPU quando estou executando meu código OpenCL. O consumo de energia ocioso do K20c é de 17 W quando nenhum código está sendo executado.
Euuseioseguintemétodoparaexaminaropoderdecadakernelindividual:
ParacalcularoconsumodeenergiadeumdeterminadokerneldoOpenCL,tenhocomenteioskernelsOpenCLrestantesedeixeisuasversõesequivalentesdeCrodarememseulugar.Eutenhofeitoissoparadeixarocódigofuncionarcorretamente.Assim,quandoeuqueroexecutaroutrokernelOpenCL,euativo(descomente)asversõesCdeumúnicothreaddosoutroskernels.
Cadanúcleocujopodereuqueriaexaminardamaneiraacima,extraíapodernafaixadeaproximadamente49Wa55W.OkerneldafunçãoUpsamplingconsumiaamaiorquantidadedeenergia(55W).
Alémdisso,acreditoque,seeuexecutartodososkernelsOpenCLdeumasóveznaGPU,ovalortotaldeconsumodeenergiadeveserumasomadosvaloresqueobtivequandoexecuteicadakernelindividualmente.
Emvezdisso,oconsumototaldeenergiaquandoeucorritodososkernelsdeumavezveioaser54.83W!OconsumodeenergiaéaindamenorqueaenergiaconsumidapelokernelparaUpsampling.
VocêtemalgumasugestãoparacalcularcorretamenteaenergiaconsumidaporcadakernelnomeucódigoOpenCL?Amaioriadostrabalhosdepesquisa(comoisso menciona técnicas sofisticadas, como anexar sondas ao barramento PCI, à CPU e à GPU. No entanto, eu tenho um sistema fechado e não posso usar meios físicos para medir o poder.
ADIÇÃO:
A porcentagem de utilização da GPU alcançou 98% quando uma vez adicionei as declarações printf
a um dos meus kernels.