openmp在多重循环内的简单使用及其详解 | 您所在的位置:网站首页 › 三层for循环详解 › openmp在多重循环内的简单使用及其详解 |
由于项目需求,在三重循环内加入了并行计算,但由于只能在内层循环加入,而内层循环只有32维度,因此速度提高的也就那么几毫秒。 在此 不再将代码贴出! 大牛汇总的openmp知识点见连接http://blog.csdn.net/fengbingchun/article/details/17270023 以下是转载的大咖博客中的详细讲解,很不错! 在科学和工程应用中,许多程序都要在循环执行上花大量的时间,如Fortran中的do循环和C语言中的for循环,通过并行中的loop-level可以减少这些循环的运行时间。OpenMP提供了parallel for或parallel do指令来对循环结构进行并行处理,这个指令可以用于大部分的循环结构,它也是OpenMP中使用最多和最频繁的指令。当然,程序员必须清楚哪些循环是可以进行并行的。 OpenMP中用于循环的指令结构为: #pragma ompparallel for [clause [clause …]] for循环结构 注:方括号[]表示可选项。 在parallel for或parallel do指令后,紧接着就必须是for循环(对于C语言)或do循环(对于Fortran语言),并形体就是for或do循环中的程序。只是在fortran中还可以添加!$omp end parallel do指令来表示循环并行结束。OpenMP还提供了用于控制并行执行的一些循环选项条件(clause),根据这些条件的类型可以分为范围条件、schedule条件、if条件、ordered条件和copyin条件等。 范围条件 范围条件主要有default(shared | none)、shared(list)、private(list)、firstprivate(list)、lastprivate(list)和reduction(operator:list)等。default条件用于设置并形体中涉及到的变量默认是shared共享的还是非共享的,default后的括号中只有值shared或none。shared条件表示其后list列出的那些变量在并形体中是共享的,意思就是说并形体外部和并形体内部都可以对该变量进行读取和修改,它就像全局变量一样。 private条件用于表示其后list列出的那些变量在并形体中是私有的。既然是私有的,那么在并形体外部设置的该变量值无论为多少,在并形体中都将无法使用。所有这些private变量在并形体中都必须初始化设置值,换句话说,这些private的变量在并形体中与在并形体外是完全隔离的、毫无关系的。在for循环中定义的循环变量默认就是private的。下面举一个例子来说明private,如下代码: [cpp] view plain copy // File: PrivateTest.cpp : 定义控制台应用程序的入口点。 #include #include using namespace std; //private测试 int PrivateTest() { cout |
CopyRight 2018-2019 实验室设备网 版权所有 |