解读Intel编译器的offload报告

英特尔编译器在对代码进行编译优化的过程中用户可以通过使用”-opt-report-phase=phase”选项让编译器输出某些特定优化阶段的相关信息。针对至强融核™ 协处理器提供的offload编译模式英特尔编译器提供了”offload”关键字。它可以让编译器提供主机和目标协处理器之间的数据传输信息。

 

加上编译选项”-offload-report-phase offload”后编译器会对原代码中的每一个offload区域生成两段报告:第一段以Offload to target MIC开头的报告来自于主机代码编译过程;第二段以Outlined offload region开头的报告则来自于目标协处理器编译过程。

 

例如对于下面的代码 “reduction.c”:

 

  1 float reduction(float *data, int numberOf)

  2 {

  3   float ret = 0.f;

  4   int i;

  5   #pragma offload target(mic) in(data:length(numberOf))

  6   {

  7      #pragma omp parallel for reduction(+:ret)

  8      for (i=0; i < numberOf; ++i)

  9         ret += data[i];

 10   }

 11   return ret;

 12 }

 13

 

$ icc -c -openmp -opt-report-phase=offload reduction.c

reduction.c(5-5):OFFLOAD:reduction:  Offload to target MIC 1

 Data sent from host to target

       data_2_V$0, pointer to (<expr>) elements

       i, scalar size 4 bytes

       numberOf_2_V$1, scalar size 4 bytes

       ret, scalar size 4 bytes

 Data received by host from target

       i, scalar size 4 bytes

       numberOf_2_V$1, scalar size 4 bytes

       ret, scalar size 4 bytes

 

reduction.c(5-5):OFFLOAD:reduction:  Outlined offload region

 Data received by target from host

       data_2_V$0, pointer to (<expr>) elements

       i, scalar size 4 bytes

       numberOf_2_V$1, scalar size 4 bytes

       ret, scalar size 4 bytes

 Data sent from target to host

       i, scalar size 4 bytes

       numberOf_2_V$1, scalar size 4 bytes

       ret, scalar size 4 bytes

 

在编译器输出的报告中我们可以看到:源代码第5行的offload区域在offload模式下执行时,首先由主机向协处理器传输的数据包括:

  1. 指针”data”所指向的数据元素,其中元素个数由表达式的运行时值确定
  2. 标量”i”,长度为4字节
  3. 标量”NumberOf”,长度为4字节
  4. 标量”ret”,长度为4字节

 

接下来在offload区域执行完毕后由协处理器传回主机的数据包括:

  1. 标量”i”,长度为4字节
  2. 标量”NumberOf”,长度为4字节
  3. 标量”ret”,长度为4字节

 

从报告的内容我们还可以看出,代码中的指针”data”被显式指定为in类型,所以它所指向的数据只被传输到协处理器上而无需传回主机;而其它3个在offload区域被引用的标量型变量由于没有被显式指定传输类型,所以它们遵循隐式规则被双向传输。

 

更多关于如何使用英特尔编译器开发至强融核协处理器程序的信息请参见英特尔编译器用户参考手册的相关内容。

For more complete information about compiler optimizations, see our Optimization Notice.