MIC中示例程序计算π

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

原文地址:https://www.cnblogs.com/sdxk/p/4209390.html