Л.Б. Соколинский

16
Технологические аспекты Технологические аспекты разработки программного разработки программного комплекса для решения комплекса для решения нестационарных задач нестационарных задач математического математического программирования большой программирования большой размерности размерности Л.Б. Соколинский Л.Б. Соколинский Челябинский государственный университет Челябинский государственный университет

Upload: micah-ross

Post on 31-Dec-2015

18 views

Category:

Documents


1 download

DESCRIPTION

Челябинский государственный университет. Технологические аспекты разработки программного комплекса для решения нестационарных задач математического программирования большой размерности. Л.Б. Соколинский. Проблематика. Выбор языка программирования Выбор программно-аппаратной платформы - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Л.Б. Соколинский

Технологические аспекты разработки Технологические аспекты разработки программного комплекса для программного комплекса для

решения нестационарных задач решения нестационарных задач математического программирования математического программирования

большой размерностибольшой размерности

Л.Б. СоколинскийЛ.Б. Соколинский

Челябинский государственный университетЧелябинский государственный университет

Page 2: Л.Б. Соколинский

22

ПроблематикаПроблематика

1. Выбор языка программирования

2. Выбор программно-аппаратной платформы

3. Технология программирования

Page 3: Л.Б. Соколинский

33

С++ и СиС++ и Си против Фортранапротив Фортрана в в Windows NTWindows NT::сравнение быстродействиясравнение быстродействия компиляторовкомпиляторов ( (в секундах)*в секундах)*

0

5

10

15

20

25

30

Linpack MolDyn

C++ (Borland)

C (Portland Group)

Fortran 90 (Portland Group)

Fortran 77 (Portland Group)

Windows NT Windows NT (Pentium III, 700 MHz)(Pentium III, 700 MHz)

* J. M. Bull, L. A. Smith, L. Pottage, R. Freeman Benchmarking Java against C and Fortran for scientific applications // Proceedings of the 2001 joint ACM-ISCOPE conference on Java Grande, Palo Alto, California, United States. -2001. -P. 97-105.

Page 4: Л.Б. Соколинский

44

СиСи против Фортранапротив Фортрана в в LinuxLinux::сравнение быстродействиясравнение быстродействия компиляторовкомпиляторов ( (в секундах)в секундах)

0

5

10

15

20

Linpack MolDyn

C (GNU)

Fortran 77 (GNU )

Fortran 77 (Portland Group)

Linux Linux (Pentium III, 700 MHz)(Pentium III, 700 MHz)

Page 5: Л.Б. Соколинский

55

Windows NT Windows NT против против LinuxLinux::сравнение быстродействиясравнение быстродействия компиляторов компиляторов CCии

((в секундах)в секундах)

0246

81012

141618

20

Linpack MolDyn

Windows NT (PGCC)

Linux (GNU C)

Pentium III, 700 MHzPentium III, 700 MHz

Page 6: Л.Б. Соколинский

66

Результаты анализаРезультаты анализа

1. С++ проигрывает в быстродействии Си в 1.5

- 3 раза

2. Си и Фортран демонстрируют примерно

одинаковое быстродействие

3. Си в Linux проигрывает в быстродействии

Си в Windows NT (5 - 40%)

Page 7: Л.Б. Соколинский

77

Программно-аппаратная платформаПрограммно-аппаратная платформа

Язык программирования: Си

Платформа:

a) кластер под Windows + MPI

б) кластер под Linux + MPI

в) МВС-1000 (Linux + MPI)

Page 8: Л.Б. Соколинский

88

ПроектированиеПроектированиеСтрогая иерархия

(идеал)Нестрогая иерархия

(реальность)

М1

М11 М12 М13

М111 М112 М121 М131 М132

М1

М11 М12 М13

М111 М112 М121 М131 М132

+ Технологический цикл:– проектирование «сверху-вниз»– кодирование «снизу-вверх»– тестирование «модулями-драйверами»

+ Допускает эффективный алгоритм локализации ошибок на основе алгоритмов обхода дерева

+ Хорошая управляемость коллективной разработкой

Тест М11

Page 9: Л.Б. Соколинский

99

Виды модулейВиды модулей

Динамические классы используют динамическое выделение памяти (malloc) при создании экземпляров класса. Оптимальны для больших долгоживущих объектов (стек, таблица).

Статические классы используют статическое выделение памяти (static) при создании экземпляров класса. Оптимальны для небольших короткоживущих объектов (дескриптор, запись).

Модули

Объекты Классы

Статические Динамические

Page 10: Л.Б. Соколинский

1010

Состав модуляСостав модуля

Интерфейс (md_module.h) содержит:– определения экспортируемых констант #define; – определения экспортируемых типов (typedef);– экспортируемые макро-определения #define;– прототипы экспортируемых функций.

Реализация (md_module.с) содержит:– #include md_module.h– определения внутренних глобальных констант #define;– определения внутренних типов (typedef);– определения внутренних глобальных static переменных;– прототипы внутренних функций.– внутренние глобальные макро-определения #define;– определения экспортируемых функций.– определения внутренних функций.

Импорт модуля: #include md_module.h

Интерфейс: md_module.h

Реализация: md_module.c

Page 11: Л.Б. Соколинский

1111

Именование модуляИменование модуля

nick_name md_module

nick – краткое имя модуля (1-2 символа)

name – полное имя модуля

Примеры: st_stack, tr_tree

Page 12: Л.Б. Соколинский

1212

Примеры модулейПримеры модулей

1. Класс stock (склад)

Интерфейс st_stock.h

Реализация st_stock.с

2. Объект queue (очередь)

Реализация q_queue.с

Page 13: Л.Б. Соколинский

1313

ИдентификаторыИдентификаторы

Объект Экспортируемый

Внутренний

Глобальный Локальный

Константа #define

MD_WRD1_WRD2 _WRD1_WRD2 WRD1_WRD21)

Макро #define

MD_WRD1_WRD2(<парам-ы>) _WRD1_WRD2(<парам-ы>) WRD1_WRD2 (<парам-ы>) 1)

Переменная _wrd1Wrd22) wrd1Wrd2

Функция md_wrd1Wrd2 (<парам-ы>) _wrd1Wrd2 (<парам-ы>) 2)

Тип md_wrd1Wrd2_t _wrd1Wrd2_t

11) ) Обязательно использоватьОбязательно использовать в паре с в паре с #undef#undef22)) Описывается как Описывается как staticstatic

mdmd – – краткое имя модуля, содержащего определение объектакраткое имя модуля, содержащего определение объектаwrdwrd – – английское слово (допускаются сокращения)английское слово (допускаются сокращения)

Page 14: Л.Б. Соколинский

1414

Использование макросовИспользование макросов

#define MAX(x,y) (? x>y : x, y)

/* Вычисление максимума двух целых чисел */

int max(int x, int y){

if (x>y)

return x;

else

return y;

};Используется для реализации простых функций, которые вызываются многократно (в циклах или рекурсии)

+ эффективность

- проблемы при использования отладчика

Page 15: Л.Б. Соколинский

1515

Аномалии при использовании Аномалии при использовании #define#define

#define DIV(x,y) x-y

a=3;

b=1;

c= DIV(3,1)*0;

/* получим c=3 */

Решение проблемы:

#define DIV(x,y) (x-y)

a=3;

b=1;

c= a-b*0;

/* получим c=3 */

Page 16: Л.Б. Соколинский

1616

ЛесенкаЛесенка

Отступ для вложенных операторов – 3 позиции [tab]

Элементы одного и того же оператора начинаются с одной и той же позиции.

Примеры.