Linux环境下的OpenMP多线程编程

在正式开始前,我先说一下,我们的OpenMP编程在linux下写完以后编译工具为GCC,编译命令如下:

gcc -fopenmp filename.c -o filename

好!开始!

首先,我们学习一下循环的并行化,因为早并行编程中最重要的部分,其它废话不多说;其语法格式如下:

#pragma omp parallel for[clause[claue..]]
  for(index=start;index


使用上述语句,就是将循环的工作放到一个线程组里,而线程组中的每一线程完成循环中的一部分。编译指导语句的功能一直延伸到for循环结束的地方,也可以在句子后跟clause来具体说明parallel 的具体功能。

注意:praallel for 语与必须紧紧跟在编译指导语句 #pragma omp 后面,不要跟丢。

例1:向量相加

#pragma omp parallel for
  for(int i=0;i

然后,我们来学习一下循环的嵌套,相信能看到这里的同志的编程技术都不差,那我就不说循环的嵌套十个什么东西了,直接上栗子。

例2:循环嵌套1

#include"omp.h"
int main(int argc,char *argv[])
{
  int i,j;
  #pragma omp parallel for
  for(i=0;i<2;i++)
    for(j=5;j<10;j++)
      printf("i=%d,j=%d.\n",i,j);
  return 0;
}


运行结果:

例2:循环嵌套2

#include"omp.h"
int main(int argc,char *argv[])
{
  int i,j;
  for(i=0;i<2;i++)
  #pragma omp parallel for 
    for(j=5;j<10;j++)
      printf("i=%d,j=%d.\n",i,j);
  return 0;
}

运行结果:

上面两个程序中,我们会发现,例子1,作用在外层,而例子2作用于内层,而且例子2的结果不止这一种。

—————————————20160610————————————————明天再写后面的一些东西





你可能感兴趣的:(并行计算)