3.2 循环并行化
对于大量的科学计算程序来说,循环计算通常占有很大的比例,对循环进行并行化处理可以大大提高应用程序的运行效率,因此循环并行化在OpenMP应用程序中是一个相对独立且非常重要的组成部分。循环并行化语句的编译指导语句格式如下: #pragma omp parallel for [clause[ [,] clause]...]
使用这个编译指导语句能将for循环中的工作分配到一个线程组中,而线程组中的每一个线程将完成循环中的一部分内容。编译指导语句的功能区域一直延伸到for循环语句的结束部分。编译指导语句后面的子句(clause)用来控制编译指导语句的具体行为。例如: #pragma omp parallel for for(int i=0;i<n;i++) a[i]=b[i]+c[i];
在上面的代码中,编译指导语句会将for循环中的工作分配到一个线程组中,编译指导语句的作用范围直到for循环结束部分。
并不是所有的循环都可以并行化,使用OpenMP对循环并行化有一定的限制:
(1)for循环语句必须明确循环次数,循环变量必须为整数,循环操作符必须是>,<,>=,<=。
(2)循环语句块必须是单出口与单入口,循环过程中不能使用break、goto、return语句,但可以使用continue,exit。
|