OpenMP 编译器

这是一个使用OpenMP并行化的Fortran程序,用于测试名为`select_sort`的子程序。程序首先定义了一个包含180个元素的数组,然后调用`select_sort`进行排序。`select_sort`子程序接受一个数组、数组大小和排序方向作为参数,对数组进行升序或降序排序。程序通过`!$OMP PARALLEL DO`指令实现并行化,对子程序进行1000000次调用,并计算执行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1
  2         PROGRAM test_select_sort
  3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  4 ! Purpose: To test the subroutine or function select_sort                       !
  5 ! Record of revisions:                                                          !
  6 !   Date       Programer           Description of changes                       !
  7 ! ==========  ==========      =================================                 !
  8 ! 2011.3.18     Joshua         Original                                         !  
  9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
 10         !Data dictionary
 11         INTEGER,PARAMETER::N=180
 12         REAL,DIMENSION(N)::array=&
 13                 (/-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 14                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 15                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 16                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 17                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 18                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 19                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 20                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 21                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9 &
 22                 ,-10,1,2,34,5,5,678,345,90, 567,34,23,7,8,2,5,4,9/)
 23
 24         REAL::time_start, time_end
 25         !
 26         INTERFACE
 27                 SUBROUTINE select_sort(array, n, c)
 28                 IMPLICIT NONE
 29                 INTEGER, INTENT(IN)::n
 30                 REAL, DIMENSION(n),INTENT(INOUT)::array
 31                 CHARACTER,INTENT(IN)::c
 32                 END SUBROUTINE select_sort
 33         END INTERFACE
 34
 35         CALL CPU_TIME(time_start)
 36         !$OMP PARALLEL
 37         !$OMP DO
 38                    DO i=1,1000000
 39          !               WRITE(*,*) i
 40                         CALL select_sort(array,N, 'd')

 41                    END DO
 42         !$OMP END DO 
 43         !$OMP END PARALLEL       
 44         CALL CPU_TIME(time_end)
 45         WRITE(*,*) 'Elapsed time is',time_end-time_start, 'seconds'
 46         END PROGRAM test_select_sort

 

 

 

  1         SUBROUTINE select_sort(array,n,c)
  2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  3 ! Purpose: To sort the input data array into ascending/descending order.        !
  4 ! Record of revisions:                                                          !
  5 !   Date       Programer           Description of changes                       !
  6 ! ==========  ==========      =================================                 !
  7 ! 2011.3.18     Joshua         Original, sort subroutine                        !  
  8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9         IMPLICIT NONE
 10         ! Data dict
 11         INTEGER,INTENT(IN)::n                   ! number of values       
 12         REAL,DIMENSION(n),INTENT(INOUT)::array  ! array to be sorted
 13         CHARACTER,INTENT(IN)::c                 ! c=='a'->ascending sort
 14                                                 ! c=='d'->descending sort
 15         ! local data
 16         INTEGER::i, j, iptr;
 17         REAL::temp
 18                 outer: DO i=n,2,-1
 19                         inner: DO j=1,n-1
 20                                 IF(array(j)>array(j+1)) THEN
 21                                         temp=array(j)
 22                                         array(j)=array(j+1)
 23                                         array(j+1)=temp
 24                                 END IF
 25                         END DO inner
 26                 END DO outer
 27
 28                 SELECT CASE (c)
 29                 CASE ('d')
 30                         DO i=1,n/2
 31                                 temp=array(i)
 32                                 array(i)=array(n-i+1)
 33                                 array(n-i+1)=temp
 34                         END DO
 35                 CASE('a')
 36                 CASE DEFAULT
 37
 38                 END SELECT
 39         END SUBROUTINE select_sort

 编译命令  ifort -openmp test_select_sort select_sort -o mp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值