Автор работы: Пользователь скрыл имя, 02 Мая 2012 в 19:51, лабораторная работа
Целью работы является развитие навыков использования современных информационных технологий применительно к задачам ЯЭ. Если рассматривать задачи связанные с научно‐исследовательской и конструкторской деятельностью в данной области, то основная их специфика в настоящее время характеризуется следующим:
1. Существенным требованием к компьютерным ресурсам: RAM, жесткий диск, CPU
2. Большая продолжительность расчетов и, следовательно, требования к надежности
расчетной платформы, ОС и оптимизация использования расчетного оборудования
3. Широкое использование методов параллельных расчетов
Цель работы ……………………………………………………………………………...3
Описание используемой подпрограммы………………………………………………………....................………4
Вспомогательные подпрограммы ……………………………………………………...6
Типы данных …………………………………………………………………………….8
Расчет используемой виртуальной памяти.....................................................................9
Текст программы (с одинарной точностью) …………………………………………..10
(с двойной точностью) …………………………………………...11
Обработка статистических данных..................................................................................14
Выводы …………………………………………………………………………………...21
Список используемой литературы...................................................................................21
НИУ МЭИ
Кафедра АЭС
Отчет по лабораторным работам по курсу
«Информационные и сетевые технологии ядерной энергетики»
Студент: Артюх Н.А
Группа: ТФ-11-08
Преподаватель: Воробьев Ю.Б.
Москва 2012
Содержание
(с двойной точностью) …………………………………………...11
Цель работы
Целью работы является развитие навыков
использования современных
1. Существенным требованием к компьютерным ресурсам: RAM, жесткий диск, CPU
2. Большая продолжительность
расчетной платформы, ОС и оптимизация использования расчетного оборудования
3. Широкое использование методов параллельных расчетов
4. Использование языков высокого уровня Fortran, C/C++
5. Использование готовых
6. Требования к повышенной
Основываясь на этом в лабораторная работа состоит из расчетной программе на языке высокого уровня Fortran, что соответствует пункту 4. Программа моделирует работу реальной расчетной программы ЯЭ. Она должна удовлетворять задаче существенного
заполнения RAM компьютера (пункт 1). В работе было использовано для программы одинарной точности около 174 mb и 348 mb для двойной точности. Для правильной оптимизации расчетного оборудования и отражения специфики работы программ ЯЭ учебная программа должна считать не менее 40 сек (пункты 2 и 1). Написание программы базируется на использовании математических процедур библиотеки IMSL на основе варианта выданного преподавателем, что соответствует пункту 5.
Особенности реализации на Fortran
Для тестов генерировались массивы случайный чисел, которые записывались в файл, другая программа считывала эти массивы из файла и выполняла функции imsl.
Было
выявлено, что при работе подпрограмм
с определенным размером массива, возникновение
ошибки 170 переполнение стека, что потребовало
увеличения стека в настройках. В
оптимизированном режиме был установлен
наиболее «быстрый» процессор, быстрая
математическая библиотека, минимальный
режим отладки и
Описание подпрограммы, используемой в данной лабораторной работе.
DLPRS/DDLPRS (Single/Double precision)
При выполнении работы использовалась подпрограмма DLPRS(DDLPRS), которая
Arguments
M — Number of constraints. (Input)
NVAR — Number of variables. (Input)
A — M by NVAR matrix containing the coefficients of the M constraints. (Input)
LDA — Leading dimension of A exactly as specified in the dimension statement
of the calling program. (Input)
LDA must be at least M.
BL — Vector of length M containing the lower limit of the general constraints; if
there is no lower limit on the I-th constraint, then BL(I) is not referenced.
(Input)
BU — Vector of length M containing the upper limit of the general constraints; if
there is no upper limit on the I-th constraint, then BU(I) is not referenced; if there
are no range constraints, BL and BU can share the same storage locations. (Input)
C — Vector of length NVAR containing the coefficients of the objective function.
(Input)
IRTYPE — Vector of length M indicating the types of general constraints in the
matrix A. (Input)
Let R(I) = A(I, 1) * XSOL(1) + . + A(I, NVAR) * XSOL(NVAR). Then, the value
of IRTYPE(I) signifies the following:
IRTYPE(I) I-th Constraint
0 BL(I).EQ.R(I).EQ.BU(I)
1 R(I).LE.BU(I)
2 R(I).GE.BL(I)
3 BL(I).LE.R(I).LE.BU(I)
XLB — Vector of length NVAR containing the lower bound on the variables; if
there is no lower bound on a variable, then 1.0E30 should be set as the lower
bound. (Input)
XUB — Vector of length NVAR containing the upper bound on the variables; if
there is no upper bound on a variable, then -1.0E30 should be set as the upper
bound. (Input)
OBJ — Value of the objective function. (Output)
XSOL — Vector of length NVAR containing the primal solution. (Output)
DSOL — Vector of length M containing the dual solution. (Output)
Comments
1. Automatic workspace usage is
DLPRS M * M + 57 * M + 3 * NVAR units, or
DDLPRS 2 * M * M + 85 * M + 3 * NVAR units.
Workspace may be explicitly provided, if desired, by use of
D2PRS/DD2PRS. The reference is
CALL D2PRS (M, NVAR, A, LDA, BL, BU, C, IRTYPE, XLB,
XUB, OBJ, XSOL, DSOL, AWK, LDAWK, WK,
IWK)
The additional arguments are as follows:
AWK — Real work array of dimension 1 by 1. (AWK is not used in the
new implementation of the revised simplex algorithm. It is retained
merely for calling sequence consistency.)
LDAWK — Leading dimension of AWK exactly as specified in the
dimension statement of the calling program. LDAWK should be 1. (LDAWK
is not used in the new implementation of the revised simplex algorithm.
It is retained merely for calling sequence consistency.)
WK — Real work vector of length M * (M + 28).
IWK — Integer work vector of length 29 * M + 3 * NVAR.
2. Informational errors
Type Code
3 1 The problem is unbounded.
4 2 Maximum number of iterations exceeded.
3 3 The problem is infeasible.
4 4 Numerical difficulty occurred; using double precision
may help.
4 5 The bounds are inconsistent.
Algorithm
The routine DLPRS uses a revised simplex method to solve linear programming
problems, i.e., problems of the form
______________________________
subject to bO . Ax . bX
xO . x . xX
where c is the objective coefficient vector, A is the coefficient matrix, and the
vectors bO, bX, xO and xX are the lower and upper bounds on the constraints and the
variables, respectively.
For a complete description of the revised simplex method, see Murtagh (1981) or
Murty (1983).
Example
A linear programming problem is solved.
INTEGER LDA, M, NVAR
PARAMETER (M=2, NVAR=2, LDA=M)
C M = number of constraints
C NVAR = number of variables
C
INTEGER I, IRTYPE(M), NOUT
REAL A(LDA,NVAR), B(M), C(NVAR), DSOL(M), OBJ, XLB(NVAR),
& XSOL(NVAR), XUB(NVAR)
EXTERNAL DLPRS, SSCAL, UMACH
C
C Set values for the following problem
C
C Max 1.0*XSOL(1) + 3.0*XSOL(2)
C
C XSOL(1) + XSOL(2) .LE. 1.5
C XSOL(1) + XSOL(2) .GE. 0.5
C
C 0 .LE. XSOL(1) .LE. 1
C 0 .LE. XSOL(2) .LE. 1
C
DATA XLB/2*0.0/, XUB/2*1.0/
DATA A/4*1.0/, B/1.5, .5/, C/1.0, 3.0/
DATA IRTYPE/1, 2/
C To maximize, C must be multiplied by
C -1.
CALL SSCAL (NVAR, -1.0E0, C, 1)
C Solve the LP problem. Since there is
C no range constraint, only B is
C needed.
CALL DLPRS (M, NVAR, A, LDA, B, B, C, IRTYPE, XLB, XUB, OBJ,
& XSOL, DSOL)
C OBJ must be multiplied by -1 to get
C the true maximum.
OBJ = -OBJ
C DSOL must be multiplied by -1 for
C maximization.
CALL SSCAL (M, -1.0E0, DSOL, 1)
C Print results
CALL UMACH (2, NOUT)
WRITE (NOUT,99999) OBJ, (XSOL(I),I=1,NVAR), (DSOL(I),I=1,M)
C
99999 FORMAT (//, ’ Objective = ’, F9.4, //, ’ Primal ’,
& ’Solution =’, 2F9.4, //, ’ Dual solution =’, 2F9.4)
C
END
Output
Objective = 3.5000
Primal Solution = 0.5000 1.0000
Dual solution = 1.0000 0.0000
Вспомогательные подпрограммы :
Timef() – определяет время работы программы. Значение всегда записывается с двойной точностью.
RANDOM_NUMBER- организует псевдослучайное число (или массив) чисел из равномерно распределенного интервала 0<x<1.
Вызов при помощи:
USE DFLIB
Intrinsic Subroutine: Returns one pseudorandom number or an array of such numbers.
Syntax
CALL RANDOM_NUMBER (harvest)
harvest
(Output) Must be of type real. It can be a scalar or an array variable.
It is set to contain pseudorandom numbers from the uniform distribution
within the range 0 <= x < 1.
The seed for the pseudorandom number generator used by RANDOM_NUMBER can be set or queried with RANDOM_SEED. If RANDOM_SEED is not used, the processor sets the seed for RANDOM_NUMBER to a processor-dependent value.
The RANDOM_NUMBER generator uses two separate congruential generators together to produce a period of approximately 10**18, and produces real pseudorandom results with a uniform distribution in (0,1). It accepts two integer seeds, the first of which is reduced to the range [1, 2147483562]. The second seed is reduced to the range [1, 2147483398]. This means that the generator effectively uses two 31-bit seeds.
Compatibility CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
DRAND, DRANDM - организует псевдослучайное число (или массив) чисел из равномерно распределенного интервала 0<x<1 (для двойной точности).
Вызов: : USE DFPORT
Syntax
result = DRAND (iflag)
result = DRANDM (iflag)
iflag
(Input) INTEGER(4). Controls the way the random number is selected.
Results: The result is of type REAL(8). Return values are:
Value of iflag |
Selection process |
1 |
The generator is restarted and the first random value is selected. |
0 |
The next random number in the sequence is selected. |
Otherwise |
The generator is reseeded using iflag, then restarted, and the first random value is selected. |
There is no difference between DRAND and DRANDM. Both functions are included to insure portability of existing code that references one or both of them.
DO
Описание
Пoвтopнoe выпoлнeниe операторов, следующих зa DO вплoть дo опеpaтopa c меткoй slabel включитeльнo.
Syntax
DO slabel [,]variable=expr1,expr2[,
Где:
slabel - oпepaтopнaя мeткa выпoлняeмoгo oпepaтopa.
variable - цeлaя пepeмeннaя
expr1,expr2,expr3 - цeлoe выpaжeниe
WRITE
Передает данные из объектов списка-ввода/вывода в файл, связанный с указанным устройством.
WRITE (определитель-устройства[,
[,IOSTAT=состояние][,ERR=
Bызывaeт и выпoлняeт
CALL имя[([параметр[,параметр]...])
Гдe:
имя - имя вызывaeмoй пoдпpoгpaммы
параметр - фaктичecкий пapaмeтp, кoтopый мoжeт быть:
Описание
Оператор PRINT передает значения из списка вывода в устройство ввода/вывода.
Для вывода на экран:
PRINT *,' TIME=', TIME
Типы данных:
INTEGER=целочисленный тип = -128 … +127
REAL = вещественный тип = -3,4028235Е-38…-1,1754944Е-38
0
+1,1754944Е-38…+3,4028235Е+38
REAL (8) = вещественный тип = -1,797693134862316D+308…-2.
0
+2.225073858507201D-308…+1.
Расчет памяти используемый в программе
Одинарная точность
Одно данное типа real занимает в памяти 4 байта
M=6600 NVAR=6600.
р а с ч е т з а н и м а е м о й о п е р а т и в н о й п а м я т и
О п р е д е л е н и е р а з м е р н о с т и м а с с и в а
В о з м е м о к р у г л е н н о е з н а ч е н и е , к о т о р о е б у д е т з а н и м а т ь к о л -в о б а й т :
Двойная точность
Одно данное типа real(8) занимает в памяти 8 байт
р а с ч е т з а н и м а е м о й о п е р а т и в н о й п а м я т и
байт
о п р е д е л е н и е р а з м е р н о с т и м а с с и в а
В о з м е м о к р у г л е н н о е з н а ч е н и е , к о т о р о е б у д е т з а н и м а т ь к о л -в о б а й т :
байт
Текст программы
Основная программа:одинарная точность: (n=10e5)
USE DFLIB
USE DFPORT
INTEGER,PARAMETER ::M=6600, NVAR=6600, LDA=M
INTEGER n,i, IRTYPE(M)
REAL A(LDA,NVAR), BL(M),BU(M), C(NVAR), DSOL(M), OBJ, XLB(NVAR), XSOL(NVAR), XUB(NVAR),bd
REAL(8) timel,elapsed_time
IRTYPE=3
XLB=-10**5
XUB=10**5
call random_number(A)
call random_number(BL)
call random_number(BU)
call random_number(C)
C=2*(C-0.5)
A=2*(A-0.5)
BL=-12+2*BL
BU=10+2*BU
write(*,*)'vvod n'
read(*,*)n
elapsed_time = TIMEF( )
DO i = 1, n
CALL DLPRS (M, NVAR, A, LDA, BL, BU, C, IRTYPE, XLB, XUB, OBJ, XSOL, DSOL)
bd=5/real(n)
BL=BL+bd
BU=BU-bd
END DO
elapsed_time = TIMEF( )
PRINT '(a,f13.7)','time=', elapsed_time
read(*,*)
END
Основная прграмма:двойная точность :(n=10e5)
USE DFLIB
USE DFPORT
INTEGER,PARAMETER ::M=6600, NVAR=6600, LDA=M
INTEGER n,i,j, IRTYPE(M)
REAL(8) A(LDA,NVAR), BL(M),BU(M), C(NVAR), DSOL(M), OBJ, XLB(NVAR), XSOL(NVAR), XUB(NVAR),bd
REAL(8) timel,elapsed_time
IRTYPE=3
XLB=-10**5
XUB=10**5
DO i=1,M
DO j=1,M
A(i,j)=DRAND(1)
enddo
enddo
DO i=1,M
DO j=1,M
c(i)=DRAND(1)
enddo
enddo
DO i=1,M
DO j=1,M
BU(i)=DRAND(1)
enddo
enddo
DO i=1,M
DO j=1,M
BL(i)=DRAND(1)
enddo
enddo
C=2*(C-0.5)
A=2*(A-0.5)
BL=-12+2*BL
BU=10+2*BU
write(*,*)'vvod n'
read(*,*)n
elapsed_time = TIMEF( )
DO i = 1, n
CALL DDLPRS (M, NVAR, A, LDA, BL, BU, C, IRTYPE, XLB, XUB, OBJ, XSOL, DSOL)
bd=5/real(n)
BL=BL+bd
BU=BU-bd
END DO
elapsed_time = TIMEF( )
PRINT '(a,f13.7)','time=', elapsed_time
read(*,*)
END
Тестирование программы:
А) Режим debug (отладки)
Заставляет компилятор:
1. Проверять целую арифметику на переменные и деление на нуль.
2. Проверять величины присваемого GO TO на допустимость списка в операторе присваемое GO TO.
3. Обеспечивать функционирование системы фиксации ошибок при счете с именами файлов и номерами строк, так что при возникновении ошибки на экран выдается имя файла и номер строки.
DEBUG не переключает и
не подавляет поддержку