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!
desculpem, sou novo em programação.
É um exercício da faculdade? O que você já fez ou tentou fazer? O que você quer paralelizar? O cálculo da multiplicação?
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.
Vc só quer colocar o cálculo em uma Thread? É isso?
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.
[quote=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![/quote]
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)
[quote=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![/quote]
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.
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.
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.