como tornar a execução de um programa Matlab mais rápida?

3

Existem técnicas para tornar o código do MATLAB mais rápido?

Estou falando de coisas que podem tornar meu PC mais rápido (como parar um pouco de .exe ou software para melhorar o desempenho do PC). Notei que às vezes meu PC executando a mesma tarefa em dois momentos diferentes: por exemplo, ele pode executar um programa em 45 segundos e o mesmo programa novamente em 10 minutos.

    
por bzak 19.06.2010 / 23:30

4 respostas

7

O MATLAB está lento no seu computador ou nos programas que você escreveu no MATLAB?

O MATLAB faz uso intenso de alocação e realocação de memória dinâmica; O redimensionamento da matriz ou da matriz pode ser muito lento e não determinístico; Se uma matriz ou matriz cresce, nova memória é alocada e os dados existentes copiados para a nova memória antes de excluir a cópia antiga. Você pode evitar essa sobrecarga de memória pré-alocando esses arrays: por exemplo, este código:

x = 0;
for k = 2:1000
   x(k) = x(k-1) + 5;
end

faz com que x seja redimensionado em cada iteração e será executado muito lentamente. Por comparação, o seguinte código:

x = zeros(1, 1000);
for k = 2:1000
   x(k) = x(k-1) + 5;
end

pré-aloca a matriz para que nenhum redimensionamento ocorra e seja executado consideravelmente mais rápido.

O site do MathWorks tem uma página inteira detalhando esta e outras técnicas de melhoria de desempenho; a página abrange o seguinte:

  • Pré-alocar matrizes
  • Usar matrizes distribuídas para conjuntos de dados grandes
  • Quando possível, substitua por parfor (paralela para)
  • Limitando tamanho e complexidade
  • Atribuindo a variáveis
  • Usando operadores lógicos apropriados
  • Sobrecarga de funções incorporadas
  • Funções são geralmente mais rápidas que scripts
  • Carregar e salvar são mais rápidos que as funções de E / S de arquivos
  • Vetorização de Loops
  • Evite grandes processos em segundo plano

Note que a solução que você sugeriu é a última na lista do MathWorks, você deve olhar para todos os outros pontos primeiro, a menos que você esteja fazendo algo obviamente com fome de recursos, como rodar uma máquina virtual ou reproduzir vídeo em alta definição ao mesmo tempo Como rodar o MATLAB, olhar para outros processos em execução provavelmente está suando as pequenas coisas.

    
por 19.06.2010 / 23:58
3

Depois de seguir as sugestões do Clifford, você pode usar as ferramentas de criação de perfil do MATLAB para verificar onde seu programa passa a maior parte do tempo, geralmente não muitas linhas / funções. Em seguida, concentre-se em otimizar essas linhas.

    
por 20.06.2010 / 11:37
3

Se o tempo de execução do seu código for altamente variável, é provável que você tenha um problema em que, às vezes, até certo ponto, você esteja se aproximando da memória virtual. Quando o MATLAB deve usar o espaço de troca, as coisas diminuem drasticamente. Afinal, você está usando espaço em disco para substituir a disponibilidade de RAM física. Essa é a melhor razão que posso oferecer para um código que varia no tempo em uma ordem de grandeza no tempo gasto em diferentes execuções.

Use a ferramenta de criação de perfil para determinar onde a hora está indo. Olhe atentamente para essas linhas. Você está criando uma grande matriz, mesmo que isso seja feito temporariamente em alguma função que você chama?

Verifique seu sistema. Verifique se, quando isso acontece, se a CPU está praticamente inativa enquanto os acessos ao disco são pesados.

Claro, se isso é como eu sugiro, então a solução também é lógica.

  • Torne seu algoritmo mais eficiente em termos de memória. Isso é sempre uma boa coisa.

  • Obtenha mais RAM se atualmente você tem menos de 2 GB.

  • Use a versão de 64 bits do MATLAB e obtenha mais RAM.

por 20.06.2010 / 15:45
2

De acordo comigo, deve haver algum gargalo de recursos em todo o sistema, como o acesso ao disco ou o problema de troca de memória. Tente ver o que aparece no Process Explorer , onde você pode descobrir o que está acontecendo o sistema.

    
por 19.06.2010 / 23:35