Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: mnozenie macierzy BLAS  (Przeczytany 6288 razy)

Gosik

  • Gość
mnozenie macierzy BLAS
« dnia: 2012-12-18, 00:24:51 »
Chcialabym pomnozyc dwie macierze wykorzystujac BLASa.

Stworzylam taki prosty programik w Fortranie:
program macierz
  implicit none
  double precision mac(10,12),mac2(10,12)

  call FILLMATRIX(10,12,mac)
  call FILLMATRIX(10,12,mac2)
  call

  END

SUBROUTINE FILLMATRIX ( M, N, MATRIX )
   INTEGER M,N
   DOUBLE PRECISION MATRIX(M, N)

    DO  I=1,M
    DO  J=1,N  
      MATRIX(I,J) = I+2*J
    end do
    end do

  WRITE(*,*) 'Macierz ma postac'
    do I=1,M
     write(*,*) (MATRIX(I,J),J=1,N)
    end do

  END
Znalazlam taka procedure:
call DGEEM(transA, transB, m,n,k,alpha,A, lda, B, ldb, beta, C, ldec)
Jak ja mam interpretowac?

czym sa poszczegolne oznaczenia?

wiem, ze A,B to sa dane macierze
C, szukana macierz
alpha standardowo ustawiamy na 1.0, a a beta na 0.0.
Nie wiem, co z reszta.

Czy moglibyscie mi troche pomoc?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
mnozenie macierzy BLAS
« Odpowiedź #1 dnia: 2012-12-18, 07:35:08 »
Jesteś pewna, że DGEEM a nie DGEMM? Pierwszej nie ma w strandardowym BLASie, a druga ma taką sygnaturę, jak napisałaś. Dokumentacja drugiej jest tutaj.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Gosik

  • Gość
mnozenie macierzy BLAS
« Odpowiedź #2 dnia: 2012-12-18, 17:08:38 »
Zgadza sie, mialo byc DGEMM.

Jednazke chyba cos zle rozumiem.

   program macierz
  implicit none
  double precision mac(5,6),mac2(5,6),mac3(5,6)
  integer K,L

  call FILLMATRIX(5,6,mac)
  call FILLMATRIX(5,6,mac2)
  call DGEMM("n","n",5,6,5,1.0,mac,5,mac2,5,0.0,mac3,6)

  WRITE(*,*)'Macierz C ma postac'
    DO K=1,5
      write(*,*) (mac3(5,6),L=1,6)
    end do

  END
Przy wyswetlaniu macierzy mac3 uzyskuje same 0.
Czy moglabym prosic o wskazanie bledu?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
mnozenie macierzy BLAS
« Odpowiedź #3 dnia: 2012-12-19, 23:32:15 »
Coś tenteges pamiętam przez mgłę, że wymiar X jednej mnożonej macierzy musi być równy Y drugiej (albo odwrotnie - narząd nie używany zanika). Nie da się pomnożyć macierzy 5x6 przez 5x6. 5x6 przez 6x5 tak.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

Gosik

  • Gość
mnozenie macierzy BLAS
« Odpowiedź #4 dnia: 2012-12-22, 00:48:36 »
Poprawilam moj kod:

program macierz
  implicit none
  double precision mac(m,n),mac2(n,k),mac3(m,k)
  integer R,L
  integer m,n
  integer k

   m=2
   n=2
   k=3

  call FILLMATRIX(m,n,mac)
  call FILLMATRIX(n,k,mac2)
  call DGEMM("n","n",m,k,n,1.d0,mac,m,mac2,k,0.d0,mac3,m)

  WRITE(*,*)'Macierz C ma postac'
    DO R=1,m
      write(*,*) (mac3(R,L),L=1,k)
    end do

  END

SUBROUTINE FILLMATRIX (M,N,MATRIX)
   INTEGER M,N
   DOUBLE PRECISION MATRIX(M,N)

    do  I=1,M
    do  J=1,N
      MATRIX(I,J) = I+2*J
    end do
    end do

  WRITE(*,*) 'Macierz ma postac'
    do I=1,M
     write(*,*) (MATRIX(I,J),J=1,N)
    end do

  END
Jednakze, macierz mac3 jest wyswitlana w nastepujacej postaci:
 Macierz C ma postac
    29.00000000000000        0.0000000000000000        0.0000000000000000    
    36.00000000000000        0.0000000000000000        0.0000000000000000
Dlaczego dobrze wyswietla tylko pierwsza kolumne, a reszta jest wypelnina zerami?

Gosik

  • Gość
mnozenie macierzy BLAS
« Odpowiedź #5 dnia: 2012-12-22, 20:43:38 »
Temat zamkniety.