文档介绍:多核软件开发技术第六讲: OpenMP多线程编程及性能优化
北京大学
二零零八年春季
*致谢:感谢Intel对本课程项目的资助
本讲主要内容
OpenMP编程简介
OpenMP多线程应用程序编程技术
OpenMP多线程应用程序性能分析
OpenMP编程简介
OpenMP多线程编程发展概况
OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言
OpenMP是一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)
OpenMP具有良好的可移植性
支持多种编程语言
支持多种平台
OpenMP多线程编程基础
OpenMP的编程模型以线程为基础
通过编译指导语句来显示地指导并行化
OpenMP的执行模型采用Fork-Join的形式
在开始时,只有一个叫做主线程的运行线程存在
在运行过程中,当遇到需要进行并行计算的时候,派生出(Fork)线程来执行并行任务
在并行代码结束执行,派生线程退出或挂起,控制流程回到单独的主线程中(Join)
Master Thread
Parallel
Region
Nested
Parallel
Region
OpenMP应用程序运行时的Fork-Join模型
编译指导语句
在编译器编译程序的时候,会识别特定的注释,而这些注释就包含着OpenMP程序的一些语义
在一个无法识别OpenMP语意的普通编译器中,这些注释会被当作普通的注释而被忽略
在C/C++程序中,OpenMP所有编译指导语句以#pragma omp开始,后面跟具体功能指令
运行时库函数
OpenMP运行时函数库主要用以设置和获取执行环境相关的信息
它们当中也包含一系列用以同步的API
编译指导语句
运行时函数库
环境变量
使用VS 2005编写OpenMP程序
当前的Visual Studio .Net 2005完全支持OpenMP
通过新的编译器选项/openmp来支持OpenMP程序的编译和链接
建立一个新的项目