MIC编程(7 )——offload语法

25 篇文章 0 订阅
13 篇文章 1 订阅

MIC编程中最基本的语法就是offload语句,offload语句的作用为将程序和数据由CPU端传递到MIC端,并在MIC上执行,offload语法为:

C/C++: 
#pragma offload target(mic: id) in(...) out(...)

Fortran: 
!dec$ OFFLOAD  target(mic: id) in(...) out(...)
或:
!DIR$ OFFLOAD BEGIN  target(mic: id) in(...) out(...)
...
!DIR$ END OFFLOAD 


target指定在哪块卡上运行,id代表设备编号,如果id等于-1,系统将自动选择一块计算设备(现在来说只有MIC卡),如果没有符合要求的设备(如只有CPU),程序将退出并报错;如果id大于等于0,程序将offload到相应的id号mic上。

target(mic)不指定运行在哪块MIC卡上,这时程序会轮回的执行在不同的MIC卡上,如系统有两块MIC卡,第1次offload到mic0上执行,第2次offload到mic1上执行,第3次offload到mic0上执行,第4次offload到mic1上执行,.......


in()  out()代表数据传递方向,in为数据从CPU内存传递到MIC内存上,out为数据从MIC内存上回传到CPU内存中。具体语法后面再详细介绍。


下面以向量加为例说明:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <omp.h>

  4. #define N 200000

  5. __attribute__((target(mic)))
  6. void VecAdd_mic(float* A, float* B, float* C, int size)
  7. {
  8. #pragma omp parallel for
  9.         for(int i=0;i<size;i++)
  10.                 C[i] = A[i] + B[i];
  11. }

  12. int main( int argc, char** argv)
  13. {
  14.     int i;
  15.     int size = N * sizeof(float);

  16.     float *A,*B,*C;
  17.     A = (float*)malloc(size);
  18.     B = (float*)malloc(size);
  19.     C = (float*)malloc(size);

  20.     srand(2013);
  21.     for(i=0;i<N;i++)
  22.     {
  23.         A[i]=rand()%10;
  24.         B[i]=rand()%10;
  25.     }

  26. #pragma offload target(mic) in(A,B: length(N)) out(C: length(N))
  27.     {
  28.         VecAdd_mic(A, B, C, N);
  29.     }

  30.     for(i=0;i<N;i+=10000)
  31.     {
  32.         printf("%6d: %4.2f + %4.2f = %4.2f\n",i,A[i],B[i],C[i]);
  33.     }

  34.     free(A);
  35.     free(B);
  36.     free(C);
  37. }
编译:icpc -O3 -openmp -o vectoradd_mic_offload vectoradd_mic_offload.cpp

运行:./vectoradd_mic_offload


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
GPU和MIC都是用于高性能计算的加速器。offload模式是将部分计算任务从CPU转移到加速器上,以提高计算性能。GPU和MIC的offload模式有以下异同: 1. 异同点:GPU和MIC的offload模式都是将计算任务从CPU转移到加速器上进行处理,以提高计算性能。但是,两者的处理方式不同。GPU通过CUDA或OpenCL等编程模型来实现offload,而MIC则通过Intel Xeon Phi架构来实现offload。 2. 异同点:GPU和MIC的offload模式都需要将数据传输到加速器的内存中,以便进行计算。但是,两者的内存结构和管理方式也不同。GPU的内存结构是分层的,包括全局内存、共享内存和寄存器等不同层次的内存。而MIC的内存结构是统一的,可以通过NUMA架构进行管理。 3. 异同点:GPU和MIC的offload模式都需要进行编程,以便将计算任务分配到加速器上进行处理。但是,两者的编程模型也不同。GPU的编程模型是基于CUDA或OpenCL等语言的,而MIC编程模型则是基于OpenMP等标准的。 4. 异同点:GPU和MIC的offload模式都可以提高计算性能,但是对于不同的应用场景,两者的性能表现也不同。GPU适用于大规模并行的计算任务,而MIC适用于单节点的高性能计算任务。 综上所述,GPU和MIC的offload模式在实现方式、内存结构、编程模型和性能表现等方面都有所不同。在选择适合自己应用场景的加速器时,需要根据实际需求进行选择。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值