Matrizes com threads

9 respostas
jggoa

Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado!

9 Respostas

jggoa

desculpem, sou novo em programação.

davidbuzatto

É um exercício da faculdade? O que você já fez ou tentou fazer? O que você quer paralelizar? O cálculo da multiplicação?

jggoa

sim é um exercicio da faculdade. E sim também eu quero paralelizar o calculo. o que eu fiz até agora foi criar as matrizes randomicamente a partir do numero de linhas e de colunas informadas pelo usuario. :frowning:

davidbuzatto

Vc só quer colocar o cálculo em uma Thread? É isso?

jggoa

o ideal seria que fossem várias threads. Uma thread para o calculo de uma linha com uma coluna. Mas não sei como fazer.

sergiotaborda

jggoa:
Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado!

Se realmente fosse necessário fazer isso, theads não seria a solução. Como se trata de um problema académico …

A multiplicação de matrizes não pode ser facilmente paralelizada como vc pensa.
No java 7 e 6 dá para usar o fork/join como aqui, ou até usando a GPU como aqui, mas normalmente são algoritmos de força bruta.

O interessante seria usar o algoritmo de Strassen que diminui a complexidade do problema de O(n^3) para O(n^2.8074) e não ha algoritmos mais eficiente em termos de implementação.
Existem algoritmos com O menor, mas que na prática fazem mais operações de multiplicação e acabam sendo mais lentos.

No seu caso , implemente uma classe Matriz que contém um array de double. implemente um método multiplicar que faça as contas linearmente. ou usando o método de Strassen
Depois implemente uma classe MatrizParalela que herda de Matriz e implementa o método multiplicar de forma diferente usando threads. Isto não é trivial. Vc precisa entender como separar o calculo de forma que cada thread faça uma parte e depois juntar tudo no final quando todas as threads tiverem terminado. Vc também vai precisa entender o método join()

Em vez de classes pode usar métodos que recebem dois arrays de doubles e fazem as contas.
Verifique que os calculos do algortimo paralelo são iguais aos calculos do algortimo sequencial, mas demora menos ( na prática a diferença deverá ser muito pequena. se quiser ver a diferença faça a matriz de 100x100 ou maior)

B

jggoa:
Olá, gostaria de saber como posso implementar duas matrizes e logo depois exibir o resultado de uma multiplicação usando threads.
Pode ser dicas, trechos de códigos e/ou links que me ajudem. Obrigado!

Primeiramente, como é que você dividiria o trabalho? Você precisa pegar o seu algoritmo e ver como é que você pode dividir o trabalho entre duas (ou mais) threads.

WellingtonRamos

Faça um método que realize o cálculo que você quer fazer (como deverão ser diversos cálculos, esse método deverá ser genérico o suficiente para tratar todas as condições possíveis (pode ser que seja necessário mais de um).

Monte o mesmo de modo sequêncial (possivelmente um loop onde esse método genérico é chamado).

Feito isso, verifique se o resultado é correto.

Agora, você deverá ter:

while(condicao) { //Pode ser um for também.
   meuMetodoGenerico(argumentos);
}

Troque para:

while(condicao) { //Pode ser um for também.
   new Thread() {
      public void run() {
         meuMetodoGenerico(argumentos);
      }
   }.start();
}

Possivelmente as delarações dos argumentos (se forem variáveis, devam ser final.

WellingtonRamos

A sim, talvez você precise adaptar algo na minha sugestão.
Mas antes de trabalhar com Threads, tenha certeza de ter um código que funcione corretamente de forma sequencial.

Criado 19 de janeiro de 2013
Ultima resposta 22 de jan. de 2013
Respostas 9
Participantes 5