Расчетное задание / КМ3 / ТФ-11-19 Рыжков М.В. Вариант 16
.pdf
Итоги выходных данных:
Fortran
\
IMSL
11
6. Программирование LFCRB
Подпрограмма была реализована в Visual Studio Fortran. При компиляции не было выявлено ошибок.
Компиляция: 0 ошибок, 0 предупреждений
12
Линкинг: 0 ошибок, 0 предупреждений
13
Итоги выходных данных:
Fortran
\
IMSL
14
7. Программирование LFTRB
Подпрограмма была реализована в Visual Studio Fortran. При компиляции не было выявлено ошибок.
Компиляция: 0 ошибок, 0 предупреждений
15
Линкинг: 0 ошибок, 0 предупреждений
16
Итоги выходных данных:
Fortran
\
IMSL
17
8. Расчет требуемой памяти
При обращении к литературе, содержащей сведения о библиотеке IMSL, в качестве примера в подпрограммах LSLRB, LFCRB, LFTRB используется прямоугольная матрица размерностью 3х4, т. е. общее количество элементов в ней — 12.
В постановке задачи исследования производительности ПК накладывается ограничение на используемую RAM-память компьютера (300-400 Мб), поэтому для увеличения используемой процессом памяти необходимо пойти по пути создания буферной матрицы.
Буферный массив p представляет собой матрицу размерностью (Q,8), где Q — количество строк, которое необходимо рассчитать, чтобы выполнить заявленный критерий по используемой памяти. Расчет количества строк проводился отталкиваясь от условия, что объем используемой памяти должен быть равен:
300Мб < Memory < 400Мб
Для вычисления количества элементов буферной матрицы исследуем нижний и верхний предел ограничения (расчет одинарной точности).
1) 300 Мб.
Переведем заданный объем из Мб в байты:
300*1024 *1024 = 314572800 байт
Поскольку в режиме одинарной точности исследуемая матрица имеет тип real (задано пользователем), а в Fortran на 1 элемент приходится 4 байта памяти, рассчитаем общее количество элементов матрицы:
314572800 / 4 = 78643200 элементов (
Таким образом, (78643200 / 8 = 9830400) матрица должна иметь размерность
(9 830 400х8).
18
2) 400 Мб.
Проведя аналогичные действия, получим количество элементов: 104857600. Размерность такой матрицы — (13 107 200х8).
В данном расчете была задан массив (11 000 000х 8), что согласуется с условием на ограничение памяти. При таком количестве элементов объем занимаемой процессом памяти — 335,7 Мб. ((11 000 000*8*8) / (1024*1024)) = 335.7 Мб.
Для двойной точности эта цифра в 2 раза больше, т. е. 671.4 Мб.
19
9. Листинг программы одинарной точности
program one
INTEGER IPATH, LDA, LDFAC, N, NLCA, NUCA, IPATH2, LDFAC2, NLCA2, NUCA2, NOUT, IPATH3, NLCA3, NUCA3,i, j ,k
PARAMETER (IPATH=1, LDA=7, LDFAC=10, N=8, NLCA=3, NUCA=3, IPATH2=1, LDFAC2=10, NLCA2=3, NUCA2=3, IPATH3=1, NLCA3=3, NUCA3=3)
INTEGER |
IPVT(N), IPVT2(N) |
REAL |
A(LDA,N), B(N,4),AINV(N,N) , RJ(N), RES(N), X(N,2), X3(N) |
REAL |
FAC2(LDFAC,N), RCOND, B3(N), FAC(LDFAC,N), p(11000000,8),z(N,4) |
REAL |
T, Timef |
EXTERNAL LFTRB, LFSRB, WRRRN, LFCRB, LFIRB, SSET, UMACH, LSLRB T=Timef()
do i=1,11000000
do j=1,8
p(i,j) = i+j END DO
END DO
do i = 1,11000000,7 do j = 1,8,1
A(1,j)=p(i,j)
A(2,j)=p(i+1,j)
A(3,j)=p(i+2,j)
A(4,j)=p(i+3,j)
A(5,j)=p(i+4,j)
A(6,j)=p(i+5,j)
A(7,j)=p(i+6,j) END DO
! Зададим правую часть системы линейных уравнений
DO k=1,N DO j=1,4
B(k,j)=j+k END DO
END DO
! Решение исходного уравнения
CALL LFTRB (N, A, LDA, NLCA, NUCA, FAC, LDFAC, IPVT)
!Решение для правых сторон
DO 10 J=1, 4
CALL LFSRB (N, FAC, LDFAC, NLCA, NUCA, IPVT, B(1,J), IPATH, X(1,J)) 10 CONTINUE
!Вывод результатов
!CALL WRRRN ('X', N, 2, X, N, 0)
!Решение исходного уравнения
CALL LFCRB (N, A, LDA, NLCA2, NUCA2, FAC2, LDFAC2, IPVT2, RCOND)
!Вывод оценки числа обусловленности
!CALL UMACH (2, NOUT)
!WRITE (NOUT,99999) RCOND, 1.0E0/RCOND
!Настройка столбцов идентификаторов
CALL SSET (N, 0.0E0, RJ, 1) DO 20 J=1, N
RJ(J) = 1.0E0
CALL LFIRB (N, A, LDA, NLCA2, NUCA2, FAC2, LDFAC2,
20
