0
我正在測試一個包含三個Intel Xeon Phi卡的節點。我的 的想法是使用OpenMP 4.0指令來卸載協處理器上的任務 。代碼如下(它是從http://goo.gl/9Ztq0e取):卸載OpenMP 4.0的指令
/***************************************************************************************************
* FILE : openmp4x-reduce-1Darray.c
*
* INPUT : Nil
*
* OUTPUT : Displays Host and device reduce sum
*
* CREATED : August,2013
*
* EMAIL : [email protected]
*
***************************************************************************************************/
#include <stdio.h>
#define SIZE 10000
#pragma omp declare target
int reduce(int *inarray)
{
int sum = 0;
#pragma omp target map(inarray[0:SIZE]) map(sum)
{
for(int i=0;i<SIZE;i++)
sum += inarray[i];
}
return sum;
}
int main()
{
int inarray[SIZE], sum, validSum;
validSum=0;
for(int i=0; i<SIZE; i++){
inarray[i]=i;
validSum+=i;
}
sum=0;
sum = reduce(inarray);
printf("sum reduction = %d,validSum=%d\n",sum, validSum);
}
我與英特爾/ 16.0.1.150編譯器編譯它(我在英特爾網站上閱讀 這個編譯器支持的OpenMP 4.0,也許我錯了)。除了這個 我使用的變量:
export MIC_ENV_PREFIX=MIC
export MIC_OMP_NUM_THREADS=240
export MIC_KMP_AFFINITY=granularity=fine,compact
icc -openmp -std=c99 -qopt-report2 openmp_4.0_reduce_1Darray.c -o exec
的問題是,當我運行的代碼,然後我用micsmc的GUI(圖形界面)來查看內核的協處理器上的性能。我不明白的是,爲什麼在每個協處理器 上似乎只使用一個內核,而與MIC上使用的線程數無關,請參見圖中每個MIC上的紅色矩形 。
什麼建議嗎?
謝謝。
這是可以預料的。代碼中沒有工作共享構造,因此它在協處理器上串行運行。 –