160 likes | 301 Views
Челябинский государственный университет. Технологические аспекты разработки программного комплекса для решения нестационарных задач математического программирования большой размерности. Л.Б. Соколинский. Проблематика. Выбор языка программирования Выбор программно-аппаратной платформы
E N D
Челябинский государственный университет Технологические аспекты разработки программного комплекса для решения нестационарных задач математического программирования большой размерности Л.Б. Соколинский
Проблематика • Выбор языка программирования • Выбор программно-аппаратной платформы • Технология программирования
С++ и Сипротив Фортранав Windows NT:сравнение быстродействиякомпиляторов (в секундах)* Windows NT (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.
Сипротив Фортранав Linux:сравнение быстродействиякомпиляторов (в секундах) Linux (Pentium III, 700 MHz)
Windows NT против Linux:сравнение быстродействиякомпиляторов Cи(в секундах) Pentium III, 700 MHz
Результаты анализа • С++ проигрывает в быстродействии Си в 1.5 - 3 раза • Си и Фортран демонстрируют примерно одинаковое быстродействие • Сив Linux проигрывает в быстродействии Си в Windows NT (5 - 40%)
Программно-аппаратная платформа Язык программирования: Си Платформа: a) кластер под Windows + MPIб) кластер под Linux + MPIв) МВС-1000 (Linux + MPI)
Проектирование Строгая иерархия(идеал) Нестрогая иерархия(реальность) М1 М1 Тест М11 М11 М12 М13 М11 М12 М13 М111 М112 М121 М131 М132 М111 М112 М121 М131 М132 + Технологический цикл: • проектирование «сверху-вниз» • кодирование «снизу-вверх» • тестирование «модулями-драйверами» + Допускает эффективный алгоритм локализации ошибок на основе алгоритмов обхода дерева + Хорошая управляемость коллективной разработкой
Виды модулей • Динамические классы используют динамическое выделение памяти (malloc) при создании экземпляров класса. Оптимальны для больших долгоживущих объектов (стек, таблица). • Статические классы используют статическое выделение памяти (static) при создании экземпляров класса. Оптимальны для небольших короткоживущих объектов (дескриптор, запись).
Состав модуля Интерфейс: md_module.h Реализация: md_module.c • Интерфейс (md_module.h) содержит: • определения экспортируемых констант #define; • определения экспортируемых типов (typedef); • экспортируемые макро-определения #define; • прототипы экспортируемых функций. • Реализация (md_module.с) содержит: • #include md_module.h • определения внутренних глобальных констант #define; • определения внутренних типов (typedef); • определения внутренних глобальных static переменных; • прототипы внутренних функций. • внутренние глобальные макро-определения #define; • определения экспортируемых функций. • определения внутренних функций. • Импорт модуля: #include md_module.h
Именование модуля nick_name md_module nick – краткое имя модуля (1-2 символа) name – полное имя модуля Примеры: st_stack, tr_tree
Примеры модулей • Класс stock (склад) • Интерфейс st_stock.h • Реализация st_stock.с • Объект queue (очередь) • Реализация q_queue.с
Идентификаторы md – краткое имя модуля, содержащего определение объектаwrd – английское слово (допускаются сокращения) 1) Обязательно использоватьв паре с #undef2)Описывается как static
Использование макросов #define MAX(x,y) (? x>y:x,y) /* Вычисление максимума двух целых чисел */ int max(int x, int y){ if(x>y) return x; else return y; }; Используется для реализации простых функций, которые вызываются многократно (в циклах или рекурсии) + эффективность - проблемы при использования отладчика
Аномалии при использовании #define #define DIV(x,y) x-y a=3; b=1; c= DIV(3,1)*0; /* получим c=3 */ a=3; b=1; c= a-b*0; /* получим c=3 */ Решение проблемы: #define DIV(x,y) (x-y)
Лесенка Отступ для вложенных операторов – 3 позиции [tab] Элементы одного и того же оператора начинаются с одной и той же позиции. Примеры.