主题:OPENMP 问题,高手请进(论坛处女贴)
奔腾双核的电脑,对一个DO循环 使用openmp后,运算时间只是提高了10%
相当的困惑不解,理论上应该是接近50%的呀
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')
1,0-1 Top
相当的困惑不解,理论上应该是接近50%的呀
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')
1,0-1 Top