eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPorównanie szybkości mnożenia macierzy w CPP i PASCALRe: Porównanie szybkości mnożenia macierzy w CPP i PASCAL
  • Data: 2011-02-02 19:55:00
    Temat: Re: Porównanie szybkości mnożenia macierzy w CPP i PASCAL
    Od: Fil <f...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Jeszcze raz - ostatni test i podsumowanie:
    PASCAL wariant 1 kompilator DELPHI: 8,2s
    PASCAL wariant 2 kompilator DELPHI: 5,2s
    CPP wariant 1 kompilator BUILDER: 4,5s
    CPP wariant 2 kompilator BUILDER: 4,0s
    CPP wariant 1 kompilator VISUAL: 1,4s
    CPP wariant 2 kompilator VISUAL: 1,2s

    I tyle w temacie :)

    PS. Użyłem Visuala 2010 Ultimate.
    Tablice źródłowe 2000 wierszy i 300 kolumn.
    Tablica wynikowa 2000 wierszy i kolumn

    Poniżej wklejam jeszcze raz procedury:
    PASCAL wariant 1:
    TMatrix = array of array of double;

    procedure MulMatrix(N, Q, M:integer; T1, T2:TMatrix; var T3:TMatrix);
    var
    i, j, k:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do begin
    T3[i, j] := 0;
    for k := 0 to Q-1 do T3[i, j] := T3[i, j] + T1[i, k] * T2[k, j];
    end;
    end;

    PASCAL wariant 2:
    TA=array[0..1999,0..299] of double;
    TB=array[0..299,0..1999] of double;
    TC=array[0..1999,0..1999] of double;

    procedure MulMatrix2(N, Q, M:integer; var T1:TA; var T2:TB; var T3:TC);
    var
    i, j, k:integer;
    begin
    for i := 0 to N-1 do
    for j := 0 to M-1 do begin
    T3[i, j] := 0;
    for k := 0 to Q-1 do T3[i, j] := T3[i, j] + T1[i, k] * T2[k, j];
    end;
    end;

    CPP wariant 1:
    void MulTab(int N, int Q, int M, double** A, double** B, double** C)
    {
    for (int i = 0; i < N; ++i)
    for (int j = 0; j < M; ++j) {
    C[i][j] = 0;
    for (int k = 0; k < Q; ++k) C[i][j] += A[i][k] * B[k][j];
    }
    }

    CPP wariant 2:
    void MulTab2(int N, int Q, int M, double** A, double** B, double** C)
    {
    int _M, _Q;
    double R;
    double** Ai;
    double** Bj;
    double* Aik;
    double* Bjk;
    double* Cij;

    while (N--) {
    Ai = A++;
    Bj = B;
    Cij = *C++;

    _M = M;
    while (_M--) {
    Aik = *Ai;
    Bjk = *Bj++;

    R = 0;
    _Q = Q;
    while (_Q--) R += *Aik++ * *Bjk++;
    *Cij++ = R;
    }
    }
    }

    Pozdrawiam,
    Fil.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: