<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; 尹成</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/475496/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 13:40:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>基于Visual C++ 2010 混合 Python 编程以及 Python 简介</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010-python-python/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010-python-python/#comments</comments>
		<pubDate>Fri, 14 May 2010 04:09:40 +0000</pubDate>
		<dc:creator>尹成</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[软件开发工具]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010-python-python/</guid>
		<description><![CDATA[我们重点讲解如何在基于Visual C++2010 开发Python的调用，先介绍下Python， Python 具有脚本语言中最丰富和强大的类库，足以支持绝大多数日常应用。它的名字来源于一个喜剧,也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用。著名的自由软件作者Eric Raymond在他的文章《如何成为一名黑客》中，将Python列为黑客应当学习的四种编程语言之一，并建议人们从Python开始学习编程。 　下面是一个在标准输出设备上输出Hello World的简单程序，这种程序通常作为开始学习编程语言时的第一个程序： 　　在python2.x版本中 　　#!/usr/bin/env python 　　print "Hello, world!" 　　或者： 　　import sys 　　sys.stdout.write("Hello, world\n") 　　/////// 　　在python3.x中 　　print是一个完完全全的函数，需要修改成： 　　print('Hello world!') Python的创始人为Guido van Rossum。1989年圣诞节期间，在阿姆斯特丹，Guido为了打发圣诞节的无趣，决心开发一个新的脚本解释程序，做为 ABC 语言的一种继承。之所以选中 Python（大蟒蛇的意思）作为程序的名字，是因为他是一个Monty Python的飞行马戏团的爱好者。 　　ABC是由Guido参加设计的一种教学语言。就Guido本人看来，ABC 这种语言非常优美和强大，是专门为非专业程序员设计的。但是ABC语言并没有成功，究其原因，Guido 认为是非开放造成的。Guido 决心在 Python 中避免这一错误（的确如此，Python 与其它的语言如C、C++和Java结合的非常好）。同时，他还想实现在 ABC 中闪现过但未曾实现的东西。 　　就这样，Python在Guido手中诞生了。实际上，第一个实现是在Mac机上。可以说，Python是从ABC发展起来，主要受到了Modula-3（另一种相当优美且强大的语言，为小型团体所设计的）的影响。并且结合了Unix shell和C的习惯。 　　Python在编程语言中的定位 　　很多大规模软件开发计划例如 Zope， Mnet 及 BitTorrent. Google都在广泛地使用它。 　　通常认为，Python是一种解释性的语言，但是这种说法是不正确的，实际上，Python在执行时，首先会将.py文件中的源代码编译成Python的byte code（字节码），然后再由Python Virtual Machine来执行这些编译好的byte code。这种机制的基本思想跟Java，.NET是一致的。然而，Python Virtual [...]]]></description>
			<content:encoded><![CDATA[<p>我们重点讲解如何在基于Visual C++2010 开发Python的调用，先介绍下Python，</p>
<p>Python 具有脚本语言中最丰富和强大的类库，足以支持绝大多数日常应用。它的名字来源于一个喜剧,也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用。著名的自由软件作者Eric Raymond在他的文章《如何成为一名黑客》中，将Python列为黑客应当学习的四种编程语言之一，并建议人们从Python开始学习编程。</p>
<p>　下面是一个在标准输出设备上输出Hello World的简单程序，这种程序通常作为开始学习编程语言时的第一个程序：</p>
<p>　　在python2.x版本中</p>
<p>　　#!/usr/bin/env python</p>
<p>　　print "Hello, world!"</p>
<p>　　或者：</p>
<p>　　import sys</p>
<p>　　sys.stdout.write("Hello, world\n")</p>
<p>　　///////</p>
<p>　　在python3.x中</p>
<p>　　print是一个完完全全的函数，需要修改成：</p>
<p>　　print('Hello world!')</p>
<p>Python的创始人为Guido van Rossum。1989年圣诞节期间，在阿姆斯特丹，Guido为了打发圣诞节的无趣，决心开发一个新的脚本解释程序，做为 ABC 语言的一种继承。之所以选中 Python（大蟒蛇的意思）作为程序的名字，是因为他是一个Monty Python的飞行马戏团的爱好者。<br />
　　ABC是由Guido参加设计的一种教学语言。就Guido本人看来，ABC 这种语言非常优美和强大，是专门为非专业程序员设计的。但是ABC语言并没有成功，究其原因，Guido 认为是非开放造成的。Guido 决心在 Python 中避免这一错误（的确如此，Python 与其它的语言如C、C++和Java结合的非常好）。同时，他还想实现在 ABC 中闪现过但未曾实现的东西。<br />
　　就这样，Python在Guido手中诞生了。实际上，第一个实现是在Mac机上。可以说，Python是从ABC发展起来，主要受到了Modula-3（另一种相当优美且强大的语言，为小型团体所设计的）的影响。并且结合了Unix shell和C的习惯。<br />
　　Python在编程语言中的定位<br />
　　很多大规模软件开发计划例如 Zope， Mnet 及 BitTorrent. Google都在广泛地使用它。<br />
　　通常认为，Python是一种解释性的语言，但是这种说法是不正确的，实际上，Python在执行时，首先会将.py文件中的源代码编译成Python的byte code（字节码），然后再由Python Virtual Machine来执行这些编译好的byte code。这种机制的基本思想跟Java，.NET是一致的。然而，Python Virtual Machine与Java或.NET的Virtual Machine不同的是，Python的Virtual Machine是一种更高级的Virtual Machine。这里的高级并不是通常意义上的高级，不是说Python的Virtual Machine比Java或.NET的功能更强大，而是说和Java 或.NET相比，Python的Virtual Machine距离真实机器的距离更远。或者可以这么说，Python的Virtual Machine是一种抽象层次更高的Virtual Machine。<br />
　　基于C的Python编译出的字节码文件，通常是.pyc格式。<br />
　　在实际开发中，python常被昵称为胶水语言，这不是说他会把你的手指粘住，而是说他能够很轻松的把用其他语言制作的各种模块（尤其是C/C++）轻松地联结在一起。常见的一种应用情形是，使用python快速生成程序的原型（有时甚至是程序的最终界面），然后对其中有特别要求的部分，用更合适的语言改写，比如3D游戏中的图形渲染模块，速度要求非常高，就可以用C++重写。</p>
<p>可扩充性可说是Python作为一种编程语言的特色。新的内置模块（module）可以用C 或 C++写成。而我们也可为现成的模块加上Python的接口。Python可以使用户避免过分的语法的羁绊而将精力主要集中到所要实现的程序任务上。<br />
　　Python也被称为是一门清晰的语言。因为它的作者在设计它的时候，总的指导思想是，对于一个特定的问题，只要有一种最好的方法来解决就好了。这在由Tim Peters写的python格言（称为The Zen of Python）里面表述为：<br />
　　There should be one-- and preferably only one --obvious way to do it.<br />
　　有意思的是，这正好和Perl语言（另一种功能类似的高级动态语言）的中心思想TMTOWTDI（There's More Than One Way To Do It）完全相反。这似乎是人们常把Perl和Python互相比较的重要原因。<br />
　　Python语言是一种清晰的语言的另一个意思是，它的作者有意的设计限制性很强的语法，使得不好的编程习惯（例如if语句的下一行不向右缩进）都不能通过编译。这样有意的强制程序员养成良好的编程习惯。其中很重要的一项就是Python的缩进规则。<br />
　　例如if语句：<br />
　　if ageAPI，能方便进行系统维护和管理，Linux下标志性语言之一，是很多系统管理员理想的编程工具。<br />
　　图形处理，有PIL、Tkinter等图形库支持，能方便进行图形处理。<br />
　　数学处理，NumPy扩展提供大量与许多标准数学库的接口。<br />
　　文本处理，python提供的re模块能支持正则表达式，还提供SGML，XML分析模块，许多程序员利用python进行XML程序的开发。<br />
　　数据库编程，程序员可通过遵循Python DB-API（数据库应用程序编程接口）规范的模块与Microsoft SQL Server，Oracle，Sybase，DB2，Mysql、SQLite等数据库通信。python自带有一个Gadfly模块，提供了一个完整的SQL环境。<br />
　　网络编程，提供丰富的模块支持sockets编程，能方便快速地开发分布式应用程序。<br />
　　作为Web应用的开发语言，支持最新的XML技术。<br />
　　多媒体应用，Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”，能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。<br />
Python的库<br />
　　由于设计者和开源社区的共同努力，在python中有大量优秀的库可以被直接调用以高效地完成不同需求的工作。这里列举一些常见常用的库：<br />
　　Tkinter———— Python默认的图形界面接口。<br />
　　Tkinter是一个和Tk接口的Python模块，Tkinter库提供了对Tk API的接口，它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言，用于简化shell下复杂程序的开发，Tk工具包是和Tcl一起开发的，目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件，如一个按钮、一个滚动条等。通过Tk提供的这些小部件，我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台，在各种平台下都能使用。<br />
　　Python Imaging Library(PIL)————python提供强大的图形处理的能力，并提供广泛的图形文件格式支持，该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理，如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。<br />
　　Pmw(Python megawidgets)Python超级GUI组件集————一个在python中利用Tkinter模块构建的高级GUI组件，每个Pmw都合并了一个或多个Tkinter组件，以实现更有用和更复杂的功能。<br />
　　PyXML———— 用Python解析和处理XML文档的工具包，包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容：<br />
　　xmlproc: 一个符合规范的XML解析器。<br />
　　Expat: 一个快速的，非验证的XML解析器。 还有其他<br />
　　和他同级别的还有 PyHtml PySGML<br />
　　PyGame———— 用于多媒体开发和游戏软件开发的模块。<br />
　　PyOpenGL———— 模块封装了“OpenGL应用程序编程接口”，通过该模块python程序员可在程序中集成2D和3D的图形。<br />
　　NumPy、NumArray和SAGE———— NumArray是Python的一个扩展库，主要用于处理任意维数的固定类型数组，简单说就是一个矩阵库。它的低层代码使用C来编写，所以速度的优势很明显。NumPy是Numarray的后继者，用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包，目标是取代Magma, Maple, Mathematica和Matlab 这类工具。<br />
　　MySQLdb模块———— 用于连接MySQL数据库。还有用于zope的ZMySQLDA模块，通过它就可在zope中连接mysql数据库。<br />
　　PyGTK ———— 用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它，你完全可以自信的尝试自己制造Photoshop<br />
　　PyQt ———— 用于python的Qt开发库。QT就是实现了KDE环境的那个库，由一系列的模块组成，有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml，包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块，它包含一个QScintilla库。该库是Scintillar编辑器类的Qt接口。<br />
　　PyMedia ———— 用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。<br />
　　Psyco ———— 一个Python代码加速度器，可使Python代码的执行速度提高到与编译语言一样的水平。<br />
　　Python-ldap ———— 提供一组面向对象的API，可方便地在python中访问ldap目录服务，它基于OpenLDAP2.x。<br />
　　smtplib模块 ———— 发送电子邮件。<br />
　　ftplib模块 ———— 定义了FTP类和一些方法，用以进行客户端的ftp编程。我们可用python编写一个自己的ftp客户端程序，用于下载文件或镜像站点。如果想了解ftp协议的详细内容，请参考RFC959。<br />
　　xmpppy模块 ———— Jabber服务器采用开发的XMPP协议，Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说，我们可以通过该模块与Jabber服务器通信，是不是很Cool。<br />
　　下面这些就不详细介绍，只列出名字和功能<br />
　　adodb ———— ADO数据库连接组件<br />
　　bsddb3 ———— BerkeleyDB的连接组件<br />
　　chardet ———— 编码检测<br />
　　scons ———— 项目构建工具，写好了模板用起来还是很方便的<br />
　　sendpkt ———— Python发包<br />
　　setuptools ———— 一套python包管理机制<br />
　　Cheetah ———— 构建和扩充任何种类的基于文本的内容<br />
　　pycurl ———— URL处理工具<br />
　　pydot ———— 画图的，graphiz<br />
　　pyevent ———— Python的事件支持<br />
　　pylint ———— 培养良好的编码习惯<br />
　　Pylons ———— 又一个web framework<br />
　　pypcap ———— 抓包的<br />
　　pysqlite2 ———— SQLite的连接组件<br />
　　python-dnet ———— 控制网络安全的其他设备<br />
　　pythonwin ———— Python的Windows扩展<br />
　　pywmi ———— 省了好多折腾功夫<br />
　　reportlab ———— Python操作PDF的Libary。<br />
　　scapy ———— 网络包构建分析框架,可编程的wireshark,有兴趣的google “Silver Needle in the Skype”<br />
　　simplejson ———— JSON的支持<br />
　　sqlalchemy ———— SQL数据库连接池<br />
　　SQLObject ———— 数据库连接池<br />
　　cherrypy ———— 一个WEB framework<br />
　　ctypes ———— 用来调用动态链接库<br />
　　Cx-oracle ———— 连接oracle的工具<br />
　　DBUtils ———— 数据库连接池<br />
　　django ———— 一个WEB framework<br />
　　DPKT ———— raw-scoket网络编程<br />
　　docutils ———— 用来写文档的<br />
　　dpkt ———— 数据包的解包和组包<br />
　　feedparser ———— rss解析<br />
　　Kodos ———— 正则表达式调试工具<br />
　　Mechanize ———— 爬虫连接网站常用<br />
　　pefile ———— windows pe文件解析器<br />
　　py2exe ———— 用来生成windows可执行文件<br />
　　twisted ———— 巨无霸的网络编程框架<br />
　　winpdb ———— 自己的程序或者用别的库不太明白的时候就靠它了<br />
　　wxPython ———— GUI编程框架,熟悉MFC的人会非常喜欢，简直是同一架构（对于初学者或者对设计要求不高的用户来说，使用 Boa Constructor可以方便迅速的进行wxPython的开发）<br />
　　PIL———— Python 的图像处理库，可以打开数十种图像格式，还提供许多图像处理函数，如图像增强、滤波算法等。<br />
　　Pyro———— Python实现与JAVA RMI类似的技术<br />
　　PLY———— 基于Python的LEX、YACC的语言工具<br />
　　Corepy———— 使用Python开发编写x86汇编程序<br />
　　LightCloud———— Python实现的分布式的键-值数据库<br />
　　Parallel Python（PP）———— 轻松开发SMP、集群并行计算的库<br />
　　开源社区的工作已经完成到这样的程度，基本上各种常见的编程需求都已经有非常成熟稳定高速的模块来实现，你所需要做的，只是去把它找出来然后阅读文档。</p>
<p>定义一个简单的Python脚本</p>
<p>view plaincopy to clipboardprint?<br />
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······15001.def welcome(name):<br />
02. return "Hello '" + name + "' from IronPython"</p>
<p>打开VS2010，建立一个C++，CLR windows form窗体“Python范例”<br />
，删掉form1,在函数初始化的时候，代码如下</p>
<p>view plaincopy to clipboardprint?<br />
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······15001.using System;<br />
02.using IronPython::Hosting;<br />
03.using Microsoft::Scripting::Hosting;<br />
04.namespace Python范例<br />
05.{<br />
06.<br />
07. private static void Main(string[] args)<br />
08. {<br />
09. Console.WriteLine("载入 helloworld.py...");<br />
10.<br />
11. ScriptRuntime py = Python.CreateRuntime();<br />
12. dynamic helloworld = py.UseFile("helloworld.py");<br />
13.<br />
14. Console.WriteLine("helloworld.py 载入!");<br />
15.<br />
16. for (int i = 0; i &lt; 1000; i++)<br />
17. {<br />
18. Console.WriteLine(helloworld.welcome("Employee #{0}"), i);<br />
19. }<br />
20. Console.ReadLine();<br />
21.<br />
22. }<br />
23.}</p>
<p>程序完全执行成功，大家在开发C++的时候，某些麻烦的工作可以让Python搞定</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010-python-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual C++ 2010 编译器常用选项设置 - 新增支持并行计算</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010/#comments</comments>
		<pubDate>Fri, 14 May 2010 04:08:50 +0000</pubDate>
		<dc:creator>尹成</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[软件开发工具]]></category>
		<category><![CDATA[并行计算]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010/</guid>
		<description><![CDATA[Visual C++2010 编译参数的设置。主要通过IDE的菜单项Project-&#62;Settings-&#62;C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容，一般如下： /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WIN DOWS" /D "_AFXDLL" /D"_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"st dafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 各个参数代表的意义，可以参考Msdn.比如/nologo表示编译时不在输出窗口显示这些设置（我们可以把这个参数去掉来看看效果）等等。一般我们不会直接修改这些设置，而是通过这一页最上面的Category中的各项来完成。 1.General： 2.C++ Language： 3.Code Generation： 4.Customize： 5.Listing Files： 6.Optimizations： 7.Precompiled Headers：预编译头文件的设置。使用预编译可以提高重复编译的速度。IDE一般将一些公共的、不大变动的头文件（比如afxwin.h等）集中放到stdafx.h中，这一部分代码就不必每次都重新编译（除非是Rebuild All）。 8.Preprocessor：预编译处理 可以定义/解除定义一些常量。Additional include directories，可以指定额外的包含目录，一般是相对于本项目的目录，如……\\Include. 连接参数的设置。主要通过IDE的菜单项Project-&#62;Settings-&#62;Link页来完成。我们可以看到这一页的最下面Project Options中的内容，一般如下： /nologo /subsystem：windows /incremental：yes /pdb："Debug/WritingDlgTest.pdb" /debug /machi ne：I386 [...]]]></description>
			<content:encoded><![CDATA[<p>Visual C++2010 编译参数的设置。主要通过IDE的菜单项Project-&gt;Settings-&gt;C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容，一般如下：</p>
<p>/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WIN<br />
DOWS" /D "_AFXDLL" /D"_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"st<br />
dafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c</p>
<p>各个参数代表的意义，可以参考Msdn.比如/nologo表示编译时不在输出窗口显示这些设置（我们可以把这个参数去掉来看看效果）等等。一般我们不会直接修改这些设置，而是通过这一页最上面的Category中的各项来完成。</p>
<p>1.General：<br />
<img src="http://images.csdn.net/20100513/1.jpg" alt="" /></p>
<p>2.C++ Language：<br />
<img src="http://images.csdn.net/20100513/2.jpg" alt="" /></p>
<p>3.Code Generation：<br />
<img src="http://images.csdn.net/20100513/3.jpg" alt="" /></p>
<p>4.Customize：<br />
<img src="http://images.csdn.net/20100513/4.jpg" alt="" /></p>
<p>5.Listing Files：<br />
<img src="http://images.csdn.net/20100513/5.jpg" alt="" /></p>
<p>6.Optimizations：<br />
<img src="http://images.csdn.net/20100513/6.jpg" alt="" /></p>
<p>7.Precompiled Headers：预编译头文件的设置。使用预编译可以提高重复编译的速度。IDE一般将一些公共的、不大变动的头文件（比如afxwin.h等）集中放到stdafx.h中，这一部分代码就不必每次都重新编译（除非是Rebuild All）。</p>
<p>8.Preprocessor：预编译处理</p>
<p>可以定义/解除定义一些常量。Additional include directories，可以指定额外的包含目录，一般是相对于本项目的目录，如……\\Include.</p>
<p>连接参数的设置。主要通过IDE的菜单项Project-&gt;Settings-&gt;Link页来完成。我们可以看到这一页的最下面Project Options中的内容，一般如下：</p>
<p>/nologo /subsystem：windows /incremental：yes /pdb："Debug/WritingDlgTest.pdb" /debug /machi ne：I386 /out："Debug/WritingDlgTest.exe" /pdbtype：sept</p>
<p>Category中的各项设置</p>
<p>1.General：一些总体设置</p>
<p>可以设置生成的文件路径、文件名;连接的库文件;</p>
<p>Generate debug info，生成Debug信息到.PDB文件(具体格式可以在Category-&gt;Debug中设置);</p>
<p>Ignore All Default Libraries，放弃所有默认的库连接;</p>
<p>Link Incrementally，通过生成. ILK文件实现递增式连接以提高后续连接速度，但一般这种方式下生成的文件(EXE或DLL)较大;</p>
<p>Generate Mapfile，生成.MAP文件记录模块相关信息</p>
<p>Enable Profiling，这个参数通常与Generate Mapfile参数同时使用，而且如果产生Debug信息的话，不能用.PDB文件，而且必须用Microsoft Format。</p>
<p>2.Customize：这里可以进行使用程序数据库文件的设置</p>
<p>Force File Output ，强制产生输出文件(EXE或DLL);Print Progress Messages，可以将连接过程中的进度信息输出到Output窗口。</p>
<p>3.Debug：设置是否生成调试信息，以及调试信息的格式</p>
<p>格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三种选择;Separate Types，表示将Debug格式信息以独立的.PDB文件存放，还是直接放在各个源文件的.PDB文件中。选中的话，表示采用后者的方式，这种方式调试启动比较快。</p>
<p>4.Input：这里可以指定要连接的库文件，放弃连接的库文件</p>
<p>还可以增加额外的库文件目录，一般是相对于本项目的目录，如..\Lib。Force Symbol References，可以指定连接特定符号定义的库。</p>
<p>5.Output：Base Address可以改变程序默认的基地址(EXE文件默认为0x400000，DLL默认为x10000000)，操作系统装载一个程序时总是试着先从这个基地址开始</p>
<p>Entry-Point Symbol可以指定程序的入口地址，一般为一个函数名(且必须采用__stdcall调用约定)。一般Win32的程序，EXE的入口为WinMain，DLL的入口为DllEntryPoint;最好让连接器自动设置程序的入口点。默认情况下，通过一个C的运行时库函数来实现：控制台程序采用mainCRTStartup (或wmainCRTStartup)去调用程序的main (或wmain)函数;Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)调用程序的WinMain (或 wWinMain，必须采用__stdcall调用约定);DLL采用_DllMainCRTStartup调用DllMain函数(必须采用__stdcall调用约定)。Stack allocations，用以设置程序使用的堆栈大小(请使用十进制)，默认为1兆字节。Version Information告诉连接器在EXE或DLL文件的开始部分放上版本号。</p>
<p>值得注意的是，上面各个参数是大小写敏感的;在参数后加上“-”表示该参数无效;各个参数值选项</p>
<p>有“*”的表示为该参数的默认值;可以使用页右上角的“Reset”按钮来恢复该页的所有默认设置。</p>
<p>其它一些参数设置</p>
<p>1.Project-&gt;Settings-&gt;General</p>
<p>可以设置连接MFC库的方式(静态或动态)。如果是动态连接，在你的软件发布时不要忘了带上MFC的DLL。</p>
<p>2.Project-&gt;Settings-&gt;Debug</p>
<p>可以设置调试时运行的可执行文件，以及命令行参数等。</p>
<p>3.Project-&gt;Settings-&gt;Custom Build</p>
<p>可以设置编译/连接成功后自动执行一些操作。比较有用的是，写COM时希望IDE对编译通过的COM文件自动注册，可以如下设置：</p>
<p>Description: Register COM</p>
<p>Commands: regsvr32 /s /c $(TargetPath)</p>
<p>echo regsvr32 exe.time &gt; $(TargetDir)\$(TargetName).trg</p>
<p>Outputs: $(TargetDir)\$(TargetName).trg</p>
<p>4.Tools-&gt;Options-&gt;Directories</p>
<p>设置系统的Include、Library路径。</p>
<p>一些小窍门(针对Visual C++)</p>
<p>1.有时候，你可能在编译的时候，计算机突然非法关机了(可能某人不小心碰了电源或你的内存不稳定等原因)。当你重启机器后打开刚才的项目，重新进行编译，发现IDE会崩掉。你或许以为你的编译器坏了，其实不然(你试试编译其它项目，还是好的!)，你只要将项目的.ncb、.opt、.aps、.clw文件以及Debug、Release目录下的所有文件都删掉，然后重新编译就行了。</p>
<p>2.如果你想与别人共享你的源代码项目，但是把整个项目做拷贝又太大。你完全可以删掉以下文件：.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目录下的所有文件。</p>
<p>3.当你的Workspace中包含多个Project的时候，你可能不能直观地、一眼看出来哪个是当前项目。可以如下设置：Tools-&gt;Options-&gt;Format，然后在Category中选择Workspace window，改变其默认的字体(比如设成Fixedsys)就行了。</p>
<p>4. 如何给已有的Project改名字?将该Project关掉。然后以文本格式打开.dsp文件，替换原来的Project名字即可。</p>
<p>5.VC6对类成员的智能提示功能很有用，但有时候会失灵。你可以先关掉项目，将.clw和.ncb删掉，然后重新打开项目，点击菜单项View-&gt;ClassWizard，在弹出的对话框中按一下“Add All”按钮;重新Rebuild All。应该可以解决问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/05/14/visual-c-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>英特尔软件开发技术概要与在开发中的运用（讲解并行计算，多核心优化，以及英特尔开发工具）</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/04/28/400003688/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/04/28/400003688/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 13:36:54 +0000</pubDate>
		<dc:creator>尹成</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[软件开发工具]]></category>
		<category><![CDATA[开发工具介绍]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/04/28/400003688/</guid>
		<description><![CDATA[英特尔有下列特別強大的开发工具与辅助套件，如何应用到实践中去，让自己的软件变得更加大，软件开发更加容易，软件拥有更多的性能呢 英特尔® 图形性能分析器 3.0 英特尔® Cloud Builder 英特尔® 主动管理技术 API 英特尔® 静音系统技术(英特尔® QST)软件开发套件 英特尔® C++编译器 英特尔® VTune 英特尔® Thread Checker 英特尔® OpenMP 英特尔® Thread Profiler 简单介绍基础知识 处理器的发展历史、目前的多核架构以及固件、操作系统对多核的支持。 1945年，美国研制了世界上第一台全自动电子数字计算机ENIAC（Electronic Numerical Integrator and Calculator，即电子数字积分器和计算器），是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的，于1946年2月交付使用，共服役9年。ENIAC机的问世具有划时代的意义，表明计算机时代的到来。 计算机的发展按照硬件工艺可以分为以下几代： 第一代（1946~1958）：电子管数字计算机。计算机的逻辑元件采用电子管，主存储器采用汞延迟线、磁鼓、磁芯；外存储器采用磁带；软主要采用机器语言、汇编语言；应用以科学计算为主。其特点是体积大、耗电大、可靠性差、价格昂贵、维修复杂。它奠定了以后计算机技术的基础。 第二代（1958~1964）：晶体管数字计算机。晶体管的发明推动了计算机的发展，逻辑元件采用了晶体管以后，计算机的体积大大缩小，耗电减少，可靠性提高，性能比第一代计算机有很大的提高。主存储器采用磁芯，外存储器已开始使用更先进的磁盘；软件有了很大发展，出现了各种各样的高级语言及其编译程序，还出现了以批处理为主的操作系统，应用以科学计算和各种事务处理为主，并开始用于工业控制。 第三代（1964~1971）：集成电路数字计算机。20世纪60年代，计算机的逻辑元件采用小（SSI）、中规模集成电路（SSI、MSI），计算机的体积更小型化、耗电量更少、可靠性更高，性能比第十代计算机又有了很大的提高。这时，小型机也蓬勃发展起来，应用领域日益扩大。主存储器仍采用磁芯，软件逐渐完善，分时操作系统、会话式语言等多种高级语言都有新的发展。 第四代(1971年以后）：大规模集成电路数字计算机。计算机的逻辑元件和主存储器都采用了大规模集成电路（LSI）。所谓大规模集成电路是指在单片硅片上集成1000~2000个以上晶体管的集成电路，其集成度比中、小规模的集成电路提高了1~2个以上数量级。这时计算机发展到了微型化、耗电极少、可靠性很高的阶段。大规模集成电路使军事工业、空间技术、原子能技术得到发展，这些领域的蓬勃发展对计算机提出了更高的要求，有力地促进了计算机工业的空前大发展。 当前集成电路的发展已经进入特大规模（千万个以上元器件）的阶段，目前国际主流生产工艺技术已经到了90纳米、65纳米以及45纳米。 由于缺乏革命性技术变革，现有技术仍将保持自1970年以来的线性发展，但持续时间不可能无限延长。据2004年“国际半导体技术发展路线图（ITRS）”修订版预测，这种线性发展可能继续保持10~15年。但是晶体管数翻倍的期限正在加长，已经从18个月到24个月再到36个月，摩尔定律受到的挑战正不断增加。 一直以来，处理器芯片厂商都通过不断提高主频来提高处理器的性能，但随着芯片制程工艺的不断进步，从体系结构来看，传统处理器体系结构技术面临瓶颈，晶体管的集成度已超过上亿个，很难单纯通过提高主频来提升性能，而且主频的提高同时带来功耗的提高，也是直接促使单核转向多核的深层次原因；从应用需求来看，日益复杂的多媒体、科学计算、虚拟化等多个应用领域都呼唤更为强大的计算能力。在这样的背景下，各主流处理器厂商将产品战略从提高芯片的时钟频率转向多线程、多内核。 多核处理器最直接的发展则认为是始于IBM。目前的多核处理器的推出已经愈加频繁，在推出代号为Niagara的8核处理器之后，Sun还计划在今年年中推出Niagara 2处理器。IBM的Cell处理器，结合了1个PowerPC核心与8个协处理器构成的Cell 微处理器已经正式量产，并应用于PS3主机、医学影像处理、3D计算机绘图、影音多媒体等领域。而真正意义上让多核处理器进入主流桌面应用，是从IA阵营正式引入多核架构开始。继双核之后，英特尔已经在2006年11月抢先推出了四核产品，AMD也推出代号为巴塞罗那的四核处理器。 片上多核处理器（Chip Multi-Processor，CMP）就是将多个计算内核集成在一个处理器芯片中，从而提高计算能力。 按计算内核的对等与否，CMP可分为同构多核和异构多核。计算内核相同，地位对等的称为同构多核，现在Intel和AMD主推的双核处理器，就是同构的双核处理器。计算内核不同，地位不对等的称为异构多核，异构多核多采用“主处理核+协处理核”的设计，IBM、索尼和东芝等联手设计推出的Cell处理器正是这种异构架构的典范。 多核处理器的并行计算 1、并行计算机体系结构 了解并行计算机体系结构是开展并行计算研究的基础。为了设计一个高效率的并行算法，实现一个高效率的并行程序，需要对并行计算机体系结构有一定的了解。此部分内容主要包括：多级存储体系结构和并行计算机访存模型。 得益于主频和超标量指令级流水线技术的发展，现代微处理器的发展仍然遵循摩尔定律，峰值运算速度每18个月翻一番。相比较而言，内存的访问速度要比处理器执行速度慢很多，数据存取速度（即数据填充指令处理流水线的速度）难以满足微处理器的峰值计算速度，这就是所谓的内存墙（memory wall）性能瓶颈问题。多级存储体系结构是一种解决方案。 并行计算机的访存模型主要有：UMA模型、NUMA模型、COMA模型和NORMA模型。 2、并行计算模型 此部分内容主要从并行程序/并行算法的角度来介绍并行计算模型。依次讨论SIMD同步并行计算模型，包括共享存储的SIMD模型（即PRAM模型）和分布存储的SIMD模型（即SIMD互联网络模型）；MIMD异步并行计算模型（更常用的并行计算模型），包括异步PRAM模型（从共享存储的MIMD-SM多处理机抽象而来）以及BSP、LogP和C3模型（从分布存储的MIMD-DM多计算机中抽象而来）等。 3、进程 [...]]]></description>
			<content:encoded><![CDATA[<p>英特尔有下列特別強大的开发工具与辅助套件，如何应用到实践中去，让自己的软件变得更加大，软件开发更加容易，软件拥有更多的性能呢</p>
<p>英特尔® 图形性能分析器 3.0</p>
<p>英特尔® Cloud Builder</p>
<p>英特尔® 主动管理技术 API</p>
<p>英特尔® 静音系统技术(英特尔® QST)软件开发套件</p>
<p>英特尔® C++编译器</p>
<p>英特尔® VTune</p>
<p>英特尔® Thread Checker</p>
<p>英特尔® OpenMP</p>
<p>英特尔® Thread Profiler</p>
<p><img src="http://hi.csdn.net/attachment/201004/10/0_12708754884iU6.gif" alt="" /></p>
<p><img src="http://hi.csdn.net/attachment/201004/10/0_1270875512jNbs.gif" alt="" /></p>
<p><img src="http://hi.csdn.net/attachment/201004/10/0_12708755254qC8.gif" alt="" /></p>
<p>简单介绍基础知识</p>
<p>处理器的发展历史、目前的多核架构以及固件、操作系统对多核的支持。</p>
<p>1945年，美国研制了世界上第一台全自动电子数字计算机ENIAC（Electronic Numerical Integrator and Calculator，即电子数字积分器和计算器），是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的，于1946年2月交付使用，共服役9年。ENIAC机的问世具有划时代的意义，表明计算机时代的到来。<br />
计算机的发展按照硬件工艺可以分为以下几代：<br />
第一代（1946~1958）：电子管数字计算机。计算机的逻辑元件采用电子管，主存储器采用汞延迟线、磁鼓、磁芯；外存储器采用磁带；软主要采用机器语言、汇编语言；应用以科学计算为主。其特点是体积大、耗电大、可靠性差、价格昂贵、维修复杂。它奠定了以后计算机技术的基础。<br />
第二代（1958~1964）：晶体管数字计算机。晶体管的发明推动了计算机的发展，逻辑元件采用了晶体管以后，计算机的体积大大缩小，耗电减少，可靠性提高，性能比第一代计算机有很大的提高。主存储器采用磁芯，外存储器已开始使用更先进的磁盘；软件有了很大发展，出现了各种各样的高级语言及其编译程序，还出现了以批处理为主的操作系统，应用以科学计算和各种事务处理为主，并开始用于工业控制。<br />
第三代（1964~1971）：集成电路数字计算机。20世纪60年代，计算机的逻辑元件采用小（SSI）、中规模集成电路（SSI、MSI），计算机的体积更小型化、耗电量更少、可靠性更高，性能比第十代计算机又有了很大的提高。这时，小型机也蓬勃发展起来，应用领域日益扩大。主存储器仍采用磁芯，软件逐渐完善，分时操作系统、会话式语言等多种高级语言都有新的发展。<br />
第四代(1971年以后）：大规模集成电路数字计算机。计算机的逻辑元件和主存储器都采用了大规模集成电路（LSI）。所谓大规模集成电路是指在单片硅片上集成1000~2000个以上晶体管的集成电路，其集成度比中、小规模的集成电路提高了1~2个以上数量级。这时计算机发展到了微型化、耗电极少、可靠性很高的阶段。大规模集成电路使军事工业、空间技术、原子能技术得到发展，这些领域的蓬勃发展对计算机提出了更高的要求，有力地促进了计算机工业的空前大发展。<br />
当前集成电路的发展已经进入特大规模（千万个以上元器件）的阶段，目前国际主流生产工艺技术已经到了90纳米、65纳米以及45纳米。<br />
由于缺乏革命性技术变革，现有技术仍将保持自1970年以来的线性发展，但持续时间不可能无限延长。据2004年“国际半导体技术发展路线图（ITRS）”修订版预测，这种线性发展可能继续保持10~15年。但是晶体管数翻倍的期限正在加长，已经从18个月到24个月再到36个月，摩尔定律受到的挑战正不断增加。<br />
一直以来，处理器芯片厂商都通过不断提高主频来提高处理器的性能，但随着芯片制程工艺的不断进步，从体系结构来看，传统处理器体系结构技术面临瓶颈，晶体管的集成度已超过上亿个，很难单纯通过提高主频来提升性能，而且主频的提高同时带来功耗的提高，也是直接促使单核转向多核的深层次原因；从应用需求来看，日益复杂的多媒体、科学计算、虚拟化等多个应用领域都呼唤更为强大的计算能力。在这样的背景下，各主流处理器厂商将产品战略从提高芯片的时钟频率转向多线程、多内核。<br />
多核处理器最直接的发展则认为是始于IBM。目前的多核处理器的推出已经愈加频繁，在推出代号为Niagara的8核处理器之后，Sun还计划在今年年中推出Niagara 2处理器。IBM的Cell处理器，结合了1个PowerPC核心与8个协处理器构成的Cell 微处理器已经正式量产，并应用于PS3主机、医学影像处理、3D计算机绘图、影音多媒体等领域。而真正意义上让多核处理器进入主流桌面应用，是从IA阵营正式引入多核架构开始。继双核之后，英特尔已经在2006年11月抢先推出了四核产品，AMD也推出代号为巴塞罗那的四核处理器。<br />
片上多核处理器（Chip Multi-Processor，CMP）就是将多个计算内核集成在一个处理器芯片中，从而提高计算能力。<br />
按计算内核的对等与否，CMP可分为同构多核和异构多核。计算内核相同，地位对等的称为同构多核，现在Intel和AMD主推的双核处理器，就是同构的双核处理器。计算内核不同，地位不对等的称为异构多核，异构多核多采用“主处理核+协处理核”的设计，IBM、索尼和东芝等联手设计推出的Cell处理器正是这种异构架构的典范。</p>
<p>多核处理器的并行计算</p>
<p>1、并行计算机体系结构<br />
了解并行计算机体系结构是开展并行计算研究的基础。为了设计一个高效率的并行算法，实现一个高效率的并行程序，需要对并行计算机体系结构有一定的了解。此部分内容主要包括：多级存储体系结构和并行计算机访存模型。<br />
得益于主频和超标量指令级流水线技术的发展，现代微处理器的发展仍然遵循摩尔定律，峰值运算速度每18个月翻一番。相比较而言，内存的访问速度要比处理器执行速度慢很多，数据存取速度（即数据填充指令处理流水线的速度）难以满足微处理器的峰值计算速度，这就是所谓的内存墙（memory wall）性能瓶颈问题。多级存储体系结构是一种解决方案。<br />
并行计算机的访存模型主要有：UMA模型、NUMA模型、COMA模型和NORMA模型。<br />
2、并行计算模型<br />
此部分内容主要从并行程序/并行算法的角度来介绍并行计算模型。依次讨论SIMD同步并行计算模型，包括共享存储的SIMD模型（即PRAM模型）和分布存储的SIMD模型（即SIMD互联网络模型）；MIMD异步并行计算模型（更常用的并行计算模型），包括异步PRAM模型（从共享存储的MIMD-SM多处理机抽象而来）以及BSP、LogP和C3模型（从分布存储的MIMD-DM多计算机中抽象而来）等。<br />
3、进程<br />
现代操作系统中的一个重要概念是进程（process）。正是由于多个进程之间的相互通信，才决定了各类消息传递并行程序设计平台的出现。此部分内容主要介绍进程和进程间通信的基本概念。<br />
4、线程<br />
为了更好的理解并行编程环境，这里简要介绍另一个重要概念：线程（threads），线程又被称作轻量级进程。<br />
5、并行编程环境<br />
在当前并行计算机上，比较流行的并行编程环境主要有3类：消息传递、共享存储和数据并行，此部分内容对这3类并行编程环境的主要特征进行比较总结。<br />
6、编程语言与编译器<br />
此部分内容将探究在科学计算领域对并行编程支持已取得相当成功的三项技术：自动并行化、数据并行语言（HPF）、共享存储并行编程接口（OpenMP）。<br />
7、并行计算性能评测<br />
给定并行算法，采用并行程序设计平台，通过并行实现获得实际可运行的并行程序后，一个重要的工作就是，在并行计算机上运行该程序，评价该程序的实际性能，揭示性能瓶颈，指导程序的性能优化。性能评价和优化是设计高效率并行程序必不可少的重要工作。此部分内容介绍当前流行的并行程序性能评价方法，并讨论有效的性能优化方法。<br />
8、常用并行数值算法<br />
在科学与工程计算的许多问题中经常需要进行矩阵计算。矩阵乘、求解线性方程组和矩阵特征值问题是矩阵计算最基本的内核。本节主要介绍基于MPP并行计算机、机群和消息传递并行环境（MPI等）上的矩阵乘以及求解线性方程组的并行数值算法。<br />
9、并行编译器<br />
一个并行编译器大致可由三部分组成：流分析，程序优化和代码生成。其中，流分析是确定源代码中数据和控制的相关性；优化常常是将代码变换成与之等效但具有“更好”的形式，以利于尽量挖掘硬件潜力，最终达到全局优化的目的；代码生产通常涉及到从一种描述转换成另一种中间形式的描述，不同类型的计算机其并行代码的生成也各不相同。</p>
<p>多线程编程基础</p>
<p>1、线程（thread）</p>
<p>是操作系统中比进程更小的可执行单元，现代操作系统大都支持线程机制以便节约资源并获得更好性能。本章介绍了进程、线程的基本概念，以及多线程的互斥同步的基本概念。<br />
2、多线程的概念<br />
多线程的每个线程执行一个单独的逻辑路径，可以将冗长的或非常耗时的任务放在后台处理。即使在只有单处理器的计算机上，使用多线程也可以非常显著地提高应用程序的响应能力和可用性。<br />
多线程机制的优点：创建一个线程比创建一个进程的代价要小、线程的切换比进程间的切换代价小、充分利用多处理器、．数据共享和快速响应特性。<br />
3、用户级线程和内核级线程<br />
根据在用户空间还是在核心实现多线程机制，线程又被分为用户级线程（user level thread）和内核级线程（kernel level thread）。用户线程的所有管理工作都由在用户级实现的线程库来支持。内核级线程的所有管理操作都是由操作系统内核完成的。<br />
4、多线程的映射模型<br />
对于实现了用户级线程和内核级线程的操作系统，用户级线程和内核级线程之间的可以有不同的映射方式：多对一模型、一对一模型和多对多模型。线程池是一组被创建的线程的集合，当一个进程需要线程时，如果线程池中还有可用的线程，就从中取出一个投入使用，所以进程可以更快地使用一个线程而不必等待线程的创建。<br />
5、线程的生命周期<br />
本部分内容包括：线程的标识，通常用一个整数来标识一个线程；线程的创建；线程的终止和线程的状态。线程有四个基本的状态：就绪（ready）、运行（running）、阻塞（blocked）和终止（terminated）。<br />
6、多线程环境下的进程控制语义<br />
单线程环境下的进程控制接口在多线程环境下语义可能会发生变化，包括进程创建、进程终止、程序执行、信号处理等。<br />
7、线程的同步<br />
由于线程共享同一进程的内存空间，多个线程可能需要同时访问同一个数据。如果没有正确的保护措施，对共享数据的访问会造成数据的不一致和错误。为避免这种不确定的错误结果的出现，在两个线程访问共享数据的时候需要同步机制。<br />
常用的同步机制包括临界区（critical section），信号量（simphore），互斥量（mutex），管程（monitor）。比较常用的同步方法是信号量和互斥量方法。</p>
<p>Windows多线程编程及其OpenMP编程技术</p>
<p>在Windows平台下可以通过Windows的线程库来实现多线程编程，可以利用Win32 API或MFC以及.Net Framework提供的接口来实现。实现方式的多样化给Windows编程带来了很大的灵活性，但也使得多线程编程变得复杂。<br />
Win32 API是Windows操作系统为内核以及应用程序之间提供的接口，将内核提供的功能进行函数封装，应用程序通过调用相关的函数获得相应的系统功能。Win32 API提供了一系列处理线程的函数接口，来向应用程序提供多线程的功能。<br />
MFC是微软基础函数类库(Microsoft Foundation Classes)，由微软提供的，用类库的方式将Win32 API 进行封装, 以类的方式提供给开发者。在MFC类库中，提供了对多线程的支持。由于MFC是在Win32 API 基础之上进行封装的，其基本原理与Win32 API的基本实现原理很类似。MFC对同步对象作了封装，因此对用户编程实现来说更加方便。<br />
.NET Framework由两部分构成：公共语言运行库（Common Language Runtime ，CLR）和Framework类库（Framework Class Library ，FCL）。CLR包括自己的文件加载器、垃圾收集器、安全系统等。CRL提供了一个可靠而完善的多语言运行环境。CLR是一个软件引擎，用于加载应用程序、检查错误、进行安全许可认证、执行和清空内存。Framework类库提供了所有应用程序模型都要使用的一个面向对象的API集合。.NET 基础类库的System.Threading命名空间提供了大量的类和接口来支持多线程。所有与多线程机制相关的类都存放在System.Threading命名空间中。其中Thread类用于创建及管理线程，ThreadPool类用于管理线程池等，此外还提供线程间通讯等实际问题的机制。<br />
线程之间通信的两个基本问题是互斥和同步。<br />
线程同步是指线程之间所具有的一种制约关系，一个线程的执行依赖另一个线程的消息，当它没有得到另一个线程的消息时应该等待，直到消息到达时才被唤醒。<br />
线程互斥是指对于共享资源，在各线程访问时的排它性。当有多个线程都要使用某一共享资源时，同一时刻只允许一个线程去使用，其它要使用该共享资源的线程必须等待，直到占用资源者释放该共享资源。<br />
在WIN32中，同步机制主要有以下几种：<br />
（1）全局变量；<br />
（2）事件(Event)；<br />
（3）临界区(Critical section)；<br />
（4）互斥量(Mutex)；<br />
（5）信号量(Semaphore)。<br />
Visual Studio调试器是一个功能十分强大的调试工具，通过它可以观察程序的运行状态并确定逻辑错误的位置。使用该调试器，可以中断（或挂起）程序的执行，便于检查代码，此外还可以计算和编辑程序中的变量，查看寄存器、从源代码创建的指令、以及应用程序所占用的内存空间。<br />
VTune Performance Analyzer能收集并整理程序执行效率的相关数据，协助搜寻、找到程序执行速度的瓶颈点。使用VTune Performance Analyzer,通过调用图，可以看到应用中调用-被调用之间的关系，可以洞察CPU时间到底被消耗在什么地方；通过计数器监测器，可以检查代码的某一时间片和性能计数器的关系。 Vtune Performance Analyzer和Microsoft Visual Studio集成开发环境可以紧密集成，同时支持命令行接口。<br />
本章首先介绍了Windows平台下的线程库，包括Win32 线程库、MFC线程库以及.Net Framework线程库。然后重点介绍如何使用Win32 API来创建线程、管理线程以及如何实现线程间同步。我们还介绍了MFC以及.Net Framework进行多线程同步的方法。最后我们介绍如何使用调试工具对多线程程序进行调试。</p>
<p>然后对OpenMP进行了介绍。主要介绍OpenMP程序的一些历史概况以及当前的一些发展状况。介绍了共享内存和非共享内存的体系结构以及体系结构对编程的影响。在此基础上，通过一个简单的程序给出OpenMP的基本概况以及在Windows环境和Linux环境下如何编译和运行OpenMP程序。详细讲解OpenMP编程的各项技术，包括循环并行化、并行区域编程以及OpenMP程序的多线程同步问题。在循环并行化中，包括内容有如何进行循环并行化，如何根据不同的变量类型使用不同的编译导向子句，从而能够获得数据的并行化。初步引出循环优化的概念以及基本技术。在并行区域编程中，内容包括讲解parallel导向的真正含义，如何使用这个导向语句在多线程中共享工作，并行区域的嵌套，以及如何控制OpenMP程序并行化。OpenMP程序的多线程同步问题内容包括数据竞争的概念，互斥锁的同步机制，事件的同步机制等。本章还将通过一系列的例子来讲解OpenMP并行程序的一般优化方法。首先需要确定影响性能的主要因素，以及如何确定程序中负载最重的代码单元，如何针对这种情况进行并行优化。对于OpenMP程序来说，主要是进行并行化以及同步的优化过程，充分挖掘应用程序的并行化性质，发挥并行化的优势，消除同步对并行化程序的性能的不利因素以及在一定条件下通过消除同步互斥来提高程序的整体性能。其它的性能优化技术包括程序的区域性对程序性能的影响，区域性与并行循环调度的问题，错误共享对程序性能的影响以及消除，体系结构相关的一些优化方法等。</p>
<p>MKL数学函数库<br />
MKL的基本知识、框架、应用方法，如傅立叶变换等的应用。</p>
<p>多核软件开发工具</p>
<p>多核软件工具的作用及结合具体的实例讲解各工具结合Visual Studio的具体用法。<br />
Intel C++编译器的主要功能与优点<br />
·Vtune性能分析器功能与使用方法<br />
·Thread Checker线程检查器功能与使用<br />
·Thread Profiler线程档案器功能与使用</p>
<p>IPP程序设计</p>
<p>IPP及OpenCV在多核平台上的应用。</p>
<p>MPI编程</p>
<p>计算机网络信息处理，专门设置通过集群方式进行网络数据包处理的应用实践内容。MPI是针对分布式存储方式的并行计算工具，通过集群内各台机器的协作以完成既定的计算任务。</p>
<p>TBB编程</p>
<p>线程构建模块TBB</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/04/28/400003688/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual C++ 利用英特尔 C++ 编译器提升多核性能与多媒体指令支持获取更高的程序效率与缩小程序体积</title>
		<link>http://software.intel.com/zh-cn/blogs/2010/04/28/visual-c-c/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2010/04/28/visual-c-c/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 13:34:19 +0000</pubDate>
		<dc:creator>尹成</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[多核]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2010/04/28/visual-c-c/</guid>
		<description><![CDATA[Intel c++编译器有下列优点，建议VC++项目开发采用intel c++编译器取代VS自带c++编译器： 与 Microsoft Visual C++ 相兼容，可以嵌入 Microsoft Visual Studio 开发环境。 支持最新的多核处理器，并提供安全功能，可以通过执行堆栈桢运行时错误检查，使得缓冲区溢出安全漏洞更不易受到攻击。 支持多线程应用程序，支持 Open MP，拥有自动并行化功能。 遵循 ANSI C/C++ 及 ISO C/C++ 的标准。 包括Intel Debugger 和代码覆盖工具，支持优化代码和多线程应用的调试，减少代码缺陷，提高开发效率。 支持最新的多核处理器。支持最新处理器的优化功能能大大提高程序在这些处理器上的效能。 支持运行时对堆栈的检查，减少缓冲器益处导致的安全缺陷。 包含IA-32，Itanium（安腾）2以及支持64位内存扩展技术开发工具。 增强Intel Debugger对优化代码的支持 Intel c++编译器集成到 Microsoft Visual Studio* 2005 和 2008 中。使用英特尔 C++ 编译器、Microsoft Visual C++* 编译器或两者同时使用！ · 多线程应用支持包括 11.0 中的新特性、OpenMP 3.0（数据并行和当前任务并行）以及自动并行，以支持简单有效的软件线程。 · 自动矢量化可实现代码并行，从而利用我们最新的处理器中的 SIMD 流指令扩展（SSE）指令集架构（SSE、SSE2、SSE3、SSSE3 和 [...]]]></description>
			<content:encoded><![CDATA[<p>Intel c++编译器有下列优点，建议VC++项目开发采用intel c++编译器取代VS自带c++编译器：</p>
<p>与 Microsoft Visual C++ 相兼容，可以嵌入 Microsoft Visual Studio 开发环境。 </p>
<p>支持最新的多核处理器，并提供安全功能，可以通过执行堆栈桢运行时错误检查，使得缓冲区溢出安全漏洞更不易受到攻击。 </p>
<p>支持多线程应用程序，支持 Open MP，拥有自动并行化功能。 </p>
<p>遵循 ANSI C/C++ 及 ISO C/C++ 的标准。 </p>
<p>包括Intel Debugger 和代码覆盖工具，支持优化代码和多线程应用的调试，减少代码缺陷，提高开发效率。 </p>
<p>支持最新的多核处理器。支持最新处理器的优化功能能大大提高程序在这些处理器上的效能。<br />
支持运行时对堆栈的检查，减少缓冲器益处导致的安全缺陷。<br />
包含IA-32，Itanium（安腾）2以及支持64位内存扩展技术开发工具。<br />
增强Intel Debugger对优化代码的支持 </p>
<p>Intel c++编译器集成到 Microsoft Visual Studio* 2005 和 2008 中。使用英特尔 C++ 编译器、Microsoft Visual C++* 编译器或两者同时使用！<br />
· 多线程应用支持包括 11.0 中的新特性、OpenMP 3.0（数据并行和当前任务并行）以及自动并行，以支持简单有效的软件线程。<br />
· 自动矢量化可实现代码并行，从而利用我们最新的处理器中的 SIMD 流指令扩展（SSE）指令集架构（SSE、SSE2、SSE3、SSSE3 和 SSE4）。<br />
· 高性能并行优化程序（HPO）将调整并优化循环，并确保自动矢量化、OpenMP 或自动并行能够最充分地利用高速缓存和内存访问，SIMD 指令集和多个内核。在单一通道中进行编译，能够缩短编译时间并产生更多可靠的代码。<br />
· 过程间优化（IPO）能够动态地改进中小型函数的程序，特别是循环内包含调用的程序。IPO 分析可提供关于缺陷和编码错误的反馈信息（如未初始化的变量或 OpenMP API 问题），其它编译器不能探测到此类错误。<br />
· 档案导引优化（PGO）通过降低指令快取置换（cache-thrashing）、重组代码布局、缩减代码长度并减少分支预测失误来提高应用程序性能。<br />
· 英特尔® 线程构建模块是一个屡获殊荣的 C++ 模板库，能够为任务吸取线程，以创建可靠的、便携的、可扩充的并行应用。英特尔® TBB 是实施并行应用和释放多核平台性能的最有效方式。<br />
· 英特尔® 数学核心函数库包括支持最出色性能的优化及可扩充的数学程序，同时无缝提供从当前到未来多核平台的前向扩充。<br />
· 英特尔® 集成性能基元是一个广泛的多核就绪函数库，高度优化的软件功能可用于多媒体数据处理和通信应用。</p>
<p>那么我们来实际操作一下利用Intel C++编译器的使用吧</p>
<p>先安装，遵循下列流程，</p>
<p>1.安装初始化界面<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/1.jpg" alt="" /></p>
<p>2.进入安装流程<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/2.jpg" alt="" /></p>
<p>3.许可协议<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/3.jpg" alt="" /></p>
<p>4.许可协议后进行安装<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/4.jpg" alt="" /></p>
<p>5.选择试用<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/5.jpg" alt="" /></p>
<p>6.选择完全安装<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/6.jpg" alt="" /></p>
<p>7.进行安装<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/7.jpg" alt="" /></p>
<p>8.进行安装<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/8.jpg" alt="" /></p>
<p>9.安装完成<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/11.jpg" alt="" /></p>
<p>10.编译器属性设置<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/12.jpg" alt="" /></p>
<p>11.编译器前后路径设置<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/13.jpg" alt="" /></p>
<p>12.项目采用intel C++编译器进行优化编译<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/14.JPG" alt="" /></p>
<p>13.确认<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/15.jpg" alt="" /></p>
<p>14.intel  C++编译器进行优化并输出<br />
<img src="http://p.blog.csdn.net/images/p_blog_csdn_net/yincheng01/EntryImages/20091113/16.jpg" alt="" /></p>
<p>本人曾经2008-2009开发了8个VC项目，其中7个都用intel c++编译器可以大幅度提升程序性能，</p>
<p>尤其是多媒体性能，计算性能，以及多核条件下的性能要明显强于visual studio 自带C++编译器</p>
<p>同等条件下，intel c++编译器已经几乎无限接近汇编语言的执行效率了，同等条件下，速度更快，体积越小。</p>
<p>本人的7个项目都利用intel c++编译器提升了性能。推荐大家采用intel C++编译器。但是一个嵌入式项目例外，</p>
<p>但是在嵌入式平台，基于winCE,winmobile的MFC不推荐使用intel C++编译器，因为底层芯片基于ARM，无法发挥intel c++编译器的功效，反而不如VS自带的编译器。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2010/04/28/visual-c-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

