(一)初步了解并行计算、OpenMP

(1) 什么是HPC?

High performance computing高性能计算,特点是使用多处理器

(2) 什么是并行计算?

并行计算是相对串行计算来说的,它是一种一次可执行多个指令的算法,目的是提高计算速度,解决大型而复杂的计算问题。

(3) 什么是OpenMp?

用于“共享内存并行系统的多处理器程序设计”的一套指导性的编译处理方案

(4) OpemMP支持的语言?

C/C++、Fortran

(5) OpenMP能干什么?

程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。

(6) 在Visual C++中使用OpenMP?

  1. Project->Properties->C/C++中的Language->OpenMP Support开启,编译器就支持OpenMP的语法了;
  2. 编写使用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 两部份,丢给不同的执行绪去跑,所以数字才会出现这样交错性的输出~

参考:百度百科

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一. 并发与并行的区别? ........................................................................................................................... 1 1.1 串行 .................................................................................................................................................. 1 1.2 并发 .................................................................................................................................................. 1 1.3 并行 .................................................................................................................................................. 1 1.4 多核编程的难点 ............................................................................................................................... 2 二. 多核体系架构 ...................................................................................................................................... 3 2.1 多核处理器定义 ............................................................................................................................... 3 2.2 多核发展趋势 .................................................................................................................................. 3 2.3 一个多核处理器架构例子 ............................................................................................................... 5 2.4 LINUX 线程核绑定 .............................................................................................................................. 6 2.4.1 核亲和性绑定 ........................................................................................................................... 6 2.4.2 资源控制 cgroup ...................................................................................................................... 8 三. 内存模型 .............................................................................................................................................. 8 3.1 操作原子性 ...................................................................................................................................... 9 3.1.1 原子性的3种保证机制 ........................................................................................................... 9 3.1.2 硬件原子操作 ........................................................................................................................... 9 3.1.3 总线锁-原子操作原语 ............................................................................................................ 12 3.2 缓存一致性 .................................................................................................................................... 16 3.2.1 定义 ........................................................................................................................................ 16 3.2.2 CC协议 .................................................................................................................................... 17 3.2.3 伪共享 .................................................................................................................................... 21 3.3 顺序一致性 .................................................................................................................................... 24 3.3.1 定义 ........................................................................................................................................ 24 3.3.2 几种顺序约束 ......................................................................................................................... 25 3.3.3 乱序执行和内存屏障 ............................................................................................................. 28 四. 并发级别 ............................................................................................................................................ 31 4.1 WAIT-FREEDOM 无等待并发 .............................................................................................................. 32 4.2 LOCK-FREEDOM 无锁并发 ................................................................................................................... 32 4.3 OBSTRUCTION-FREEDOM 无阻塞并发 .................................................................................................. 33 4.4 BLOCKING ALGOITHMS 阻塞并发 .......................................................................................................... 33 五. 锁 ....................................................................................................................................................... 34 5.1 信号量 ............................................................................................................................................ 34 5.2 自旋锁 ............................................................................................................................................ 35 5.3 读写锁 ............................................................................................................................................ 35 5.4 顺序锁 ............................................................................................................................................ 37 5.5 RCU .................................................................................................................................................. 38 六. 无锁编程 ............................................................................................................................................ 38 6.1 定义 ................................................................................................................................................ 39 七. 并发数据结构、开源库 ..................................................................................................................... 41 7.1 一些开源的并发库 ......................................................................................................................... 41 7.2 一次无锁哈希表跟基于锁的哈希表性能对比测试 ..................................................................... 41 7.2.1 测试平台 ................................................................................................................................ 41 7.2.2 测试过程 ................................................................................................................................ 42 7.2.3 哈希算法 ................................................................................................................................ 43 7.2.4 测试结果 ................................................................................................................................ 44 八. 多核工程实践 .................................................................................................................................... 44 8.1 网络设备 :INTEL DPDK .................................................................................................................. 44 8.2 网络游戏 ........................................................................................................................................ 44 8.3 手机开发 ........................................................................................................................................ 45 九. 参考 ................................................................................................................................................... 45

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值