|
![]() |
![]() Результаты вычислительных эксперементов2. Оптимизация вычислений для однопроцессорных компьютерных системВ данном разделе рассматриваются подходы к оптимизации вычислений для однопроцессорных компьютерных систем на базе процессора Intel® Pentium 4, особенности архитектуры и системы команд которых позволяют решать в режиме реального времени в числе прочих такие сложные расчетные задачи, как обработка сигналов, 3D графика,обработка видео и звука и др. Целью выполненных вычислительных экспериментов являлось определение способов эффективной реализации алгоритмов и сравнение временных характеристик программ для различных С++ компиляторов на примере задачи умножения случайно генерируемых квадратных матриц. Необходимым условием для создания эффективных программ является наличие оптимизирующих компиляторов для наиболее распространенных языков программирования высокого уровня. В частности, в настоящее время для С++ активно используются компиляторы Intel C++ Compiler, Microsoft 32-bit C/C++ Optimizing Compiler, Borland C++ for Win32 Compiler. 1. Соглашения и обозначения. При описании результатов использовались обозначения: - A, B – исходные матрицы размерности N x N, заполненные случайными числами типа double; - С – матрица-результат, - T – время работы алгоритма. 2. Используемые средства. Аппаратное обеспечение: PC на основе Intel Pentium 4 1300 MHz, RAM 256 Mb. Платформа: Microsoft Windows 2000 Professional. Среды разработки: Borland C++ Builder 5.0, Microsoft Visual Studio 6.0. Компиляторы: Borland C++ for Win32 Compiler 5.5, Microsoft 32-bit C/C++ Optimizing Compiler, Intel C++ Compiler 5.0. Дополнительные средства: библиотека PLAPACK 3.0. 3. Базовый алгоритм. Перемножение матриц выполняется в соответствии с известным выражением: 4. Оценка производительности. Производительность вычислительной системы обычно измеряется в количестве операций, выполняемый за некоторый фиксированный период времени (как правило, за 1 сек.). Общее количество операций с плавающей запятой при перемножении матриц пропорционально 2*N3; как результат, производительность может быть оценена согласно следующему соотношению 5. Реализация 1.Рассмотрим следующий фрагмент кода: for(i=0; i Время выполнения программы для разных размеров матрицы приведено в таблице 2.1. Таблица 2.1.
Данная реализация имеет следующие показатели (в зависимости от компилятора): Rmin=39,5 Mflops (миллионов операций с плавающей запятой в сек.), Rmax=72,2 Mflops. К очевидным недостаткам алгоритма следует отнести: - большое количество итераций циклов (проблемы с ветвлениями); - наличие в качестве тела цикла сложного выражения (явно зависящего от всех трех переменных цикла); - зависимость текущей итерации от предыдущей итерации (нельзя распараллелить); - отсутствие ориентации на принципы работы встроенной кэш-памяти IntelÒ PentiumÒ 4. 6. Реализация 2. Рассмотрим другую реализацию операции перемножения матриц: for(i=0, i1=1, i2=2; i Временные характеристики данного варианта программы сведены в таблице 2.2. Таблица 2.2.
Данная реализация имеет лучшие показатели (в зависимости от компилятора) по сравнению с предыдущей: Rmin=89,1Mflops, Rmax=653 Mflops. К достоинствам алгоритма следует отнести: - устранение зависимостей от внешних индексов во внутреннем цикле; - возможность распараллеливания команд во внутреннем цикле; - ориентацию на принципы работы встроенной кэш-памяти Intel Pentium 4. 7. Реализация 3. Рассмотрим еще один вариант реализации операции перемножения матриц: for(k=0;k Временные характеристики данного варианта программы сведены в таблице 2.3. Таблица 2.3.
Данная реализация имеет следующие показатели (в зависимости от компилятора): Rmin=208MFp, Rmax=1353MFp. К достоинствам алгоритма можно отнести: - устранение зависимостей от внешних индексов во внутреннем цикле; - уменьшение количества итераций цикла (“разворачивание цикла”); - обращение по индексу ровно столько раз, сколько необходимо; - возможность распараллеливания команд во внутреннем цикле; - ориентацию на принципы работы встроенной кэш-памяти IntelÒ PentiumÒ 4. Наилучшие результаты достигаются, прежде всего, из-за эффективного использования кэш-памяти и ориентации на векторизацию внутреннего цикла при использовании IntelÒ C++ Compiler 5.0. 8. Использование библиотеки PLAPACK. Для оценки достигнутых показателей производительности были выполнены вычислительные эксперименты по перемножению матриц при использовании процедур библиотеки PLAPACK (см. раздел 1). Полученные временные характеристики приведены в таблице 2.4. Таблица 2.4.
9. Основные выводы. При реализации алгоритмов необходимо обращать внимание на эффективное использование встроенной кэш-памяти Intel Pentium 4, а также программировать таким образом, чтобы позволить оптимизирующему компилятору применить векторизацию. При таком подходе становится возможным получение существенного прироста производительности при использовании Intel Pentium 4. Intel C++ Compiler 5.0 проявил себя наилучшим образом при решении задачи умножения квадратных матриц в плане использования возможностей аппаратуры и системы команд. Применение оптимизационных решений позволяет получить лучшие результаты по сравнению с PLAPACK 3.0. Среда Microsoft Visual Studio позволяет легко встраивать оптимизирующие компиляторы. | ![]() |
Новости22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012
|
![]() |
![]() |