Otimizadores de memória e CPU: eles são truques?

2

As ferramentas que analisam permitem que você use

por dotnetdev 13.04.2010 / 22:30

5 respostas

5

Fique longe dos "otimizadores de memória". Eles não ajudam você. Deixe o gerenciamento de memória no SO!

Relaciona os motivos: link

    
por 13.04.2010 / 22:53
5

Otimizadores de memória

Houve um tempo em que os usuários do DOS 386/486 tiveram que otimizar manualmente seus arquivos config.sys e autoexec.bat com cuidado para carregar o máximo possível de itens "altos" (acima de 640 K). Carregar a coisa errada primeiro pode fazer com que tudo caia no seu precioso espaço de 640 K.

Depois vieram os otimizadores de memória que descobriram essa coisa para você automaticamente. Eles atingiram a verdadeira utilidade e maturidade desde o momento em que o Windows 95 os tornou obsoletos.

Otimizadores de sistema

Outras coisas que os otimizadores de velocidade incluem incluem esvaziar a lixeira, desfragmentar o disco, limpar o registro, remover logs de instalação antigos, desinstalar drivers desnecessários e desinstalar fragmentos de programas antigos.

Se acontecer de limpar algo em um limiar, a melhoria da velocidade pode ser dramática. Geralmente não.

Como você pode imaginar, você mesmo pode fazer tudo isso sem gastar dinheiro.

    
por 13.04.2010 / 23:58
3

A julgar pelo seu nome de usuário, eu diria que você é um desenvolvedor de software como eu.

Se um aplicativo não for escrito para aproveitar o recurso de multiencadeamento, um aplicativo auxiliar não fará nada por você.

Se você estiver executando um aplicativo multi-threaded, e ele está escrito corretamente, os algoritmos de agendamento de thread no Windows vão ficar bem. Programas como este estão lá para tirar vantagem de pessoas que não sabem o que está acontecendo sob o capô.

Almost all modern computers have at least two processors, which are generally referred to as “cores”.

Deve ser um fracasso, já que todos sabemos que um núcleo e um processador são duas coisas diferentes.

    
por 13.04.2010 / 22:44
3
Pode haver um grão de verdade nas reivindicações desse programa em particular, mas, pelo que entendi, ele certamente não fará uma fração do que eles afirmam que seus efeitos potenciais são, exceto sob referenciais irrealistas executados em condições de testes muito artificiais ( as alegações feitas podem ser completamente verdadeiras, mas apenas sob condições que você provavelmente nunca experimentará).

Parece que o utilitário está aprimorando a afinidade do processador / núcleo. Por padrão, os processos podem alternar entre os núcleos na maioria dos sistemas operacionais - por exemplo, você verá um programa aparentemente usando ~ 25% de quatro núcleos ou ~ 50% de dois, em vez de ~ 100% de um.

Com a maioria dos projetos, se não todos, vários núcleos e / ou multiprocessador, um único encadeamento dentro de um processo (que pode ser o único encadeamento em um processo de encadeamento único) é vinculado à CPU e funciona em blocos de dados. menor que o cache L1 / L2 das CPUs durante a maior parte de sua operação operará de forma mais eficiente se ligado a um núcleo específico, em vez de poder saltar entre eles. Isso ocorre porque a movimentação entre os núcleos provavelmente significará que o cache L1 do novo núcleo precisa ser "preparado" (do cache L2 / L3 ou RAM principal) antes de um loop apertado para o qual o cache de outro núcleo já esteja preparado pode executar uma eficiência máxima . Isso é pior se o cache L2 ou L3 não tiver nenhum código / dados útil, o que provavelmente será o caso se o encadeamento tiver saltado para uma CPU física diferente. A diferença será mínima na melhor das hipóteses. Para fazer a diferença, o processo / thread precisa estar circulando através de um conjunto limitado de dados muitas vezes e mesmo se ele alternar os núcleos uma ou duas vezes por segundo para recuperar o cache L1 que muitas vezes é improvável de fazer uma quantidade significativa, a menos que você esteja cronometrando uma operação que levará dias no total.

"Por que os SOs não definem a afinidade de processo / thread de maneira mais agressiva se puder fazer a diferença?" é a questão que deve saltar para sua mente neste momento. Basicamente, no caso geral, faz tão pouca diferença e nos casos em que há vários processos ou encadeamentos de CPU que poderiam usar toda a potência de sua CPU obtendo a afinidade errada pode atrasar as coisas mais do que acertar, e você Ter todo o cálculo extra envolvido em "adivinhar" o que é certo para as circunstâncias atuais que poderiam matar ou reverter qualquer benefício geral. E, acima de tudo, regras rígidas e rápidas são poucas e distantes entre si, pois o que pode ser melhor para determinar certos processos em uma arquitetura específica pode ser muito menos ideal em outra. Assim, seu sistema operacional será otimizado para o caso geral, fazendo um pouco de otimização, mas não tentando muito. Se você está indo algo muito específico (digamos, um processo muito específico de processamento de dados ou processamento de dados que é quase a única coisa que roda na máquina) seu sistema operacional permitirá que você seja um usuário suficientemente privilegiado para ajustar a afinidade dos processos e permitir o programador para dar dicas ao sistema operacional sobre o que pode ser mais eficiente também - mas ajustes errados podem atrapalhar o escalonador em vez de ajudá-lo.

Longa história: os distribuidores desse software podem estar usando uma técnica que, em teoria, ajudará a maneira como eles dizem, mas no meu entender, você não vai notar diferença se o fizer e é igualmente susceptível de tornar as coisas mais lentas. Você provavelmente desperdiçará muitas vezes os minutos instalando isso e jogando com suas configurações do que economizaria seu CPU em décadas de operação intensiva de computação 24 horas por dia, 7 dias por semana!

Ainda mais curto: Quase, mas não totalmente, inteiramente óleo de cobra.

Ressalva: Na minha opinião, supondo que meu conhecimento sobre a área esteja correto!

    
por 13.04.2010 / 23:38
1

Sou um desenvolvedor, então vou analisar essa questão de uma perspectiva C / C ++. Supondo que eu esteja escrevendo um programa de GUI e não faça parte dele usando threads CreateThread() , então ele é single core e nada que você possa fazer ajudará. Se eu estiver usando CreateThread() e CreateProcess() , então, como programador, posso tentar definir a afinidade. Também posso definir prioridades de agendamento, embora sejam aproximadas com base nesses tipos de descrição: Baixa, Normal, Alta, AbaixoNormal, AcimaNormal. Os níveis de encadeamento subjacentes reais são 1-16 (17-32 para o código de nível do kernel), mas você não pode mapear para eles diretamente, apenas é colocado em uma lixeira conforme os cálculos do planejador. Eu não tenho mais controle do que sobre como eu controlo meus tópicos. As partes internas do Windows Schedular não são conhecidas fora da Microsoft, em parte porque a Microsoft as altera entre as versões do Windows para garantir que elas mantenham o uso do sistema e façam as coisas da melhor maneira possível.

A ideia de que outro aplicativo vai ajudar é ridícula, a menos que isso quebre o processo nos núcleos. Fazer isso seria muito difícil, se não no nível do kernel, e poderia interromper a aplicação de qualquer maneira. A tentativa de forçar o agendador a fazer algo diferente também é um desperdício de ciclos de CPU, já que você precisa fazer um cálculo para agilizar as coisas e depois aplicá-lo aos seus processos e threads.

Por fim, você pode tornar seu sistema mais instável usando ferramentas como essas. Os scanners antivírus são executados com baixa prioridade por um motivo, por exemplo. Leia sobre o valor de niceness de um processo no Linux (é o mesmo conceito no Windows: basicamente, os processos não são considerados bons se eles armazenarem recursos. No Linux, eles realmente têm menos tempo para esse comportamento ruim. recurso e retardar tudo). Assim, embora o programa deva ser capaz de lidar com isso, suas ferramentas podem dar aos processos mais prioridade do que eles realmente querem, ou menos quando precisam.

Como outros já disseram, é melhor deixar isso para o sistema operacional.

    
por 14.04.2010 / 00:13