Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: XXVI Международной научно-практической конференции «Естественные и математические науки в современном мире» (Россия, г. Новосибирск, 12 января 2015 г.)

Наука: Информационные технологии

Секция: Математическое моделирование, численные методы и комплексы программ

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Дадоян К.А. ОПТИМИЗАЦИЯ ИСХОДНОГО КОДА ПРОГРАММ, РЕАЛИЗУЮЩИХ МОДЕЛИ ФИЗИЧЕСКИХ ПРОЦЕССОВ В СЛОЖНЫХ ОБЪЕКТАХ // Естественные и математические науки в современном мире: сб. ст. по матер. XXVI междунар. науч.-практ. конф. № 1(25). – Новосибирск: СибАК, 2015.
Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

ОПТИМИЗАЦИЯ  ИСХОДНОГО  КОДА  ПРОГРАММ,  РЕАЛИЗУЮЩИХ  МОДЕЛИ  ФИЗИЧЕСКИХ  ПРОЦЕССОВ  В  СЛОЖНЫХ  ОБЪЕКТАХ

Дадоян  Карине  Араиковна

студент  2  курса,  инженерного  факультета,  Северо-Кавказский  федеральный  университет,  филиал,  РФ,  г.  Пятигорск

E -mail

Джамалов  Адиль  Чубанович

студент  3  курса,  инженерного  факультета,  Северо-Кавказский  федеральный  университет,  филиал,  РФ,  г.  Пятигорск

Пирмагомедов  Олег  Владимирович

студент  3  курса,  инженерного  факультета,  Северо-Кавказский  федеральный  университет,  филиал,  РФ,  г.  Пятигорск

Тимченко  Ольга  Викторовна

канд.  экон.  наук,  кафедры  физико-математических  наук  Северо-Кавказский  федеральный  университет,  филиал,  РФ,  г.  Пятигорск

 

Optimization  of  the  source  code  that  implements  the  models  of  physical  processes  in  a  complex  object

Dadoyan  Karine

2nd  year  student  ,  Faculty  of  Engineering,  North-Caucasus  Federal  University,  branch,  Russia,  Pyatigorsk

Jamalov  Adil

3-year  student  ,  Faculty  of  Engineering,  North-Caucasus  Federal  University,  branch,  Russia,  Pyatigorsk

Pirmagomedov  Oleg

3-year  student  ,  Faculty  of  Engineering,  North-Caucasus  Federal  University,  branch,  Russia,  Pyatigorsk

Timchenko  Olga

research  manager,  PhD.  ehkon.  Sciences,  Department  of  Physics-Mathematical  Sciences  North-Caucasus  Federal  University,  branch,  Russia,  Pyatigorsk

 

АННОТАЦИЯ

В  данной  статье  рассмотрены  методы  оценки  производительности  программного  кода,  предложен  способ  его  оптимизации.  Это  позволяет  увеличить  скорость  вычислений,  что  очень  актуально  для  моделирования  сложных  физических  и  технических  процессов  и  систем.

ABSTRACT

This  article  describes  the  methods  for  evaluating  the  performance  of  code,  provides  a  method  for  optimization.  This  can  speed  up  the  calculations,  which  is  very  important  for  modeling  complex  physical  and  technical  processes  and  systems.

 

Ключевые  слова:  Компьютерное  моделирование;  оптимизация  кода  программы;  граничные  условия;  математическая  модель;  многопоточное  приложение. 

Keywords .  Computer  simulation;  code  optimization  program;  boundary  conditions;  mathematical  model;  multi-threaded  application.

 

В  ходе  решения  задач  моделирования  сложных  физических  и  технических  процессов  специалисты  сталкиваются  с  проблемами  ограниченности  ресурсов  ЭВМ.  Программы,  реализующие  сложные  модели,  требуют  значительных  затрат  компьютерного  времени  для  вычислений,  иногда  мощности  компьютеров  не  хватает  для  их  реализации  и  приходится  прибегать  к  упрощению  моделей,  что,  безусловно,  негативно  сказывается  на  результатах,  снижая  точность  расчетов.  Для  решения  этой  проблемы  можно  оптимизировать  структуру  программы  с  целью  повышения  скорости  вычислений.

Для  оптимизации  приложения  можно  выделить  два  основных  направления:  оптимизация  алгоритма  вычислений  и  снижение  расходов  процессорного  времени  на  выполнение  побочных  задач.

Перед  началом  оптимизации  кода,  в  первую  очередь  следует  найти  узкие  места  в  программе,  расходующее  наибольшее  количество  вычислительных  ресурсов  (процессорного  времени,  оперативной  памяти).  Для  нахождения  таких  узких  мест  применяются  специализированные  программы  —  профайлеры.  К  сожалению,  в  среде  разработки  Delphi  нет  встроенного  приложения  для  этой  задачи,  поэтому  мы  используем  бесплатную  программу  Sampling  Profiler  для  нахождения  проблемных  мест  в  коде  и  функцию  GetTickCount  для  вычисления  скорости  работы  кода.

Функция  GetTickCount  возвращает  количество  миллисекунд  с  момента  загрузки  Windows.  Погрешность  измерения  составляет  1  %.  Для  получения  достоверных  данных  мы  используем  среднее  значение  из  выборки  в  30  результатов  [1].

Пример  тестового  кода  приведен  на  рисунке  1.

 

Рисунок  1.  Код  для  оценки  скорости  работы  программы

 

Пример  выполнения  этой  программы  приведен  на  рисунке  2.

 

Рисунок  2.  Результат  выполнения  тестового  кода

 

Программа  выводит  верный  результат  и  может  использоваться  для  оценки  скорости  работы  реального  приложения.

В  настройках  линковщика  среды  Delphi  следует  включить  добавление  отладочной  информации  TD32,  она  необходима  профайлеру  для  корректной  работы  (рисунок  3). 

 

Рисунок  3.  Настройка  линковщика  в  среде  Delphi

 

В  качестве  примера  оптимизации  кода  мы  разберем  простую  программу  для  моделирования  тепловых  процессов  протекающих  в  какой-либо  среде.  Часть  кода  приведена  ниже.

for  time  :=  1  to  5000  do  begin

for  i:=2  to  21  do

  for  j  :=  2  to  51  do

  for  k  :=  14  downto  2  do

  dT1[i,j,k]:=a4*dtau*(((T1[i-1,j,k]  -2*t1[i,j,k]+t1[i+1,j,k])/sqr(dX))+((T1[i,j-1,k]-2*t1[i,j,k]+  t1[i,j+1,k])/sqr(dY))+((t1[i,j,k+1]-2*t1[i,j,k]+t1[i,j,k-1])/sqr(dZ)));

Series1.AddXY((time)  div  4,T1[11,5,5]);

Memo1.Lines.Add(FloatToStr(t1[11,5,5]));

Application.ProcessMessages;

end;

 

Настроим  параметры  профайлера  для  оценки  скорости  работы  программы.  Эти  настройки  приведены  на  рисунке  4.

 

Рисунок  4.  Настройки  главного  окна  профайлера

 

Запустим  программу  в  профайлере.  На  рисунке  5  показан  результат  оценки  скорости  работы  отдельных  модулей  программы. 

 

Рисунок  5.  Результаты  работы  профайлера

 

Время  на  одну  итерацию  составило  11  мс.  Общее  время  выполнения  программы  55  секунд. 

Как  видно  из  отчета,  на  вычисления  расходуется  лишь  12,67  %  времени,  все  остальное  уходит  на  вывод  данных  в  memo  и  chart.

Как  это  можно  исправить?  [2].

В  первую  очередь  можно  отключить  вызов  функции  Application.ProcessMessages,  позволяющей  наблюдать  за  построением  графика  в  реальном  времени.  В  результате,  график  будет  виден  только  после  завершения  вычислений.  Это  не  всегда  удобно,  но  в  случае  с  программами,  выполняющими  моделирование,  такой  шаг  зачастую  оправдан.  В  результате  использования  такого  простого  приема,  время  выполнения  одной  итерации  снизилось  до  2  миллисекунд,  что  дает  нам  прирост  производительности  в  5,5  раз. 

Для  отделения  вычислительной  части  программы  от  её  интерфейса  существуют  можно  использовать  многопоточные  вычисления.

Поскольку  метод  конечных  разностей,  используемый  в  нашей  программе,  на  каждой  новой  итерации  использует  ранее  вычисленное  состояние  объекта,  мы  не  можем  использовать  более  одного  потока  для  вычислений.

Для  вынесения  вычислительно  модуля  в  отдельный  поток,  мы  используем  стандартный  объект  Delphi  Thread  Object.  В  процедуру  Execute  нового  потока  мы  переносим  код  нашей  вычислительной  процедуры,  за  исключением  тех  команд  которые  отвечают  за  взаимодействие  с  пользовательским  интерфейсом.  К  сожалению,  из  контекста  потока  невозможно  непосредственно  взаимодействовать  с  VCL  формами  ,  поэтому  обновление  данных  формы  осуществляется  через  встроенную  процедуру  Synchronize  параметром  которой  мы  указываем  процедуру  выводящую  результаты  вычислений  в  компоненты  Tmemo  и  TChart  главного  окна  программы.  Результат  выполнения  программы,  реализующей  вычисления  в  потоках,  приведен  на  рисунке  6  [3].

 

Рисунок  6.  Результат  выполнения  программы

 

Скорость  вычислений  составила  от  1  до  2  миллисекунд  на  одну  итерацию,  в  зависимости  от  общей  загруженности  ядер  процессора  и  приоритета  создаваемого  потока.  Наилучшая  производительность  наблюдалась  при  создании  потока  с  приоритетом  Tphighest(Высокий). 

Плюсы  использования  потоков  в  приложениях:

·     Интерфейс  программы  не  зависит  от  вычислений.  Не  происходит  «зависания»  программы.

·     Легко  реализуется  возможность  остановки  вычислений.

·     Высокая  производительность.

·     Легко  регулировать  приоритет  потока.

Минусы  применения  потоков:

·     Сложность  разработки  и  отладки  программного  кода  [4].

·     Сложность  взаимодействия  потоков  программы  при  доступе  к  общим  ресурсам  (например  к  открытым  файлам,  ячейкам  памяти  и  др.).

Таким  образом,  внеся  некоторые  изменения  в  структуру  программы,  мы  получаем  экономию  времени  выполнения  приложения  в  11  раз  по  сравнению  с  первоначальным  вариантом.  При  этом  алгоритм  вычислений  не  изменяется.  Это  позволяет  обрабатывать  большие  объемы  данных  с  сохранением  точности  моделирования.  В  дальнейшем  для  оптимизации  программ  такого  рода  можно  попытаться  оптимизировать  алгоритм  вычислений  с  учетом  архитектуры  процессора.  Это  позволит  в  ещё  большей  степени  увеличить  производительность  программы  [5].

 

Список  литературы:

1.Взаимодействующие  последовательные  процессы  /  И.  Хоар  /  М:  Мир  1989  г.

2.Котов  В.Е.  Алгебра  регулярных  сетей  Петри.  //  Кибернетика,  —  1980,  —  №  5,  —  с.  10—18.

3.Котов  В.Е.  Сети  Петри.  -М.:  Наука,  1984.  —  160  с.

4.Параллельные  вычислительные  системы  /  Б.А.  Головкин  /  М:  Наука  1980  г.

5.Распределённые  и  управляющие  вычислительные  системы  /  М:  Наука  1987.

Проголосовать за статью
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.