MIC编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MIC编程相关的知识,希望对你有一定的参考价值。

MIC编程

(基础部分,可参考上一篇《MIC简介》)

几个问题:

1.什么是MIC

协处理器、加速卡

2.什么是MIC编程?

让程序运行在MIC卡上

3.如何发挥MIC卡的优势?

并行(在众多核心上)

4.如何并行?

应用并行库:OpenMPMPIpThreadTBB……

 

 

MIC应用模式

MIC卡可以看作协处理器,也可以看作独立的节点

MIC5中应用模式:

   CPU原生模式

   CPU为主MIC为辅模式(最常用)

   CPUMIC对等模式

   MIC为主CPU为辅模式

   MIC原生模式(native模式)

微异构:CPU上的某些指令放在MIC上还是有些问题的。

 

 

native模式:

什么是native模式?

   仅在MIC卡上本地运行的模式

如何使用native模式?

   原始CPU程序,编译时增加“-mmic”选项

   不能含SSEAVX等向量化指令代码

native模式有什么好处?

   简单,无传输

native模式有哪些局限?

   卡上空间有限,单核计算能力有限(应该还不如CPU

native模式适合哪种应用场景?

   简单测试、高并发的小规模程序

 

native模式使用方式

   CPU单节点程序test_native.c

icc  test_native.c  -o  ta.out

   编译选项增加-mmic

icc  test_native.c  -o  ta.out  -mmic

方法一:

scp将可执行程序传到卡上

scp  ta.out  mic0:  ~/

登录到卡上执行程序

ssh  mic0

./ta.out

远程执行

ssh  -x  mic0  /root/ta.out

方法二:

无需将可执行程序传到卡上

/opt/intel/mic/bin/micnativeloadex

 

 

对等模式(必须是CPUMPI程序)

什么是对等模式?

   通过网络在CPUMIC端协同计算的模式

如何使用对等模式?

  原始CPU程序,编译两个版本,其一增加”-mmic”

  不能含有SSEAVX等向量化指令代码

对等模式有哪些局限?

  通信开销大

对等模式适合哪种应用场景?

  高并发的MPI程序,内部使用多线程并行

 

对等模式使用方法

CPUMPI程序

编译两份代码,使用mpiicc

mpiicc  test_mpi.c  -o  tm.out

mpiicc  test_mpi.c  -o  tm.out_mic  -mmic

scpmic端可执行程序传到卡上

scp  tm.out_mic  mic0: ~/

mic运行库

设置环境变量export  I_MPI_MIC=enable

运行程序

mpirun  -host(主机IP)  host  -n  1  ./tm.out  : -host  mic0  -n  1

 

 

offload模式

什么是offload模式?

  MIC作为协处理器,负责部分运算的模式

如何使用offload模式?

  修改代码,编写引语,类似于OpenMP

offload模式有什么好处?

  灵活、效率高

offload模式有哪些局限?

  通信开销,需要修改代码

offload模式适合哪种应用场景?

   适合高并行加速的应用

 

offload基础概念--主机和设备

Host-Device的定义

Host端:CPU主机端

运行串行部分

负责控制等

Device端:MIC设备端

   作为CPUhost)的协处理器

   有独立的存储设备(device memory

同时启动大量线程进行并行计算

 

CPU/MIC异构协同计算模型

Fork-join模型(一般利用此模型,计算密集型)

CPUoffload (卸载)MIC函数

MIC函数内部进行并行计算

CPU获取MIC计算后的结果(比如说规约后的)

 

Offload模式运行流程

程序启动,在CPU端运行主函数------程序运行到offload语句,得知接下来的代码段要在MIC端运行------驱动程序检测MIC卡是否存在,如果存在则调用MIC版本代码,否则调用CPU版本代码------(以下假设MIC卡存在)如果本次是第一次运行MIC程序,则驱动程序启动/唤醒MIC------MIC版本代码加载到MIC卡上------MIC端内存开辟空间,驱动程序将从数据从CPU端内存中复制到MIC端内存中------CPU端程序暂停:MIC端程序开始运行(CPU此时停下来等着)------MIC端程序段运行完成后,将数据从MIC端内存复制到CPU端内存------MIC卡回复低功耗状态,CPU端程序恢复运行------程序结束

 

以上是关于MIC编程的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?

以编程方式将按钮添加到片段