2.2Обоснование выбора инструментальных средств реализации хранения полутоновых растровых изображений в оперативной памяти Как было показано в пункте 1.5.1, к эффективности операций обращения к представлению изображения в оперативной памяти компьютера предъявляются жёсткие требования. Ввиду высокой частоты возникновения таких обращений (подраздел 1.4) необходимо добиться не только требуемой асимптотической оценки O(1), но и минимизировать количество выполняемых вычислительных операций. Следовательно, для реализации представления изображения в оперативной памяти необходимо воспользоваться языком программирования общего назначения, предоставляющим программисту возможность самостоятельно осуществлять управление памятью. Более того, это обязательно должен быть язык, который компилируется в исполняемый машинный код, а не в некоторое промежуточное представление, которое затем выполняется программой-интерпретатором. Несмотря на то, что по сравнению с компилируемыми языками программирования интерпретируемые языки часто обладают большей гибкостью и простотой использования, они всегда уступают им по производительности [11]. Для отдельных типов программ (например, сетевых) эта разница несущественна, так как узким местом в них является, например, пропускная способность каналов передачи данных. Однако, как было показано выше, в процессе обработки полутоновых растровых изображений именно обращение к представлению изображения в оперативной памяти может оказаться узким местом. Следовательно, дополнительные затраты, связанные с использованием интерпретируемых языков программирования, недопустимы для рассматриваемой задачи.
Среди компилируемых языков программирования общего назначения наиболее популярными на данный момент являются C, C++, Free Pascal и Delphi [12]. Все они предоставляют программисту возможность самостоятельного управления памятью и обладают механизмами доступа к ней, не требующими никаких накладных вычислительных расходов. Более того, во всех этих языках существует возможность обращения к функциям OpenGL, что позволяет использовать любой из них для взаимодействия с реализацией методов визуализации.
Таким образом, все рассматриваемые компилируемые языки программирования (C, C++, Free Pascal и Delphi) являются подходящими для реализации представления изображения в оперативной памяти. Выбор в пользу одного из них будет сделан на основании анализа других методов обработки полутоновых растровых изображений большого размера.
2.3Обоснование выбора инструментальных средств реализации методов улучшения, восстановления и морфологической обработки полутоновых растровых изображений Эффективная реализация рассматриваемых методов преобразования изображений является залогом достижения цели данной ПНИР. Для обеспечения оперативности обработки полутоновых растровых изображений большого размера эти методы должны быть реализованы максимально эффективно.
Как было показано на первом этапе проекта, большинство рассматриваемых методов уже реализовано в библиотеке ImageMagick [14]. Возможно, в этой библиотеке они реализованы достаточно эффективно, чтобы обеспечивать оперативность обработки изображений большого размера. С другой стороны, на первом этапе проекта было выяснено, что разработчиками этого программного пакета никогда не ставилось целью достижение максимальной скорости обработки изображений. Следовательно, на случай, если эффективность существующих реализаций окажется мала, необходимо воспользоваться более производительными вычислительными средствами.
Аналитический обзор аппаратных возможностей современных графических ускорителей, проведённый на первом этапе проекта, показал, что именно за счёт их использования для параллельной обработки элементов изображения можно повысить эффективность существующих методов.
Актуальным является вопрос выбора инструментальных средств программирования графического процессора. В настоящее время существует большое количество языков программирования графических ускорителей: CUDA, OpenCL, FireStream, DirectCompute. Каждый из них обладает своими достоинствами и недостатками. Так, например, CUDA и FireStream ориентированы на работу только с графическими ускорителями конкретного производителя: NVidia и AMD соответственно. Это сужает область их применения, однако позволяет использовать специфические особенности поддерживаемых графических ускорителей для повышения эффективности вычислений. Программы на DirectCompute могут работать с устройствами обоих производителей, но только под управлением операционной системы Windows. Язык OpenCL лишён всех перечисленных недостатков, однако он обладает большой универсальностью, что делает его более сложным и менее удобным в использовании.
Подробный анализ инструментальных средств программирования графических ускорителей был проведён на первом этапе проекта.
Как было сказано выше, наиболее универсальным средством программирования графических ускорителей является язык OpenCL. Однако его универсальность не позволяет использовать специфические особенности видеокарт конкретных производителей. Так как целью данного проекта является создание наиболее эффективных реализаций методов обработки полутоновых растровых изображений большого размера, то можно пожертвовать поддержкой всех имеющихся на данный момент видеокарт ради получения возможности создания более производительных реализаций. Поэтому в рамках данной ПНИР методы улучшения, восстановления и морфологической обработки будут реализованы с помощью NVidia CUDA. Этот выбор был сделан, чтобы создать наиболее эффективную реализацию метода линейной фильтрации за счёт использования особенностей карт NVidia [15]. Кроме того, среди всех перечисленных языков CUDA предоставляет наиболее удобный программный интерфейс, который позволяет сконцентрироваться на решаемой задаче [13].
Выбор CUDA как языка программирования графических ускорителей влечёт за собой сокращение множества универсальных языков программирования, с помощью которых можно реализовывать другие методы. Это связано с тем, что CUDA не имеет привязки к Free Pascal и Delphi [16]. Следовательно, эти языки придётся исключить из дальнейшего рассмотрения. Таким образом, языками программирования общего назначения, которые могут быть использованы для реализации рассматриваемых в данной ПНИР методов обработки полутоновых растровых изображений большого размера, являются C и C++. При этом, за исключением некоторых особенностей, язык C можно рассматривать как подмножество языка C++ [17]. Следовательно, C++ можно выбрать в качестве основного используемого языка программирования общего назначения.
|