Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб пособие по КР, СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.72 Mб
Скачать

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

В качестве примера можно рассмотреть программу, реализующую вычисление арифметического выражения (4.1), которое было рассмотрено в п. 4.2, написанную на ассемблере (прил. П5).

Данная программа осуществляет последовательное вычисление арифметического выражения без организации мультизадачности. В качестве операндов используются целые неотрицательные числа в диапазоне от 0 до 99.

7. Определение временных

ХАРАКТЕРИСТИК ПРИЛОЖЕНИЯ

Используя профилировщик, оценим скорость работы приложения, написанного на С/С++ с организацией параллельных вычислений.

При профилировании программного модуля, написанного на С/С++, для операционной системы Windows используем профилировщик AQtime 3.16. Demo.

Первоначально необходимо установить настройки среды программирования, как показано на рис. 7.1 – 7.3.

Р и с. 7.1. Меню Build / Set Active Configuration

Р и с. 7.2. Меню Project / Settings

Рис. 7.3

После настройки среды программирования необходимо перекомпилировать проект Build / Rebuild Project, а затем запустить профилировщик.

Рис. 7.4

В профилировщике необходимо открыть из папки Debug файл MultithreadProject (рис. 7.5).

Рис. 7.5

Далее, в поле Areas с помощью контекстного меню, вызванного правой кнопкой мыши, выбираем опцию Add-Area…, в появившемся окне указываем имя AllThreads (рис. 7.6).

Рис. 7.6

В итоге в поле Areas появляется папка с именем AllThreads. Затем правой кнопкой мыши вызываем контекстное меню и выбираем пункт AddRoutines. В появившемся окне в левой его части выбираем файл main.obj, а в правой части окна выбираем функции тредов (рис. 7.7).

Рис. 7.7

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

Для определения временных характеристик приложения, написанного на ассемблере, используем профилировщик Turbo Profiler, который является составной частью интегрированной среды разработки Borland C++ 5.02.

Первоначально необходимо открыть профилируемый файл File -> Open (рис. 7.9).

В открывшемся окне в поле Program name необходимо указать полный путь, по которому находится профилируемый файл (рис. 7.10).

После загрузки окно профилировщика приобретет следующий вид (рис. 7.11).

Далее необходимо запустить профилировщик Run -> Run. В результате работы которого в поле Execution Profile будет показано время вычисления арифметического выражения.

Рис. 7.8

Рис. 7.9

Рис. 7.10

Рис. 7.11

Таким образом, зная время работы приложения, написанного на С++ и на ассемблере, можно произвести их сравнение по временному критерию.

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