zoukankan      html  css  js  c++  java
  • Fortran+ OpenMP实现实例

    PROGRAM parallel_01
    
        USE omp_lib
        IMPLICIT NONE
    
        INTEGER :: i,j
        INTEGER(4) :: time_begin, time_end, time_rate
        REAL, DIMENSION(1:50,1:50) :: f, g
        REAL :: k
    
        WRITE(*,*) '开始进行串行计算'
    !>@ 1、通过串行计算获得两个矩阵的初始化计算
        CALL system_clock(time_begin,time_rate)
        DO i = 1, 50
            DO j = 1, 50
                f(i,j) = i*j
                k = k + 1
            END DO
        END DO
    
        DO i = 1, 50
            DO j = 1, 50
                g(i,j) = i*j + 1
                k = k + 1
            END DO
        END DO
    
        CALL system_clock(time_end,time_rate)
        WRITE(*,*) 'The value of k after serial computing is: ', k
        WRITE(*,*) 'The time wasted on serial computing is: ',(time_end - time_begin)/time_rate
    
        WRITE(*,*)
        WRITE(*,*)
        WRITE(*,*) '开始进行第一类串行计算—SECTIONS'
    
    !>@ 2、通过块并行计算获得两个矩阵的初始化计算
        k = 0 ! 重新初始化k的值 
        CALL system_clock(time_begin,time_rate)
        CALL omp_set_num_threads(2)
        !$omp parallel
        !$omp sections private(i,j,k)
            !$omp section
                 DO i = 1, 50
                    DO j = 1, 50
                        f(i,j) = i*j
                        k = k + 1
                    END DO
                END DO
                WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
      
            !$omp section
                DO i = 1, 50
                    DO j = 1, 50
                        g(i,j) = i*j + 1
                        k = k + 1
                    END DO
                END DO
                WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
        !$omp end sections
        !$omp end parallel
    
        CALL system_clock(time_end,time_rate)
        WRITE(*,*) 'The time wasted on the first class parallel computing is: ',(time_end - time_begin)/time_rate
        WRITE(*,*)
        WRITE(*,*)
        WRITE(*,*) '开始进行第二类并行计算—DO'
    
    !>@ 3、通过DO循环实现两个矩阵的初始化计算
        k = 0 ! 重新初始化k的值
        CALL system_clock(time_begin,time_rate) 
        !$omp parallel private(k,j,i)
        !$omp do
            DO i = 1, 50
                DO j = 1, 50
                    f(i,j) = i*j
                    k = k + 1
                    ! 去掉注释后,可现实每一次循环所在的线程ID
     !               WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
                END DO
            END DO
        !$omp end do
        !$omp end parallel
    
        !$omp parallel private(k,j,i)
        !$omp do
            DO i = 1, 50
                DO j = 1, 50
                    g(i,j) = i*j
                    k = k + 1
    !                WRITE(*,*) 'The value of k after parallel computing is: ', k,', and it comes from the thread of ',omp_get_thread_num()
                END DO
            END DO
        !$omp end do
        !$omp end parallel
        CALL system_clock(time_end,time_rate)
        WRITE(*,*) 'The time wasted on the first class parallel computing is: ',(time_end - time_begin)/time_rate
    END PROGRAM
    
    ---------------------
    
    本文来自 B325帅猫-量子前沿技术研究所 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dengm155/article/details/78837408?utm_source=copy 
  • 相关阅读:
    单行文本溢出、多文本溢出
    移动端 顶部、底部和内容之间的小技巧 用flex布局来解决
    图片移动端高清适配问题 image-set 属性和@medie标签
    学习HTML5一周的收获2
    redis实操-sentinel
    spring 循环依赖的一次 理解
    (一)python 格式化 excel 格式
    (一) BIO,NIO, 阻塞,非阻塞,你懂了吗
    设计模式八 适配器模式
    2018年下半年小目标
  • 原文地址:https://www.cnblogs.com/China3S/p/9713381.html
Copyright © 2011-2022 走看看