Continuando com minha dica profissional anterior, na verdade mais como uma opinião, sobre aplicativos intensivos de CPU e memória e a desconsideração pelo conceito predominante, esta é uma introdução rápida à identificação de código intensivo de memória e CPU. Antes de começar, entretanto, vamos definir algumas coisas para sabermos como estou usando as palavras que estou usando.
Código : qualquer conjunto de instruções escrito em uma linguagem de programação
CPU Intensive : Qualquer código que resulte no trabalho sendo empurrado principalmente para a CPU
Memória intensiva : qualquer código que resulte no trabalho sendo empurrado principalmente para a memória
Memória intensiva parece uma definição estranha e eu particularmente não gosto da forma como está redigida. No entanto, não conheço melhor maneira de colocar isso neste contexto. Não é que o trabalho real seja feito apenas pela sua memória, no entanto, ele deve representar o fato de que o impacto na CPU é nada ou mínimo.
No momento, vamos examinar um exemplo rápido para ambos os casos. Esses serão exemplos simples, mas eles fazem o trabalho de apresentar o conceito a você e explicar por que eles são um ou outro.
Código intensivo de CPU
“ `C ++
incluir <time.h>
int main ()
{
time_t timer;
tempo (& cronômetro);
}
“ `
O código acima usa muito a CPU. A razão é que o modo como o tempo realmente funciona é fazer com que a CPU calcule o número de segundos desde a Época, que no momento é 1º de janeiro de 2000. Como você pode imaginar, esse é um cálculo matemático bastante intenso.
Código Intensivo de Memória
“ `C ++
int main ()
{
int x = 2;
int y;
y = x;
}
“ `
O código acima é intensivo em memória. Nesse caso, todo o trabalho é colocado na memória porque tudo o que estamos fazendo é atribuição. Isso não causará explosões no uso da memória, mas não o torna menos um exemplo de código intensivo de memória.
O que me leva ao meu próximo ponto. A ideia de memória e código intensivo de CPU é amplamente relativa. Isso quer dizer que nem todos os exemplos de memória ou código intensivo de CPU vão atirar instantaneamente em seu uso de memória ou CPU. No entanto, isso não significa que a designação não se aplica e, em geral, a maioria dos aplicativos que fazemos vai usar pedaços de memória que não são pequenos e ocupam um trabalho de CPU que não é simples. O exemplo acima de CPU Intensive Code, por exemplo, disparará instantaneamente um de seus núcleos com até 100% de uso. Dependendo do seu computador e processador, você pode ver um salto instantâneo de quantidades iguais em todos os seus núcleos conforme ele distribui o trabalho. Fazer a chamada de tempo em um loop for manterá o uso da CPU em 100% até que o loop for termine – novamente,
Às vezes, pode ser mais difícil dizer se o código faz uso intensivo de memória ou CPU, então vamos ver um exemplo diferente.
int main()
{
int x[10];
for( int i(0); i < 10;i++)
x[i]=1;
for( int i(0);i < 10;i++)
for( int y(0);y<10;y++)
x[y] = x[i] + 1
}
E quanto ao acima? Bem vamos ver.
int x[10];
Obviamente, esta é uma operação de memória. Estamos criando uma matriz de inteiros.
for(int i(0);i<10;i++)
x[i]=1;
Esta é uma combinação de memória e CPU. O loop for é intensivo para a CPU, mas a atribuição é intensiva para a memória.
for( int i(0);i < 10;i++)
for( int y(0);y<10;y++)
x[y] = x[i] + 1
Isso é um pouco mais confuso certo? Tecnicamente, os dois loops exigem cálculos, bem como a atribuição. Já tivemos um loop for adicional também e, ao que parece, temos mais trabalho que é enviado de volta para a CPU do que trabalho que é feito na memória. Novamente, este é um sistema baseado na relatividade, então, na realidade, nada disso causaria uma sobrecarga em qualquer computador. No entanto, isso não torna a operação menos intensiva para a CPU.
Agora que você teve uma introdução básica ao conceito de Código Intensivo de Memória e CPU, espero que comece a aplicá-lo em seus projetos. Pense em coisas que poderiam ser feitas melhor em uma operação com uso intensivo de memória do que em uma operação com uso intensivo de CPU. Pense em maneiras de aproveitar o fato de que você pode decidir qual é usado para ajudá-lo a distribuir o processo entre os recursos, o que pode, em última análise, acelerar o programa.
No próximo tutorial de dica profissional, entraremos no código de um projeto de código aberto chamado PCSX2 e decifraremos parte do código para determinar as operações com uso intensivo de memória e CPU.