Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: mnozenie macierzy BLAS  (Przeczytany 6304 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: 3056
  • 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: 3056
  • 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.