mic中编程十分简单,只需在普通程序中简单加几句就可以,使用 lspci|grep -i -co-processor 命令可以查看机器中是否插入MIC卡以及MIC卡的数目,MIC编程环境的配置这里就不讲了,下面是一个示例程序,
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int main(){ 5 float pi=0.0f; 6 int count=10000; 7 int i; 8 #pragma offload target(mic) 9 for(i=0;i<count;i++){ 10 float t=(float)((i+0.5f)/count) ; 11 pi+=4.0f/(1.0f+t*t); 12 13 } 14 pi/=count; 15 if(fabs(pi-3.14)<=0.01f) 16 #ifdef DEBUG 17 printf("PASS Sample01 PI=%f ",pi); 18 else 19 printf("***FAIL Sample01 Pi=%f ",pi); 20 #else 21 printf("PASS Sample01 "); 22 else 23 printf("***FAIL Sample01 "); 24 #endif 25 }
进行编译 icc -o PI PI.c -DDEBUG
执行 ./PI
代码成功就会显示
PASS Sample01 PI=3.141593
对上面代码进行简单更改就可以与openMP一起使用,代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int main(){ 5 float pi=0.0f; 6 int count=10000; 7 int i; 8 #pragma offload target(mic) 9 #pragma omp parallel for reduction(+:pi) 10 for(i=0;i<count;i++){ 11 float t=(float)((i+0.5f)/count) ; 12 pi+=4.0f/(1.0f+t*t); 13 14 } 15 pi/=count; 16 if(fabs(pi-3.14)<=0.01f) 17 #ifdef DEBUG 18 printf("PASS Sample01 PI=%f ",pi); 19 else 20 printf("***FAIL Sample01 Pi=%f ",pi); 21 #else 22 printf("PASS Sample01 "); 23 else 24 printf("***FAIL Sample01 "); 25 #endif 26 }
进行编译 icc -fopenmp -o PI PI.c -DDEBUG
执行 ./PI
代码成功就会显示
PASS Sample01 PI=3.141593