(一)初步了解并行计算、OpenMP
2016-11-26 21:52
260 查看
(1) 什么是HPC?
High performance computing高性能计算,特点是使用多处理器。(2) 什么是并行计算?
并行计算是相对串行计算来说的,它是一种一次可执行多个指令的算法,目的是提高计算速度,解决大型而复杂的计算问题。(3) 什么是OpenMp?
用于“共享内存并行系统的多处理器程序设计”的一套指导性的编译处理方案。(4) OpemMP支持的语言?
C/C++、Fortran(5) OpenMP能干什么?
程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。(6) 在Visual C++中使用OpenMP?
Project->Properties->C/C++中的Language->OpenMP Support开启,编译器就支持OpenMP的语法了;编写使用OpenMP的程序时,需要包含OpenMP的头文件:
#include<omp.h>
(7) 将for循环并行处理?
在前面加上一行:#pragma omp parallel for(8) 简单代码,理解运作方式?
#include <stdio.h> #include <stdlib.h> void Test(int n) { for(int i = 0; i < 10000; ++i) { //do nothing, just waste time } printf("%d, ", n); } int main(int argc,char* argv[]) { for(int i = 0; i < 10; ++i) Test(i); system("pause"); }
上面的程序,在 main() 是一个很简单的回圈,跑十次,每次都会调用Test()这个函数,并把是回圈的执行次数(i)传进Test() 并打印出来。想当然,它的结果会是:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
而如果想利用 OpenMP把 main() 里面的回圈平行化处理呢?只需要修改成下面的样子:
#include <omp.h> #include <stdio.h> #include <stdlib.h> void Test (int n) { for(int i = 0; i < 10000; ++i) { //do nothing, just waste time } printf("%d, ", n); } int main(int argc,char* argv[]) { #pragma omp parallel for for(int i = 0; i < 10; ++i) Test( i ); system("pause"); }
够简单吧?重头到尾,只加了两行!而执行后,可以发现结果也变了!
0, 5, 1, 6, 2, 7, 3, 8, 4, 9,
可以从结果很明显的发现,他没有照着0到9的顺序跑了!而上面的顺序怎么来的?其实很简单,OpenMP只是把回圈 0 - 9 共十个步骤,拆成 0 - 4, 5 - 9 两部份,丢给不同的执行绪去跑,所以数字才会出现这样交错性的输出~
参考:百度百科
相关文章推荐
- 并行计算—OpenMP—临界区方法求和
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- OpenMP并行计算程序设计基础下载地址
- clang编译器实现openmp 支持NVIDIA Gpu并行计算
- OpenMP 线程化(Threading)基础(1)--并行计算简介
- 并行计算机及并行计算环境之初步介绍
- 并行计算----5种方式实现判断是不是素数.Net,Win32,JavaRunnable,OpenMp,JavaThread
- ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- .Net中并行计算的了解
- 利用VS的代码优化和openmp并行计算提高程序运行速度
- 方阵行列式并行化计算(OpenMP,MPI),并计算加速比
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- 并行计算(Parallel Computing)初步认识
- openmp并行计算
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- 并行计算----5种方式实现判断是不是素数.Net,Win32,JavaRunnable,OpenMp,JavaThread
- openMP(并行计算) 超简单快速上手
- 并行计算开发了解