Pessoal,
estou fazendo um trabalho que compara a execução de um programa sequencial com um Multithread.
O código conta a quantidade de chaves iguais existentes em dois arrays, um com 2.000.000 números e outro com 20.000, o tempo gasto é cronometrado.
Obs: Os arrays são mantidos com a mesma base de números, ou seja independente do SO, da pesquisa ser Sequencial ou Multithread, os números estão sempre na mesma posição.
Programa Sequencial:
Thread.currentThread().setName("Thread Única");
// faz a comparação de forma sequencial
System.out.println(Thread.currentThread().getName() + " Pesquisa iniciada no horario: " + getDateTime());
int cont = 0;
for (int j = 0; j < 20000;){
for (int i = 0; i < 2000000; i++){
if (vetor1[i] == vetor2[j]) {
cont++;
}
}
j = j + 1;
}
System.out.println(Thread.currentThread().getName() + " Pesquisa encerrada no horario: " + getDateTime() + " Valor do contador atualizado: " + cont);
Programa"Multithread"( aproveitando que o processador é um Phenom-X3-Triple-Core):
private static AtomicInteger contador = new AtomicInteger(0);
public void run(){
// Com threads a carga de trabalho é dividida entre os 3 núcleos "qtde_nucleos = 3"
System.out.println(Thread.currentThread().getName()+" iniciada no horario: "+getDateTime());
for(int j=inicio_thread;j<20000;)
{
for(int i=0;i<2000000;i++)
{
if(vetor1[i] == vetor2[j])
{
contador.incrementAndGet();
}
}
j=j+qtde_nucleos;
}
System.out.println(Thread.currentThread().getName()+" Encerrado no horario: "+ getDateTime()+" Valor do contador atualizado: "+contador);
}
[u][color=red]Resultados:[/color][/u]
[b]Windows 7 [/b]
Execução Sequencial: 2 minutos 23 segundos.
Execução com Threads: 51 segundos.
Ubuntu 11.04
Execução sequencial: 2 minutos 14 segundos.
Execução com Threads: 1 minuto 54 segundos.
No Win 7 o resultado foi o esperado, a execução do código multithread foi quase 3 vezes mais rápida que o código sequencial, enquanto no Ubuntu 11.04 a melhora de desempenho fica em torno de 15% somente, muito abaixo!
Então, porque no Win7 o desempenho foi tão superior?
Agradeço a qualquer ajuda!
E até mais ver!