一起来学OpenMP(1)——初体验
2016-11-17 14:14
323 查看
转载自新浪博文:http://blog.sina.com.cn/s/blog_57562d890100xj3i.html
OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。
我的开发环境是Windows、VS2008、双核处理器。
1. 在VS2008程序目录下找到vcomp90d.dll文件,并复制到windows/system32/目录下。
2. 创建一个名为OpenMP的空控制台工程(即没有VS2008不会生成任何文件)
3. 添加一个名为OpenMP.cpp的源文件
4. “工程属性->C/C++->OpenMP支持”设置如下图:
5. 简单的OpenMP代码。
[cpp] view plaincopyprint?
#include <iostream>
#include <stdio.h>
#include <omp.h> // OpenMP编程需要包含的头文件
int main()
{
#pragma omp parallel for
for(int i = 0; i < 10; ++i)
{
std::cout << i << std::endl;
}
return 0;
};
执行结果如下:
可以看到,i从0至9的循环任务被分配到两个核上,第一个核执行了0~4,第二个核执行了5~9。
6. 小节
通过#pragma omp预处理指示符指定要采用OpenMP,这里通过#pragma omp parallel for来指定下方的for循环采用多线程执行,此时编译器会根据CPU的个数来创建线程数,对于双核系统,编译器会默认创建两个线程执行并行区域的代码。
#pragma omp有许多用法,后续一一介绍。
OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。
我的开发环境是Windows、VS2008、双核处理器。
1. 在VS2008程序目录下找到vcomp90d.dll文件,并复制到windows/system32/目录下。
2. 创建一个名为OpenMP的空控制台工程(即没有VS2008不会生成任何文件)
3. 添加一个名为OpenMP.cpp的源文件
4. “工程属性->C/C++->OpenMP支持”设置如下图:
5. 简单的OpenMP代码。
[cpp] view plaincopyprint?
#include <iostream>
#include <stdio.h>
#include <omp.h> // OpenMP编程需要包含的头文件
int main()
{
#pragma omp parallel for
for(int i = 0; i < 10; ++i)
{
std::cout << i << std::endl;
}
return 0;
};
执行结果如下:
可以看到,i从0至9的循环任务被分配到两个核上,第一个核执行了0~4,第二个核执行了5~9。
6. 小节
通过#pragma omp预处理指示符指定要采用OpenMP,这里通过#pragma omp parallel for来指定下方的for循环采用多线程执行,此时编译器会根据CPU的个数来创建线程数,对于双核系统,编译器会默认创建两个线程执行并行区域的代码。
#pragma omp有许多用法,后续一一介绍。
相关文章推荐
- 一起来学OpenMP(1)——初体验
- 一起来学OpenMP(9)——线程同步之事件同步机制
- 一起来学OpenMP(10)——线程的调度优化
- 一起来学OpenMP(3)——for循环并行化基本用法
- 一起来学OpenMP(4)——数据的共享与私有化
- 一起来学OpenMP(2)——常用的库函数
- 一起来学OpenMP(5)——有效的数据规约
- 一起来学UML(1)——UML建模工具Umbrello初体验
- 一起来学OpenMP(3)——for循环并行化基本用法
- 一起来学OpenMP(6)——线程同步之atomic
- 一起来学OpenMP(4)——数据的共享与私有化
- 一起来学UML(1)——UML建模工具Umbrello初体验
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(5)——有效的数据规约
- 一起来学OpenMP(9)——线程同步之事件同步机制
- 一起来学OpenMP(6)——线程同步之atomic
- 一起来学OpenMP(1)
- 一起来学OpenMP(3)——for循环并行化基本用法
- 一起来学OpenMP(7)——线程同步之临界区
- 一起来学OpenMP(4)——数据的共享与私有化