- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CImage类,OpenMP,源代码.
首先介绍一下OpenMP和vc的Cimage类 OpenMP 摘要 您现在可能已经了解到,如果想充分利用含超线程(HT)技术的处理器的性能优势,就必须并行执行应用。可是,应用的并行执行需要线程参与,且应用的线程化也并非易事。其实,我们可以借OpenMP* 这样的工具更轻松地实现应用线程化。OpenMP 充分利用超线程(HT)技术的优势。本文作为开篇之首,首先将为您详细介绍如何并行执行循环,即:工作共享。我们的第二篇白皮书将教您如何利用非循环并行 能力和 OpenMP 的其它特性进行编程。最后,我们将会在末篇与您深入探讨 OpenMP 的运行时库函数以及英特尔(R) C++ 编译器是如何在出现错误时调试您的应用。 OpenMp 简介 OpenMP 的设计人员希望能为编程人员提供一个简单方法,以使他们无需了解如何制作、同步和毁坏线程的知识,甚至无需决定创建的线程数,即可轻松地线程化其应用程 序。他们专门开发了一套独立于平台的编译器范式、指令、函数调用和环境变量,以明确地指导编译器如何将线程插入应用,并明晰地指出应用插入的准确位置。这 样,大多数循环仅在开始循环前直接插入一条编译指令即可实现线程化。此外,您还可以将细节事情留给编译器和 OpenMP 处理,从而赢取更多时间来决定哪些循环应该线程化,以及如何最佳重组算法获得最高性能。至此,在使用 OpenMP 对“热点”(您应用中最耗时的循环)进行线程化时,OpenMP 的性能将可实现最优化。 下面这个例子就为我们展示了 OpenMP 强大的功能和简易性。下列循环可将 32 位 RGB (红、绿、蓝)像素转换为 8 位灰阶像素。它只需在开始循环前直接插入一条编译指令,即可实施并行执行。 #pragma omp parallel for for (i=0; i numPixels; i++) { pGrayScaleBitmap[i] = (unsigned BYTE) (pRGBBitmap[i].red * 0.299 + pRGBBitmap[i].green * 0.587 + pRGBBitmap[i].blue * 0.114); } 让我们来详细了解一下这个循环。首先,上例中使用了“工作共享”。“工作共享”作为 OpenMP 所用的一个一般术语,主要用于描述线程间工作的分配情况。如上例所示,当工作共享用于 for 构造函数时,循环迭代会在多个线程间进行分配,这样就可确保每个循环迭代刚好执行一次,并与一个或以上的线程并行执行。由于 OpenMP 完全可以 自行决定创建的线程数量,以及如何以最佳方式创建、同步和毁坏线程。所以,编程人员只需告知 OpenMP 应该针对哪个循环进行线程化,即可轻松完成全部工作。 OpenMP 对可以线程化的循环设置了以下五个限制条件: * 循环变量必须为带符号整数型。DWORD 等无符号整数无法实现线程化。 * 必须按照loop_variable 、=、、或 = loop_invariant_integer 形式执行比较操作。 * for 循环的第三个表达式或增量部分必须与一个循环不变式值进行整数相加或整数相减。 * 如果比较操作的形式为 或 = ,则循环变量必须每个迭代增加一次;反之,如果比较操作的形式为 或 = ,则循环变量必须每个迭代减少一次。 * 循环必须为一个基本模块,意即不允许从内循环跳至外循环,除非使用 exit 语句来终止整个应用。如果使用 goto 或 break 语句,则它们必须在循环内部,而非外部进行跳跃。这同样适用于异常处理 ;但异常情况必须控制在循环内部。 尽管上述限制条件显得有些苛刻,但您可以依照这些限制条件轻松地对不符合条件的循环进行重新编写。编译基本要点如欲使用 OpenMP 范式进行编程,则需要一个与 OpenMP 相兼容的编译器和多个线程安全库。通常,最理想的选择是英特尔(R) C++ 编译器 7.0 版或更高版本。(英特尔(R) Fortran 编译器也支持OpenMP。)而将下列命令行选项加入编译器,则可以起到提醒它注意 OpenMP 编译指令并插入线程的作用。 如果您省略命令行上的 /Qopenmp ,则编译器将忽略 OpenMP 编译指令,为您提供一个十分简单的方法,这样无需改变任何源代码即可生成单线程版本。此外,英特尔(R) C++ 编译器还支持 OpenMP2.0 规范。如欲获得必威体育精装版信息,请您务必查看与英特尔(R) C++ 编译器一道发布的版本说明和兼容性信息。如欲获得完整的 OpenMP 规范,请访问:
您可能关注的文档
最近下载
- 农村电子商务教材配套教学课件(完整版)(文字可修改版).pptx
- 空冷湿冷机组冷却系统互补运行节能节水技术.pdf
- 矿产项目披露标准加拿大国家NI43-101文件-一-.pdf VIP
- 加拿大地质规范NI43-101标准(英文).pdf VIP
- 加拿大地质规范NI43-101.doc VIP
- 新款 GLK级车型介绍 车型204维修介绍手册.pdf VIP
- 加拿大NI43-101标准中文版.pdf VIP
- 医疗护理员课件.pptx VIP
- 数字逻辑与数字系统设计_中国矿业大学中国大学mooc章节课后测试答案期末考试题库2024年.docx VIP
- 道奇-JCUV-产品使用说明书-Journey Crossroad 旅行版(2.4L)-JCUV (B6F)-2013款酷威用户手册(产品使用说明书).pdf VIP
文档评论(0)