Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Расчетное задание / КМ3 / ТФ-11-19 Рыжков М.В. Вариант 16

.pdf
Скачиваний:
3
Добавлен:
16.05.2024
Размер:
705.88 Кб
Скачать

Итоги выходных данных:

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

Соседние файлы в папке КМ3