Estou multiplicando uma matriz de 1000x500, no windows essa multiplicação demora em torno de 2 minutos, já no linux a demora é de 5 minutos.
Detalhes dos Sistenas Operacionais:
Windows 7 home preminum 64bits.
Unbuntu 10 32bits
Estou usando o netbeans para executar nos dois casos.
Alguém sabe porque está diverença de tempo, pode ser porque o windows é 64bits e o ubuntu é 32?
acho que essa diferença seja pelo fato do win ser 64 bits.
R
RafaelViana
ThalesSilva:
Estou multiplicando uma matriz de 1000x500, no windows essa multiplicação demora em torno de 2 minutos, já no linux a demora é de 5 minutos.
Detalhes dos Sistenas Operacionais:
Windows 7 home preminum 64bits.
Unbuntu 10 32bits
Estou usando o netbeans para executar nos dois casos.
Alguém sabe porque está diverença de tempo, pode ser porque o windows é 64bits e o ubuntu é 32?
Tem como colocar o código aqui? Eu poderia testar no Linux 64 bits aqui.
T
ThalesSilva
O código está ai. Se alguém puder testar eu agradeço.
Estou executando em um core2duo 2.13, 4gb.
packageteste;importjava.util.Date;publicclassMain{publicstaticvoidmain(Stringargs[]){multim=newmulti();longt1=System.currentTimeMillis();try{m.runExample();longt2=System.currentTimeMillis();System.out.println("==========================");System.out.println("Tempo da tarefa: "+newDate(t2-t1).getMinutes()+" Minutos");System.out.println("==========================");}catch(Exceptione){e.printStackTrace();}}/* * Preenche as matrizes, realiza a multiplicação e envia o resultado para tela */}
packageteste;/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author Thales */publicclassmulti{publicvoidrunExample(){intmat1[][]=populateMatrix(1000,500,1);intmat2[][]=populateMatrix(500,1000,1);excreveMatriz(mat1);System.out.println("");System.out.println(" X ");System.out.println("");excreveMatriz(mat2);System.out.println("");System.out.println(" = ");System.out.println("");excreveMatriz(multiplicaMatrizes(mat1,mat2));}/** * Preenche a Matriz */publicint[][]populateMatrix(intlin,intcol,intcont){intmat[][]=newint[lin][col];for(inti=0;i<lin;i++){for(intj=0;j<col;j++){mat[i][j]=cont++;}}returnmat;}/** * Mostra as matrizes na tela */publicvoidexcreveMatriz(intmat[][]){System.out.println("Numero de linhas: "+mat.length);System.out.println("Numero de Colunas: "+mat[0].length);for(inti=0;i<mat.length;i++){System.out.print("|");for(intj=0;j<mat[0].length;j++){System.out.print((j<mat[0].length-1)?mat[i][j]+",":mat[i][j]+"|");}System.out.println();}}publicint[]getLinData(intmat[][],intlin_num){int[]linData=newint[mat[0].length];for(inti=0;i<mat[0].length;i++){linData[i]=mat[lin_num][i];}returnlinData;}publicint[]getColData(intmat[][],intcol_num){int[]colData=newint[mat.length];for(inti=0;i<mat.length;i++){colData[i]=mat[i][col_num];}returncolData;}publicint[][]multiplicaMatrizes(intmat1[][],intmat2[][]){if(mat1[0].length!=mat2.length){//throw new Exception("Number of rows of the first matrix must match the number of columns of second matrix.");}intresult[][]=newint[mat1.length][mat2[0].length];intmat1_lin_data[]=mat1[0];intmat2_col_data[]=newint[mat2.length];for(inti=0;i<mat1.length;i++){mat1_lin_data=getLinData(mat1,i);for(intj=0;j<mat2[0].length;j++){mat2_col_data=getColData(mat2,j);result[i][j]=compute(mat1_lin_data,mat2_col_data);}}returnresult;}publicintcompute(intarr1[],intarr2[]){intresult=0;for(inti=0;i<arr1.length;i++){result+=arr1[i]*arr2[i];}System.out.println("Calculando:"+result);returnresult;}publicvoidprintArray(intarr[]){System.out.print("[");for(inti=0;i<arr.length;i++){System.out.print((i<arr.length-1)?arr[i]+",":arr[i]+"]");System.out.println();}}}
R
RafaelViana
Não vai ter como comparar porque o processador interfere muito.
Aqui levou 20s para rodar esse código. ( Core I3 + 4GB com Linux MInt 64 bits )
Acredito que essa diferença no seu computador seja por causa do 32 x 64.
malokas
Rodou aqui no meu em 21 segundos. Em um macbook Core 2 Duo 2,4GHz 4GB
T
ThalesSilva
Seu SO é 32 ou 64bits?
dieguittom
Cara, muita coisa pode interferir na velocidade. a versão da jvm, a carga do processador naquele momento, ou seja quanto ele está ocupado naquele momento. Mas acredito que as versões 32 e 64bits devam dar bastante diferença também.