Desempenho Linux X windows

8 respostas
T

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.
Ubuntu 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?

8 Respostas

tiago.vt

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?

acho que essa diferença seja pelo fato do win ser 64 bits.

R

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

O código está ai. Se alguém puder testar eu agradeço.

Estou executando em um core2duo 2.13, 4gb.

package teste;


import java.util.Date;


public class Main {

    public static void main(String args[]) {

        multi m = new multi();
        long t1 = System.currentTimeMillis();
        try {
            m.runExample();
            long t2 = System.currentTimeMillis();
            System.out.println("==========================");
            System.out.println("Tempo da tarefa: " + new Date(t2-t1).getMinutes() + " Minutos");
            System.out.println("==========================");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
     * Preenche as matrizes, realiza a multiplicação e envia o
    resultado para tela
     */


}
package teste;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Thales
 */
public class multi {

  public void runExample() {
        int mat1[][] = populateMatrix(1000, 500, 1);
        int mat2[][] = 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
     */
    public int[][] populateMatrix(int lin, int col, int cont) {
        int mat[][] = new int[lin][col];
        for (int i = 0; i < lin; i++) {
            for (int j = 0; j < col; j++) {
                mat[i][j] = cont ++;
            }
        }
        return mat;
    }

    /**
     * Mostra as matrizes na tela
     */

    public void excreveMatriz(int mat[][]) {
        System.out.println("Numero de linhas: " + mat.length);
        System.out.println("Numero de Colunas: "+mat[0].length);
            for ( int i =0; i < mat.length; i++) {
                System.out.print("|");
            for (int j = 0; j < mat[0].length; j++) {
                System.out.print((j < mat[0].length -1)? mat[i][j] + "," : mat[i][j] + "|");
        }

    System.out.println();
}
}
    public int [] getLinData(int mat[][], int lin_num){
    int [] linData = new int [mat[0].length];
        for (int i = 0; i < mat[0].length; i++) {
            linData[i] = mat[lin_num][i];
        }
        return linData;
    }

    public int[] getColData(int mat[][], int col_num) {
        int[] colData = new int[mat.length];
        for (int i = 0; i < mat.length; i++) {
            colData[i] = mat[i][col_num];
        }
        return colData;
    }


    public int[][] multiplicaMatrizes(int mat1[][], int mat2[][]) {
        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.");

        }
        int result[][] = new int[mat1.length][mat2[0].length];
        int mat1_lin_data[] = mat1[0];
        int mat2_col_data[] = new int[mat2.length];
        for (int i = 0; i < mat1.length; i++) {
            mat1_lin_data = getLinData(mat1, i);
            for (int j = 0; j < mat2[0].length; j++) {
                mat2_col_data = getColData(mat2, j);
                result[i][j] = compute(mat1_lin_data,
                        mat2_col_data);
            }
        }
        return result;
    }


    public int compute(int arr1[], int arr2[]) {
        int result = 0;
        for (int i = 0; i < arr1.length; i++) {
            result += arr1[i] * arr2[i];
        }
        System.out.println("Calculando:" + result);
        return result;
    }


    public void printArray(int arr[]) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print((i < arr.length-1)? arr[i]+ ",": arr[i] + "]");
                System.out.println();

        }
    }

}
R

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

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.

ViniGodoy
  1. Tenha um ambiente controlado;
  2. Leia: http://www.ibm.com/developerworks/java/library/j-jtp02225/index.html
  3. Use profilers de verdade: http://visualvm.java.net/

Não se faz teste de performance nessas condições.

Criado 22 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 8
Participantes 6