Intel ipp 之视觉计算软件开发平台

1.3 视觉计算软件开发平台

1.3.1 可视化集成开发环境(IDE)

在程序设计的早期阶段,程序员需要借助不同的软件来编写程序,程序员在编程的过程中首先需要用文本编辑软件进行,然后通过编译器软件进行编译,用调试器软件进行调试。因此,在软件过程中,程序员往往需要在不同的软件间来回切换。比如当程序员发现程序执行的结果有错误的时候,他会通过调试器来跟踪程序执行的过程,发现出错的地方后,需要返回文本编辑器对源程序进行修改;修改后的源程序需要再次编译形成可执行文件;如果发现新的可执行程序还出现错误,程序员需要再次进行调试。因此,不同的软件间切换的过程会贯穿软件开发过程中代码实现的整个环节。这无疑给程序员带来了诸多不便,严重影响了软件开发的效率。

因此,如果有一个工具,能将软件开发过程中的代码编辑、编译、调试等功能集成在一个软件中,程序员不需要在不同的软件间来切换,代码的编辑、编译、调试的功能可以无缝的衔接在一起。比如,在这种软件工具中,程序员通过调试发现代码有错的时候,他能够马上对错误的代码进行编辑修改、再编译、调试。相比早期的程序开发而言,程序员会节省大量的时间,使得程序员将更多的经历集中在程序代码的逻辑结构上而不会分散太多的注意力在软件工具的来回切换和使用上。

集成开发环境就是具有上述特点的一个软件工具。集成开发环境(Integrated Development Environment,简称 IDE,也有人称为Integration Design Environment、Integration Debugging Environment)是一种辅助程序开发人员开发软件的应用软件。它将代码编辑、编译、调试的过程集成在一个完整的软件工具中,使得开发过程变得简单明了。大大的提高了软件开发工作人员的工作效率,使得编程的工作变得更加轻松、愉悦。

IDE通常包括编程语言编辑器、编译器/解释器、通常还包括调试器。有时还会包含版本控制系统和一些可以设计图形用户界面的工具。虽然目前有一些IDE支持多种编程语言(例如Eclipse*、NetBeans*、Microsoft Visual Studio*)。

Microsoft Visual Studio是微软公司推出的集成开发环境,是目前最流行的 Windows 平台应用程序开发环境。目前已经开发到 9.0 版本,也就是 Visual Studio 2008。早期的Visual Studio版本中主要有Visual Basic和Visual C++两种程序开发语言,随后,微软引入了建立在 .NET 框架上的托管代码机制以及一门新的面向对象语言 C#(最新的C#语言的版本是3.5),原先的Visual Basic也进化成完全支持面向对象的编程语言Visual Basic .NET。

在Visual Studio的开发环境中,我们可以很方便的建立工程、编辑和组织代码、通过图形用户界面设置编译选项、调试等。Visual Studio将这些功能集成在一起,程序员可以通过图形用户界面很方便的设置相应的功能,特别熟练的程序员还可以通过很多的快捷键来完成任务,使得程序开发的工作方便、快捷。Visual Studio还提供了很有特色的功能,比如智能代码预测功能(IntelliSense),程序员在代码编辑的时候仅仅只需要输入少量字符,系统会提供较好的预测,帮助自动键入相应的代码,可以减少程序员编辑代码的时间和输入错误。

本书的所有代码示例,都是通过Visual Studio 2008来开发完成的。

1.3.2 控制台应用程序开发

现有的软件开发中,很多的应用都是需要开发图形用户界面(GUI)的,在早期,开发图形用户界面是非常冗繁的工作,窗口的大小、位置、菜单等的摆放等都需要程序员用代码来规定和实现。为了使程序员摆脱这些千篇一律的工作,加快工作效率,很多的集成开发环境提供了可视化编程环境。比如,在Visual Studio中,程序员可以通过界面编辑器拖放相应的界面元素(如按钮,菜单、文本框等)到窗口上,很快的设计出界面的各种布局、通过所见即所得的方式(what you see is what you get,程序运行的界面效果等同于设计时的界面),很容易使得界面的设计达到理想的效果。

相对而言,控制台应用程序比较简单,一般没有独立的窗口,在命令行运行。控制台程序的输入输出通过标准IO进行,而不像界面程序可以通过鼠标点击进行操作。一般后台运行(不需要界面显示)的程序可作为控制台应用程序。因此控制台应用程序无需使用任何图形用户界面即可读取标准输入和输出 (I/O) 中的数据并向其写入数据。

开发底层,游戏等(包括后台程序)的时候通常用到控制台程序来编写,一般在学校教学时,老师们初期讲语法,流程时也用到控制台应用程序。

1.3.3 IntelC++编译器

在计算机技术发展的早期,控制计算机所用的机器所能够处理的机器语言(0,1代码)。虽然计算机能够很好的处理机器语言,但是机器语言对与计算机工程师或科研工作者来说,太过抽象,不容易理解,且编写起来很困难。因此,计算机的先驱们发明了高级程序语言。高级程序语言是方便人们编辑、阅读和维护的程序语言,它摆脱了0,1机器语言的束缚,使得程序的代码更加注重于实际应用的逻辑,方便了程序设计的过程。但是,高级程序语言又并不是计算机能够识别并能执行的语言。因此,必须有一种程序,它能起到从高级语言翻译到计算机所能识别的低级语言的作用,我们将这样的程序称为编译程序,将实现这样程序的软件通常称为编译器。

高级语言有很多种,最早的高级语言是Fortran语言,其主要的目的是用来科学计算,后来又出现了C语言。这些语言都是面向结构的程序语言。在国内,已故的国防科技大学中科院院士陈火旺教授是编译原理的先驱,他于上世纪70年代独立自主的实现了国内的首个Fortran语言的编译器。C++是面向对象的高级程序语言。它是C语言的超集(兼容C语言的所有功能)。市场上有很多公司各自推出的C++的编译器,主要有Microsoft 的C++编译器,Borland公司的C++编译器和英特尔公司的C++ 编译器。编译器的不同在于其支持不同的特色功能和生成的目标代码的质量上。

英特尔编译器可提升软件的性能。它能够针对不同CPU型号来生成更有效率的代码,并且通过自动并行处理机制来优化代码,帮助程序员以较快的速度来运行软件。同时,英特尔编译器与其他工具保持兼容,可以集成到广泛使用的开发环境,比如,英特尔编译器能够方便的集成到Visual Studio集成开发环境中。

1.3.4 IntelDebugger调试工具

在程序编写的过程中,错误是在所难免的。我们将程序的错误分为语法错误和语义错误两大类,语法错误通常是指用户输入错了关键词和变量名等,使得编译器不能正确解释程序员的代码,因此不能生成目标代码。编译器都能够指出程序员的语法错误出在什么地方,因此程序员很容易定位并能够修改语法错误。语义错误是更难修改的一类错误(俗称Bug),很多情况下是因为程序员在代码输入的时候不小心使得代码出现逻辑错误(如代码“a==b” 错误地写成了“a=b”),这类错误在代码进行编译的时候是不能被发现的,这样的程序能够执行,只是在执行的时候并不是按照程序员本来的意图来执行,结果也自然会出现错误,甚至在某些状况下会出现严重的损失(导致程序非法退出等)。因此,这类错误的危险性更大。

如果程序员能够跟踪代码的执行过程,从而发现并修改程序执行中出现的语义错误(俗称Debug)。这将是一个非常关键的功能,编译器工具Debugger(调试器)提供了此类功能,程序员可以通过调试器一步一步跟踪代码的执行过程,或者设置断点(程序会在断点处停留下来让程序员观察程序执行的状态,如一些变量值等)来跟踪程序的运行,从而最终定位并修改程序中出现的语义错误。

在安装英特尔的编译器时可以选择是否安装IntelDebugger。

1.3.5 IntelVTune性能分析器

程序员们应该非常清楚,在很多场合,仅仅写出能够正确处理的程序时不够的,很多场合下,程序的性能非常关键,特别是在大数据量处理的环境下,好的算法程序有时候在时间上会有几个数量级的提高。但是程序员写程序的过程是一个递进的过程,开始写出的程序其性能并不是最优的。因此,如果有一个工具能够发现程序执行的过程中的瓶颈(比如找到执行最长时间的函数),并且对整个程序的运行过程进行分析,用图形化的结果显示出来,将对程序员是一个非常大的帮助。

英特尔公司提供的VTune性能分析器是一个强大的性能分析和优化工具,它能确定你的程序的hotspot(执行最长时间的函数),帮助你找到导致性能不理想的原因,从而让你能据此对程序进行优化。该工具支持不同的操作系统,在Windows系统下,最新的有IntelVTune Performance Analyzer 9.1版本。该版本已经集成到Visual Studio集成开发环境中,使用图形界面,支持英特尔最新的四核处理器。能够对程序库、驱动程序和应用程序进行性能分析。IntelVTune 不依赖于程序语言和特定的编译器,能够对C,C++,Fortran,以及C#等编写的程序进行分析,这些程序不需要重新编译,而且分析的过程只需要极低的系统开销,便可以确定性能瓶颈。同时IntelVTune将英特尔线程档案器(IntelThread Profiler)也包含在内,线程档案器可以帮助您调试多线程代码,从而可以在当今的多核处理器上获得最佳性能。VTune只是一个工具,它只会给出一堆数据,要靠程序员从这些数据中分析代码中哪些是程序的瓶颈,哪些是可以大大优化的,而哪些是虽然很占时间但是没有什么优化余地的。

1.3.6 IntelParallel Studio 并行工作室

英特尔在提供了C++的编译器、调试器和性能分析工具VTune外,近期又推出了新的软件工具包IntelParallel Studio。IntelParallel Studio是一个针对Microsoft Visual Studio C/C++开发者的综合并行开发套件,由IntelParallel Composer, IntelParallel Advisor、 IntelParallel Inspector和IntelParallel Amplifier构成,使得基于Windows的开发人员能够更加简便、快捷地创建、调试和优化多核应用软件。

Intel ipp 之视觉计算软件开发平台

图1.6 IntelIPP的应用领域

IntelIPP(英特尔集成性能元件)是一个面向多个应用领域的开发库,它支持多核CPU,是一个高度优化的函数集合(包括并行优化处理、特定处理器结构的优化等优化处理技术),能够处理包括多媒体处理(语音处理、图像处理、视频处理等)、数据处理、通信等应用。IntelIPP提供了几千个优化的函数,这些函数涵盖多个领域的通用算法(如上图所示),这些领域包括:图像和视频、通信和信号处理、数据处理等。在IntelParallel Studio一节可以看出,IntelIPP已经集成到IntelParallel Studio工具套件中。IntelIPP库的目录结构如表1.1所示。

IntelIPP的链接方式

IntelIPP由三种函数库组成 :

  1. Dynamic,包括对各种处理器的优化代码动态库,如ipps.lib,ippst7.dll;
  2. Static Emerged, 包括对各种处理器的优化代码静态库,如ippsemerged.lib;
  3. Static Merged, 包括对指定处理器的优化代码静态库 。

对于不同的需求,这些函数库提供以下四种链接模式:

    1. 动态链接(Dynamic linkage),简便易用,但可执行文件和库文件总量大;
    2. 定制的动态链接(Custom dynamic linkage),抽取指定函数的优化代码组成新动态库,减少可执行文件和库文件大小;

表1.1 IntelIPP库的目录结构图

Intel ipp 之视觉计算软件开发平台

表1.2 IPP图像处理函数分类及在本书中的体现

函数分类

主要功能作用

典型函数名

在本书的体现

Image Data Exchange and Initialization Functions

图像数据的分配、初始化、赋值、拷贝、转换

ippiMalloc
ippiCopy ippiConvert

2.5.2小节 
2.6.1小节

Image Arithmetic and
Logical Operations

图像的算术和逻辑运算

IppiAnd
IppiAdd

2.5.3小节 
5.5.1小节

Image Color Conversion

颜色空间转换

ippiRGBToYCbCr
ippiRGBToGray

2.2.4小节、2.2.5小节、2.6.2小节、3.4.2小节、4.2.2小节、4.3.3小节

Threshold and Compare
Operations

阈值和比较操作

ippiThreshold_GT
ippiCompareC

2.5.3小节、5.5.1小节

Filtering Functions

空间滤波器、提供各种空间滤波算子(平滑、锐化)的实现

ippiFilter
ippiFilterGauss
ippiFilterSobelCross

5.1节、5.2节 
5.4节、5.5节

Image Linear Transforms

图像线性变换,包括离散傅里叶变换(DFT)、快速傅里叶变换(FFT)和离散余弦变换(DCT)等

ippiFFTFwd
ippiDFTFwd
ippiDCTFwd

2.3节、3.4节、3.5.1 
3.5.3小节、5.3、5.5.2小节

Image Statistics Functions

图像统计函数

ippiHistogramEven

4.1、4.3.1

Image Geometry 
Transforms

图像几何变换

ippiResize
ippiRotate
ippiWarpAffine

第六章

Image Compression
Functions

图像压缩功能(如JPEG)

ippiDCTQuantFwd8x8
ippiEncodeHuffman8x8
ippiRGBToYCbCr422LS_MCU

3.4、3.5

  1. 支持单种处理器的静态链接(Single processor static linkage),可执行文件最小,只含适用于指定处理器的优化代码;
  2. 支持多种处理器的静态链接(Static linkage with dispatching),可执行文件较小,只含适用于所有处理器的优化代码。

使用动态链接方式引用IPP库时所需设置的环境变量  在Microsoft Visual Studio中,要用IntelIPP库进行编程,首先需要安装IPP,IntelIPP已经集成到IntelC++ Complier中,因此,只需要安装了IntelC++的编译器,就可以使用IPP库进行编程。编程的时候需要在Visual Studio中设置两个引用,第一个设置时引用IPP的头文件路径(Include files),设置的方法:在Visual Studio的主菜单中选择Tools > OptionsOptions的对话框会打开,在该对话框的左边的列表中选择Projects and Solutions>VC++ Directories接着在右上角的“Show directories for”选项中选择“Include files”,同时在Options对话框右边中间的选项点击空余的选项,选择IntelIPP的安装路径下的“include”目录。第二个设置是引用IntelIPP的链接文件的路径,其方法和引用头文件相似,只是选择在右上角的“Show directories for”选项中选择“Library files”,同时在Options对话框右边中间的选项点击空余的选项,选择IntelIPP的安装路径下的lib目录。

来源:一木易

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年1月21日
下一篇 2014年1月21日

相关推荐