-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatmul_hp.f95
83 lines (69 loc) · 2 KB
/
matmul_hp.f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
program neue_matmul
use matmul_mod
implicit none
real, dimension(:,:), allocatable :: A, B, implementiert, simple, strassen
integer :: i, n, k, zeile, spalte
real :: start, finish
character(len=128) :: mat_ausgabe, mat_eingabe, pfadA, pfadB
write(*,*) "Sollen die berechneten Matrizen ausgeben werden? (y/n)"
read(*,*) mat_ausgabe
write(*,*) "Wie sollen die Matrizen eingeben werden? (hilbert/datei)"
read(*,*) mat_eingabe
if (mat_eingabe == "hilbert") then
write(*,*) "k für 2^k x 2^k - Matrizen"
read(*,*) k
allocate(A(2**k,2**k), B(2**k,2**k))
do zeile = 1, 2**k
do spalte = 1, 2**k
A(zeile, spalte) = 1/(zeile + spalte - 1)
B(zeile, spalte) = 1/(zeile + spalte - 1)
end do
end do
else
write(*,*) "Datei-Pfad für Datei mit Matrix A"
read(*,*) pfadA
open(unit=100, file=pfadA, action="read")
write(*,*) "Größe der Matrix"
read(*,*) n
allocate(A(n,n), B(n,n))
do zeile = 1, n
read(100,*) A(zeile,1:n)
end do
write(*,*) "Datei-Pfad für Datei mit Matrix B"
read(*,*) pfadB
open(unit=200, file=pfadB, action="read")
do zeile = 1, n
read(200,*) B(zeile,1:n)
end do
end if
call cpu_time(start)
implementiert = matmul(A,B)
call cpu_time(finish)
write(*,*) "Implementierte Multiplikation"
if (mat_ausgabe == "y") then
do i=1, n
write(*,*) implementiert(i, 1:n)
end do
end if
write(*,*) "Benoetigte Zeit: ", finish-start
call cpu_time(start)
simple = simple_matmul(A,B)
call cpu_time(finish)
write(*,*) "Standard Multiplikation"
if (mat_ausgabe == "y") then
do i=1, n
write(*,*) simple(i, 1:n)
end do
end if
write(*,*) "Benoetigte Zeit: ", finish-start
call cpu_time(start)
strassen = strassen_matmul(A,B)
call cpu_time(finish)
write(*,*) "Strassen Multiplikation"
if (mat_ausgabe == "y") then
do i=1, n
write(*,*) strassen(i, 1:n)
end do
end if
write(*,*) "Benoetigte Zeit: ", finish-start
end program neue_matmul