zoukankan      html  css  js  c++  java
  • 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端程序恢复运行------程序结束

  • 相关阅读:
    706. Design HashMap 实现哈希表
    5. Longest Palindromic Substring 返回最长的回文子串
    8. String to Integer (atoi) 字符串转成整数
    22. Generate Parentheses产生所有匹配括号的方案
    245. Shortest Word Distance III 单词可以重复的最短单词距离
    java之spring之初始spring
    java之hibernate之hibernate缓存
    java之hibernate之hibernate查询
    java之hibernate之加载策略和抓取策略
    java之hibernate之 cascade和inverse
  • 原文地址:https://www.cnblogs.com/qysqys/p/5185209.html
Copyright © 2011-2022 走看看