Escolar Documentos
Profissional Documentos
Cultura Documentos
São Luís
2019
1. Proposta de Algoritmo
while (numGeracoes -- && Aval < MAXAVA && erro > (double) 0.0F){
numCruza=NUMCRU;
while (numCruza --){
pa1=Selecao(&P);
pa2=Selecao(&P);
if (pa1 != pa2)
CruzaBlend(&P, pa1, pa2, P.pior, xalfa);
else
P.iguais++;
if (pMuta > rand()%100){
nu_mutate (P.indiv[P.pior].var, P.tamInd, P.tamPop,
MAXGER - numGeracoes, MNUNI);
P.numMuta ++;
}
fit = funccod[funcao](P.indiv[P.pior].var, P.tamInd);
AtualizaPop(&P, P.pior, fit, MAXGER - numGeracoes);
}
return sum;
}
return sum;
}
return (1+sum+pro);
}
return sum;
}
return sum;
}
2. Resultados
3. Considerações Finais
Continuando a análise da execução do código que foi sugerido para este trabalho, a
partir da segunda execução, como há uma região crítica para fazer o switch, e este switch
varia entre 0 ou 1, metade das threads irão tentar ler uma variável que ao mesmo tempo
está sendo escrita pela outra metade das threads. Por isso, quando o código sugerido era
executado, ou ele dava um erro de segmentation fault ou ele dava um resultado incoerente
(figura 1). Por isso não foi feita a separação sugerida.
Assim, verifica-se que este código, apesar de ser paralelizável, não apresenta
melhoras quando executando paralelamente com OpenMP, em alguns casos até piora.