"sys time" ao rodar o programa

1. "sys time" ao rodar o programa

Marcos Paulo
mpoloureiro

(usa Debian)

Enviado em 28/03/2011 - 17:37h

Ola a todos!
Recentemente me deparei com um problema na hora de executar um programa em c.
Tenho um programa grande, composto de muitas subrotinas. Dentro de uma delas (Sub1),
existe um loop que chama uma outra subrotina (Sub2) diversas vezes. O fato é que,
recentemente precisei fazer uma modificação na Sub2 e criei novos vetores. O problema
é que agora, apos compilar o programa, a execuçao do mesmo esta sendo feita usando
o "sys time" do processador (antes era o "user time").
Vou tentar especificar o problema em codigo.
-------------------------------------------------------------------------------------------------
void Sub1 ();
void Sub2 ();

void main ()
{
...
Sub1();
...
}

void Sub1()
{
...
for (i=0;i<1000000;i++)
{
...
Sub2 ();
...
}
...

return;
}

void Sub2 ()
{
int *v1,*v2,...;

v1=malloc...
v2=malloc...
for (i=0;i<1000000;i++)
{
v1[i]=0;
v2[i]=0;
...
}

free(v1);
free(v2);
...

return;
}
-------------------------------------------------------------------------------------------------

Note que Sub2 apenas cria um(s) vetor(es) (sim, os tamanhos que eu uso sao da ordem de 1.000.000), atribui
0 a todos os indices e fecha o(s) vetor(s).

Supondo que eu precise criar dois vetores, v1 e v2. Atribuindo tipos diferentes a cada um (ex: int e unsigned long),
o problema NAO ocorre, ou seja, todo o tempo de processamento é de "user time". Utilizando tipos iguais a execuçao
passa para "sys time"

Se ao invés de criar os vetores em Sub2 eu simplesmente cria-los em Sub 1, o programa volta a rodar integralmente
em "user time".
-------------------------------------
void Sub1()
{
...
for (i=0;i<1000000;i++)
{
...
int *v1,*v2,...;

v1=malloc...
v2=malloc...
for (j=0;j<1000000;j++)
{
v1[j]=0;
v2[j]=0;
...
}

free(v1);
free(v2);

...
}
...

return;
}
-------------------------------------

Espero ter conseguido me fazer entender.

Voces podem me ajudar a esclerecer este "fenomeno"? Ou mesmo me dizer se existe algum tipo de "efeito"
quando um programa roda utilizando o "sys time"?

Obrigado







  


2. Re: "sys time" ao rodar o programa

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 04/04/2011 - 00:47h

Bom:

Quanto ao fenomeno de vetores de tipos diferentes ou iguais terem comportamentos distintos não sei lhe dizer, mas o time eu posso dar uma palavrinha (desculpe se o que vou dizer já é de seu conhecimento):

Sys time é o tempo gasto pela CPU executando código do usuário, ou seja, seu programa C própriamente dito.
Porém, quando você aloca memória para um array com malloc, por exemplo, esse malloc faz uma chamada de sistema (syscall) ao SO pedindo tanto de memória. Quando o SO comeca a fazer a alocação dessa memória para o malloc, esse tempo gasto é o sys time.

Logo, se voce cria array em um método chamado várias vezes, o malloc roda várias vezes. Logo, é compreensível que a maior parte do tempo seja gasta com chamadas de sistema. Agora, quando a essa questão de tipo de variáveis influenciarem nesse comportamento não sei lhe dizer.

Haveria problema em postar seu código na integra, bem como compila ele e os parâmetros de entrada que está testando? Talvez com o código em mãos nós possamos achar um porque disso.

Espero ter ajudado!


3. Re: "sys time" ao rodar o programa

Marcos Paulo
mpoloureiro

(usa Debian)

Enviado em 05/04/2011 - 05:15h

Obrigado Hebang!

Está certo o que você disse. Para evitar o problema, criei o vetor fora da função, passando ele apenas como argumento.
Assim, o vetor não é continuamente alocado e consequentemente "não utilizo" o sys time.

Valeu!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts