
Листинг программы с двойной точностью.
program dvoinaya_tochnost
implicit none
! Объявление переменных
INTEGER LDA, N, I, j, k, z, v
PARAMETER (LDA=3, N=3)
INTEGER IPVT(N), NOUT
REAL(8) RCOND, DET1, DET2, START, FINISH
COMPLEX(8) A(LDA,LDA), B(N,3), X(N,3), FAC(LDA,LDA), C(N), D(N), RES(N), M1(3,12000000), M2(3,12000000), M3(12000000)
CALL CPU_TIME (START)
DATA A/(3.0,0.0), (1.0,1.0), (4.0,0.0), (1.0,-1.0), (2.0,0.0), (-5.0,-1.0), (4.0,0.0), (-5.0,1.0), (-2.0,0.0)/
DATA B/(7.0,32.0), (-39.0,-21.0), (51.0,9.0), (-6.0,11.0), (-5.5,-22.5), (16.0,17.0), (-2.0,-17.0), (4.0,10.0), (-2.0,12.0)/
DATA C/(7.0,32.0), (-39.0,-21.0), (51.0,9.0)/
DO j=1,12000000-2,3
DO k=0,2
M1(1,j+k)=A(1,1+k)
M1(2,j+k)=A(2,1+k)
M1(3,j+k)=A(3,1+k)
A(1,1+k)=A(1,1+k)+(0.001/j)
A(2,1+k)=A(2,1+k)+(0.001/j)
A(3,1+k)=A(3,1+k)+(0.001/j)
M2(1,j+k)=B(1,1+k)
M2(2,j+k)=B(2,1+k)
M2(3,j+k)=B(3,1+k)
B(1,1+k)=B(1,1+k)+(0.001/j)
B(2,1+k)=B(2,1+k)+(0.001/j)
B(3,1+k)=B(3,1+k)+(0.001/j)
M3(j+k)=C(1+k)
C(1+k)=C(1+k)+(0.001/j)
end do
end do
DO z=1,12000000-2,3
! Программа 1
CALL DLFTHF (N, A, LDA, FAC, LDA, IPVT)
DO 10 I=1, 3
CALL DLFSHF (N, FAC, LDA, IPVT, B(1,I), X(1,I))
10 CONTINUE
CALL WRCRN ('X', N, 3, X, N, 0)
! Программа 2
CALL UMACH (2, NOUT)
CALL DLFCHF (N, A, LDA, FAC, LDA, IPVT, RCOND)
WRITE (NOUT,99998) RCOND, 1.0E0/RCOND
DO 20 I=1, 3
CALL DLFIHF (N, A, LDA, FAC, LDA, IPVT, C, D, RES)
WRITE (NOUT,99999) I
CALL WRCRN ('D', 1, N, D, 1, 0)
CALL WRCRN ('RES', 1, N, RES, 1, 0)
C(2) = C(2) + (0.2E0, 0.2E0)
20 CONTINUE
99998 FORMAT (' RCOND = ',F5.3,/,' L1 Condition number = ',F6.3)
99999 FORMAT (//,' For problem ', I1)
! Программа 3
CALL DLFTHF (N, A, LDA, FAC, LDA, IPVT)
CALL DLFDHF (N, FAC, LDA, IPVT, DET1, DET2)
CALL UMACH (2, NOUT)
DO k=0,2
A(1,1+k)=M1(1,z+k)
A(2,1+k)=M1(2,z+k)
A(3,1+k)=M1(3,z+k)
B(1,1+k)=M2(1,z+k)
B(2,1+k)=M2(2,z+k)
B(3,1+k)=M2(3,z+k)
C(1+k)=M3(z+k)
END DO
END DO
WRITE (NOUT,99997) DET1, DET2
99997 FORMAT (' The determinant is', F5.1, ' * 10**', F2.0)
CALL CPU_TIME (FINISH)
PRINT *, 'TIME = ', FINISH-START, ' SEC'
end program dvoinaya_tochnost
Расчет памяти.
В программе используется матрица А размерностью 3х3, матрица В размерностью 3х3, а также вектор-столбец С 3х1. В постановке задачи исследования производительности ПК необходимо выполнение программы минимум 40 секунд времени, с учётом ограничения на используемую RAM-память компьютера (минимум 300-400 Мб), поэтому для увеличения используемой процессом памяти было необходимо создать буферную матрицу. При 300 Мб выполняется минимум по времени. Посчитаем необходимое количество элементов:
(300 ∙ 1024 ∙ 1024) / (4 ∙ 3 ∙ 2 + 1) = 11234736 элементов.
Примем значение 12000000. Тогда объем памяти для одинарной точности будет составлять 320,43 Мб. Соответсвтенно для двойной точности объем памяти составит 640,86 Мб.
4 Байта предоставляется 1 элементу вещественного типа REAL. Так как будет использоваться 2 буферные матрицы – делим на 2. Таким образом, 2 буферные матрицы будет иметь размерность (3, 12000000), а буферный вектор столбец (12000000).
Основные параметры тестируемой системы.
CPU – Intel(R) Core(TM) i7-12800 1.80 GHz 3.70 GHz; 14 ядер, 20 потоков
RAM – 16.00 Гб Kingston 9905600-119.A00G DDR4 SO-DIMM 8 Gb, Kingston 9905600-119.A00G DDR4 SO-DIMM 8 Gb
SSD – NVMe Kingston RBUSNS8 1 Тб
Windows 11 Домашняя для одного языка, 64-разрядная
Результаты измерений.
Таблица 1 – результаты 90 расчетов в режиме debug с одинарной точностью
Т1 = 22.92 |
Т2 = 17.09 |
Т3 = 16.93 |
Т4 = 10.98 |
Т5 = 18.56 |
Т6 = 20.42 |
Т7 = 13.76 |
Т8 = 21.00 |
Т9 = 27.79 |
Т10 = 21.67 |
Т11 = 23.56 |
Т12 = 17.00 |
Т13 = 23.23 |
Т14 = 27.26 |
Т15 = 41.85 |
Т16 = 18.45 |
Т17 = 9.734 |
Т18 = 8.031 |
Т19 = 12.85 |
Т20 = 17.94 |
Т21 = 14.96 |
Т22 = 9.265 |
Т23 = 18.91 |
Т24 = 14.78 |
Т25 = 14.07 |
Т26 = 18.92 |
Т27 = 17.14 |
Т28 = 16.96 |
Т29 = 19.55 |
Т30 = 25.28 |
Т31 = 27.58 |
Т32 = 21.50 |
Т33 = 21.50 |
Т34 = 21.94 |
Т35 = 21.70 |
Т36 = 16.00 |
Т37 = 23.31 |
Т38 = 20.59 |
Т39 = 20.21 |
Т40 = 22.71 |
Т41 = 17.21 |
Т42 = 25.10 |
Т43 = 27.70 |
Т44 = 22.70 |
Т45 = 21.98 |
Т46 = 21.85 |
Т47 = 26.62 |
Т48 = 18.73 |
Т49 = 20.50 |
Т50 = 28.92 |
Т51 = 29.76 |
Т52 = 20.01 |
Т53 = 31.85 |
Т54 = 24.59 |
Т55 = 30.53 |
Т56 = 33.31 |
Т57 = 25.51 |
Т58 = 34.10 |
Т59 = 23.57 |
Т60 = 29.32 |
Т61 = 46.40 |
Т62 = 52.34 |
Т63 = 25.12 |
Т64 = 15.09 |
Т65 = 22.28 |
Т66 = 22.31 |
Т67 = 16.57 |
Т68 = 27.84 |
Т69 = 10.87 |
Т70 = 5.984 |
Т71 = 16.34 |
Т72 = 11.40 |
Т73 = 16.73 |
Т74 = 16.43 |
Т75 = 18.89 |
Т76 = 16.75 |
Т77 = 14.69 |
Т78 = 7.328 |
Т79 = 8.141 |
Т80 = 12.23 |
Т81 = 13.73 |
Т82 = 18.97 |
Т83 = 11.73 |
Т84 = 27.20 |
Т85 = 22.09 |
Т86 = 28.05 |
Т87 = 27.56 |
Т88 = 13.84 |
Т89 = 7.250 |
Т90 = 12.83 |
Таблица 2 – результаты 90 расчетов в режиме realise с одинарной точностью
Т1 = 25.14 |
Т2 = 13.89 |
Т3 = 19.125 |
Т4 = 19.66 |
Т5 = 21.23 |
Т6 = 20.7 |
Т7 = 25.37 |
Т8 = 22.28 |
Т9 = 24.97 |
Т10 = 24.09 |
Т11 = 19.40 |
Т12 = 22.17 |
Т13 = 23.09 |
Т14 = 28.54 |
Т15 = 32.00 |
Т16 = 23.93 |
Т17 = 20.62 |
Т18 = 28.50 |
Т19 = 28.09 |
Т20 = 14.79 |
Т21 = 19.35 |
Т22 = 24.56 |
Т23 = 22.28 |
Т24 = 22.12 |
Т25 = 20.40 |
Т26 = 19.18 |
Т27 = 25.35 |
Т28 = 14.89 |
Т29 = 19.21 |
Т30 = 22.73 |
Т31 = 21.79 |
Т32 = 18.65 |
Т33 = 16.50 |
Т34 = 26.85 |
Т35 = 24.34 |
Т36 = 25.98 |
Т37 = 24.64 |
Т38 = 25.35 |
Т39 = 23.51 |
Т40 = 25.39 |
Т41 = 20.04 |
Т42 = 27.09 |
Т43 = 25.20 |
Т44 = 48.04 |
Т45 = 26.03 |
Т46 = 26.31 |
Т47 = 28.48 |
Т48 = 24.43 |
Т49 = 19.51 |
Т50 = 24.37 |
Т51 = 29.17 |
Т52 = 23.62 |
Т53 = 25.70 |
Т54 = 20.85 |
Т55 = 27.67 |
Т56 = 24.37 |
Т57 = 25.84 |
Т58 = 24.50 |
Т59 = 18.53 |
Т60 = 32.00 |
Т61 = 25.86 |
Т62 = 23.20 |
Т63 = 28.41 |
Т64 = 31.23 |
Т65 = 30.16 |
Т66 = 21.72 |
Т67 = 21.73 |
Т68 = 34.86 |
Т69 = 28.79 |
Т70 = 31.61 |
Т71 = 33.86 |
Т72 = 22.86 |
Т73 = 22.54 |
Т74 = 23.14 |
Т75 = 25.95 |
Т76 = 31.39 |
Т77 = 26.41 |
Т78 = 16.35 |
Т79 = 16.98 |
Т80 = 24.98 |
Т81 = 16.53 |
Т82 = 20.12 |
Т83 = 18.72 |
Т84 = 15.34 |
Т85 = 15.05 |
Т86 = 19.70 |
Т87 = 33.13 |
Т88 = 16.75 |
Т89 = 29.67 |
Т90 = 30.44 |
Таблица 3 – результаты 90 расчетов в режиме realise с двойной точностью
Т1 = 42.12 |
Т2 = 44.86 |
Т3 = 57.25 |
Т4 = 46.21 |
Т5 = 53.75 |
Т6 = 57.43 |
Т7 = 63.11 |
Т8 = 59.09 |
Т9 = 71.56 |
Т10 = 43.04 |
Т11 = 48.04 |
Т12 = 54.44 |
Т13 = 49.65 |
Т14 = 51.22 |
Т15 = 56.78 |
Т16 = 64.08 |
Т17 = 54.44 |
Т18 = 58.95 |
Т19 = 59.92 |
Т20 = 51.14 |
Т21 = 47.63 |
Т22 = 45.06 |
Т23 = 38.21 |
Т24 = 54.82 |
Т25 = 58.23 |
Т26 = 64.61 |
Т27 = 53.73 |
Т28 = 58.42 |
Т29 = 63.63 |
Т30 = 40.27 |
Т31 = 35.22 |
Т32 = 58.36 |
Т33 = 64.87 |
Т34 = 55.24 |
Т35 = 69.51 |
Т36 = 74.32 |
Т37 = 34.11 |
Т38 = 43.70 |
Т39 = 37.89 |
Т40 = 59.29 |
Т41 = 32.01 |
Т42 = 58.11 |
Т43 = 58.96 |
Т44 = 64.44 |
Т45 = 46.74 |
Т46 = 56.42 |
Т47 = 31.12 |
Т48 = 45.00 |
Т49 = 62.34 |
Т50 = 38.87 |
Т51 = 53.24 |
Т52 = 59.37 |
Т53 = 61.98 |
Т54 = 55.64 |
Т55 = 62.43 |
Т56 = 58.41 |
Т57 = 39.31 |
Т58 = 52.60 |
Т59 = 55.75 |
Т60 = 58.80 |
Т61 = 29.07 |
Т62 = 50.05 |
Т63 = 47.87 |
Т64 = 65.42 |
Т65 = 55.41 |
Т66 = 75.32 |
Т67 = 53.76 |
Т68 = 38.05 |
Т69 = 58.88 |
Т70 = 53.86 |
Т71 = 46.32 |
Т72 = 46.76 |
Т73 = 45.68 |
Т74 = 69.91 |
Т75 = 45.00 |
Т76 = 53.62 |
Т77 = 46.00 |
Т78 = 44.32 |
Т79 = 58.64 |
Т80 = 70.53 |
Т81 = 52.22 |
Т82 = 69.98 |
Т83 = 53.76 |
Т84 = 64.32 |
Т85 = 41.18 |
Т86 = 42.76 |
Т87 = 60.02 |
Т88 = 43.34 |
Т89 = 64.56 |
Т90 = 56.01 |
Обработка результатов измерений.
Выполним сортировку результатов с помощью внутренней функции Mathcad Sort(V):
Таблица 4 – отсортированные данные
Номер измерения |
debug, с |
realise, одинарная точность, с |
realise, двойная точность, с |
1 |
5.984 |
13.89 |
29.07 |
2 |
7.25 |
14.79 |
31.12 |
Продолжение таблицы 4
3 |
7.328 |
14.89 |
32.01 |
4 |
8.031 |
15.05 |
34.11 |
5 |
8.141 |
15.34 |
35.22 |
6 |
9.265 |
16.35 |
37.89 |
7 |
9.734 |
16.5 |
38.05 |
8 |
10.87 |
16.53 |
38.21 |
9 |
10.98 |
16.75 |
38.87 |
10 |
11.4 |
16.98 |
39.31 |
11 |
11.73 |
18.53 |
40.27 |
12 |
12.23 |
18.65 |
41.18 |
13 |
12.83 |
18.72 |
42.12 |
14 |
12.85 |
19.125 |
42.76 |
15 |
13.73 |
19.18 |
43.04 |
16 |
13.76 |
19.21 |
43.34 |
17 |
13.84 |
19.35 |
43.7 |
18 |
14.07 |
19.4 |
44.32 |
19 |
14.69 |
19.51 |
44.86 |
20 |
14.78 |
19.66 |
45 |
21 |
14.96 |
19.7 |
45 |
22 |
15.09 |
20.04 |
45.06 |
23 |
16 |
20.12 |
45.68 |
24 |
16.34 |
20.12 |
46 |
25 |
16.43 |
20.62 |
46.21 |
26 |
16.57 |
20.7 |
46.32 |
27 |
16.73 |
20.85 |
46.74 |
28 |
16.75 |
21.23 |
46.76 |
29 |
16.93 |
21.72 |
47.63 |
30 |
16.96 |
21.73 |
47.87 |
31 |
17 |
21.79 |
48.04 |
32 |
17.09 |
22.12 |
49.65 |
33 |
17.14 |
22.17 |
50.05 |
34 |
17.21 |
22.28 |
51.14 |
35 |
17.94 |
22.28 |
51.22 |
36 |
18.45 |
22.54 |
52.22 |
37 |
18.56 |
22.73 |
52.23 |
38 |
18.73 |
22.86 |
53.24 |
39 |
18.89 |
22.86 |
53.62 |
40 |
18.91 |
23.14 |
53.73 |
41 |
18.92 |
23.2 |
53.75 |
Продолжение таблицы 4
42 |
18.97 |
23.51 |
53.76 |
43 |
19.55 |
23.62 |
53.76 |
44 |
20.01 |
23.93 |
53.86 |
45 |
20.21 |
24.09 |
54.44 |
46 |
20.42 |
24.34 |
54.44 |
47 |
20.5 |
24.37 |
54.82 |
48 |
20.59 |
24.37 |
55.24 |
49 |
21 |
24.43 |
55.41 |
50 |
21.5 |
24.5 |
55.64 |
51 |
21.5 |
24.56 |
55.75 |
52 |
21.67 |
24.64 |
56.01 |
53 |
21.7 |
24.97 |
56.42 |
54 |
21.85 |
24.98 |
56.78 |
55 |
21.94 |
25.14 |
57.25 |
56 |
21.98 |
25.2 |
57.43 |
57 |
22.09 |
25.35 |
58.11 |
58 |
22.28 |
25.35 |
58.23 |
59 |
22.31 |
25.37 |
58.36 |
60 |
22.7 |
25.39 |
58.40 |
61 |
22.71 |
25.7 |
58.42 |
62 |
22.92 |
25.84 |
58.64 |
63 |
23.23 |
25.86 |
58.8 |
64 |
23.31 |
25.95 |
58.88 |
65 |
23.56 |
25.98 |
58.95 |
66 |
23.57 |
26.03 |
58.96 |
67 |
24.59 |
26.31 |
59.09 |
68 |
25.1 |
26.41 |
59.29 |
69 |
25.12 |
26.85 |
59.37 |
70 |
25.28 |
27.09 |
59.92 |
71 |
25.51 |
27.67 |
60.02 |
72 |
26.62 |
28.09 |
61.98 |
73 |
27.2 |
28.41 |
62.34 |
74 |
27.26 |
28.48 |
62.43 |
75 |
27.56 |
28.5 |
63.11 |
76 |
27.58 |
28.54 |
63.63 |
77 |
27.7 |
28.79 |
64.08 |
78 |
27.79 |
29.17 |
64.32 |
79 |
27.84 |
29.67 |
64.44 |
80 |
28.05 |
30.16 |
64.56 |
Продолжение таблицы 4
81 |
28.92 |
30.44 |
64.61 |
82 |
29.32 |
31.23 |
64.87 |
83 |
29.76 |
31.39 |
65.42 |
84 |
30.53 |
31.61 |
69.51 |
85 |
31.85 |
32 |
69.91 |
86 |
33.31 |
32 |
69.98 |
87 |
34.1 |
33.13 |
70.53 |
88 |
41.85 |
33.86 |
71.56 |
89 |
46.4 |
34.86 |
74.32 |
90 |
52.34 |
48.04 |
75.32 |