 
        
        Листинг программы с двойной точностью.
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 | 
