Como determinar o número de núcleos de GPU sendo utilizados para um processo?

4

Como sabemos, se houver 4 núcleos na CPU, a utilização máxima seria de 400% e, se a utilização total for de 200%, ela será analisada, pois 2 núcleos foram usados entre 4 núcleos.

Assim, no caso das GPUs, a utilização máxima é de 100% e, se a utilização total for de 80%, como analisar quantos núcleos foram utilizados?

Para gráficos nvidia, nvidia-smi pode ser usado para ver a utilização da GPU nvidia.

Para gráficos intel, o intel_gpu_time / intel-gpu-top pode ser usado para ver a utilização do iGPU.

Mas os dois não estão mostrando o número de núcleos de gpu sendo utilizados. Existe alguma maneira de fazer isso?

Estou usando o Linux. Tanto o Ubuntu 14.04 como o Centos 7.2

    
por Vanns 04.08.2016 / 10:50

1 resposta

3

Em GPUs, 100% de utilização significa que todos os núcleos estão basicamente executando instruções. Ele está sendo executado com desempenho máximo quando todas essas instruções são operações de adição com multiplicação por fusão: a = a + b * c , o que as GPUs mais atuais podem fazer usando apenas uma única instrução.

Quando você está escrevendo um programa que realiza computação na GPU (usando CUDA ou OpenCL), você distribui o trabalho em uma chamada grade de blocos de threads (terminologia CUDA). Cabe à GPU agendar todos esses threads (em 'warps' de 32 threads) para manter todos os núcleos da GPU ocupados. Eu não sei como você está familiarizado com este assunto, mas isso introdução pode ser uma leitura interessante.

Um exemplo explica como isso se relaciona com a utilização. Digamos que a GPU esteja inativa e você inicie um aplicativo que lança um kernel apenas para um único bloco de encadeamento, mas com cálculos suficientes dentro desse bloco. A GPU agendará o bloco de threads para um dos multiprocessadores de streaming (SMs = grupo de 128 núcleos) na GPU. No caso de, por exemplo, a Nvidia GTX 1080, que possui 20 SMs, isso resultaria em uma utilização de apenas (1/20 * 100%) = 5%.

Dado este conhecimento básico de computação GPU, você pode executá-lo através do Nvidia Visual Profiler (para CUDA aplicativos) ou através do CodeXL para (aplicativos OpenCL) para ver as configurações de thread de qualquer kernel que o aplicativo usa para raciocinar sobre a utilização da GPU. Mas isso não é tudo, essa ferramenta é inestimável para ver exatamente que tipo de operações (e quão eficiente) a GPU está executando.

    
por 26.08.2016 / 20:00