已合并
[flang] Fix patch 4-add-test-cases-for-openmp-optimization.patch #22
AtomGit-Bot创建于 2022年11月4日
[flang] Fix patch 4-add-test-cases-for-openmp-optimization.patch #22
已合并
AtomGit-Bot创建于 2022年11月4日
refs/pull/22/head合入到master
2 个文件变更+785-19
M4-add-test-cases-for-openmp-optimization.patch+781-18
@@ -1,8 +1,21 @@
1-From d285972f0bd71a1db981008cbadda8909da8b1ac Mon Sep 17 00:00:00 20011+From 22be02d7a701ced84b8f8b5b575f7f2d07e0524b Mon Sep 17 00:00:00 2001
2From: xieyihui <yihui@isrc.iscas.ac.cn>2From: xieyihui <yihui@isrc.iscas.ac.cn>
3-Date: Thu, 13 Oct 2022 18:25:41 +08003+Date: Fri, 11 Nov 2022 13:15:51 +0800
4Subject: [PATCH] Add test cases for openmp optimization4Subject: [PATCH] Add test cases for openmp optimization
5 5 
6+diff --git a/test/openmp_optimization/fortran_func010.f90 b/test/openmp_optimization/fortran_func010.f90
7+new file mode 100644
8+index 0000000..2c0b65e
9+--- /dev/null
10++++ b/test/openmp_optimization/fortran_func010.f90
11+@@ -0,0 +1,6 @@
12++subroutine f(a, b, c)
13++ integer :: a(10000000), b(10000000), c(10000000)
14++ do i = 2, 10000000
15++ a(i) = a(i - 1) + b(i) * c(i)
16++ end do
17++end
18+ 
6diff --git a/test/openmp_optimization/fortran_main001.f90 b/test/openmp_optimization/fortran_main001.f9019diff --git a/test/openmp_optimization/fortran_main001.f90 b/test/openmp_optimization/fortran_main001.f90
7new file mode 10064420new file mode 100644
8index 0000000..2ef72a221index 0000000..2ef72a2
@@ -327,6 +340,312 @@ index 0000000..6f219de
327+! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,340+! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,
328+! Cham. https://doi.org/10.1007/978-3-319-98521-3_8341+! Cham. https://doi.org/10.1007/978-3-319-98521-3_8
329 342 
343+diff --git a/test/openmp_optimization/fortran_main010.f90 b/test/openmp_optimization/fortran_main010.f90
344+new file mode 100644
345+index 0000000..9542916
346+--- /dev/null
347++++ b/test/openmp_optimization/fortran_main010.f90
348+@@ -0,0 +1,19 @@
349++! Test optimizaton for fortran use openmp about partial simd
350++!
351++program main
352++ use omp_lib
353++ real(kind = 8) :: starttime, endtime, time
354++ integer :: a(10000000), b(10000000), c(10000000)
355++ do i = 1, 10000000
356++ a(i) = i
357++ b(i) = i
358++ c(i) = i
359++ end do
360++ starttime = omp_get_wtime()
361++ do i = 1, 50
362++ call f(a, b, c)
363++ end do
364++ endtime = omp_get_wtime()
365++ time = endtime - starttime
366++print *, time
367++end program main
368+ 
369+diff --git a/test/openmp_optimization/fortran_main011.f90 b/test/openmp_optimization/fortran_main011.f90
370+new file mode 100644
371+index 0000000..0c53aea
372+--- /dev/null
373++++ b/test/openmp_optimization/fortran_main011.f90
374+@@ -0,0 +1,25 @@
375++! Test optimizaton for fortran use openmp about avoid false sharing
376++!
377++program main
378++ use omp_lib
379++ real(kind = 8) :: starttime, endtime, time
380++ integer :: a(10000)
381++ integer :: temp
382++ do i = 1, 10000
383++ a(i) = i
384++ end do
385++ starttime = omp_get_wtime()
386++ do n = 1, 50000
387++ !$omp parallel do schedule (static, 1)
388++ do i = 1, 10000
389++ a(i) = a(i) + 1
390++ end do
391++ !$omp end parallel do
392++ end do
393++ endtime = omp_get_wtime()
394++ time = endtime - starttime
395++print *, time
396++end program main
397++
398++! Reference
399++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
400+ 
401+diff --git a/test/openmp_optimization/fortran_main012.f90 b/test/openmp_optimization/fortran_main012.f90
402+new file mode 100644
403+index 0000000..2a02961
404+--- /dev/null
405++++ b/test/openmp_optimization/fortran_main012.f90
406+@@ -0,0 +1,29 @@
407++! Test optimizaton for fortran use openmp about variable attributes
408++!
409++program main
410++ use omp_lib
411++ real(kind = 8) :: starttime, endtime, time
412++ integer :: a(1000), b(1000)
413++ integer :: temp
414++ starttime = omp_get_wtime()
415++ do n = 1, 5000
416++ !$omp parallel
417++ !$omp do private(a)
418++ do i = 1, 1000
419++ temp = a(i)
420++ end do
421++ !$omp end do
422++ !$omp do private(a)
423++ do i = 1, 1000
424++ temp = b(i)
425++ end do
426++ !$omp end do
427++ !$omp end parallel
428++ end do
429++ endtime = omp_get_wtime()
430++ time = endtime - starttime
431++ print *, time
432++end program main
433++
434++! Reference
435++! 游佐勇. OpenMP并行编程模型与性能优化方法的研究及应用[D].成都理工大学,2011.
436+ 
437+diff --git a/test/openmp_optimization/fortran_main013.f90 b/test/openmp_optimization/fortran_main013.f90
438+new file mode 100644
439+index 0000000..f7eb485
440+--- /dev/null
441++++ b/test/openmp_optimization/fortran_main013.f90
442+@@ -0,0 +1,27 @@
443++! Test optimizaton for fortran use openmp about parallel region
444++! reconstruction
445++!
446++subroutine add1(s)
447++ use omp_lib
448++ real :: s(10000)
449++ !$omp parallel do
450++ do i = 1, 10000
451++ s(i) = i + 1
452++ end do
453++ !$omp end parallel do
454++end subroutine add1
455++program main
456++ use omp_lib
457++ real(kind = 8) :: starttime, endtime, time
458++ real :: a(10000)
459++ starttime = omp_get_wtime()
460++ do n = 1, 50000
461++ call add1(a)
462++ end do
463++ endtime = omp_get_wtime()
464++ time = endtime - starttime
465++ print *, time
466++end program main
467++
468++! Reference
469++! 刘京,郑启龙,李彭勇,郭连伟.面向Open64的OpenMP程序优化[J].计算机系统应用,2016,25(01):154-159.
470+ 
471+diff --git a/test/openmp_optimization/fortran_main014.f90 b/test/openmp_optimization/fortran_main014.f90
472+new file mode 100644
473+index 0000000..5e6f6b7
474+--- /dev/null
475++++ b/test/openmp_optimization/fortran_main014.f90
476+@@ -0,0 +1,24 @@
477++! Test optimizaton for fortran use openmp about parallel removing
478++! parallel region with no side-effects
479++!
480++subroutine foo()
481++ integer :: x = 1
482++end subroutine foo
483++program main
484++ use omp_lib
485++ real(kind = 8) :: starttime, endtime, time
486++ starttime = omp_get_wtime()
487++ do n = 1, 100000
488++ !$omp parallel
489++ !$omp end parallel
490++ !$omp parallel
491++ call foo()
492++ !$omp end parallel
493++ end do
494++ endtime = omp_get_wtime()
495++ time = endtime - starttime
496++print *, time
497++end program main
498++
499++! Reference
500++! https://openmp.llvm.org/remarks/OptimizationRemarks.html
501+ 
502+diff --git a/test/openmp_optimization/fortran_main015.f90 b/test/openmp_optimization/fortran_main015.f90
503+new file mode 100644
504+index 0000000..9c9ee4d
505+--- /dev/null
506++++ b/test/openmp_optimization/fortran_main015.f90
507+@@ -0,0 +1,28 @@
508++! Test optimizaton for fortran use openmp about remove dependencies
509++!
510++program main
511++ use omp_lib
512++ real(kind = 8) :: starttime, endtime, time
513++ integer :: a(1000000)
514++ integer :: b(1000000)
515++ integer :: c(1000000)
516++ integer :: x
517++ do i = 1, 1000000
518++ a(i) = i
519++ b(i) = i + 1
520++ c(i) = i + 2
521++ end do
522++ starttime = omp_get_wtime()
523++ do w = 1, 100
524++ do i = 1, 1000000
525++ x = (b(i) + c(i)) / 2
526++ a(i) = a(i + 1) + x
527++ end do
528++ end do
529++ endtime = omp_get_wtime()
530++ time = endtime - starttime
531++print *, time
532++end program main
533++
534++! Reference
535++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
536+ 
537+diff --git a/test/openmp_optimization/fortran_main016.f90 b/test/openmp_optimization/fortran_main016.f90
538+new file mode 100644
539+index 0000000..4aa262e
540+--- /dev/null
541++++ b/test/openmp_optimization/fortran_main016.f90
542+@@ -0,0 +1,27 @@
543++! Test optimizaton for fortran use openmp about remove dependencies
544++!
545++program main
546++ use omp_lib
547++ real(kind = 8) :: starttime, endtime, time
548++ integer :: a(1000000)
549++ integer :: b(1000000)
550++ integer :: c(1000000)
551++ do i = 1, 1000000
552++ a(i) = i
553++ b(i) = i + 1
554++ c(i) = i + 2
555++ end do
556++ starttime = omp_get_wtime()
557++ do w = 1, 1000
558++ do i = 1, 1000000
559++ b(i) = b(i) + a(i - 1)
560++ a(i) = a(i) + c(i)
561++ end do
562++ end do
563++ endtime = omp_get_wtime()
564++ time = endtime - starttime
565++print *, time
566++end program main
567++
568++! Reference
569++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
570+ 
571+diff --git a/test/openmp_optimization/fortran_main017.f90 b/test/openmp_optimization/fortran_main017.f90
572+new file mode 100644
573+index 0000000..014f0b6
574+--- /dev/null
575++++ b/test/openmp_optimization/fortran_main017.f90
576+@@ -0,0 +1,53 @@
577++! Test optimizaton for fortran use openmp about communication
578++!
579++subroutine f(x, y)
580++ integer, pointer :: x(:)
581++ integer, pointer :: y
582++ integer :: n = 512
583++ integer :: l
584++ integer :: k
585++ integer :: m
586++ l = x(1)
587++ a = n + l
588++ !$omp parallel do firstprivate(x, y, n, l, a)
589++ do i = 1, n
590++ k = y
591++ m = n * k
592++ x(i) = m + a * l * i
593++ end do
594++ !$omp end parallel do
595++end
596++
597++program main
598++ use omp_lib
599++ interface
600++ subroutine f(x, y)
601++ integer, pointer :: x(:)
602++ integer, pointer :: y
603++ end subroutine
604++ end interface
605++ real(kind = 8) :: starttime, endtime, time
606++ integer, target :: a(512)
607++ integer, target :: b = 1
608++ integer, pointer :: ap(:)
609++ integer, pointer :: bp
610++ do i = 1, 512
611++ a(i) = i
612++ end do
613++ ap => a
614++ bp => b
615++ starttime = omp_get_wtime()
616++ do i = 1, 1000
617++ call f(ap, bp)
618++ end do
619++ endtime = omp_get_wtime()
620++ time = endtime - starttime
621++ print *, time
622++end program main
623++
624++! Reference
625++! Doerfert, J., Finkel, H. (2018). Compiler Optimizations for OpenMP.
626++! In: de Supinski, B., Valero-Lara, P., Martorell, X., Mateo Bellido S.
627++! , Labarta, J. (eds) Evolving OpenMP for Evolving Architectures.
628++! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,
629++! Cham. https://doi.org/10.1007/978-3-319-98521-3_8
630+ 
631+diff --git a/test/openmp_optimization/fortran_optimized_func010.f90 b/test/openmp_optimization/fortran_optimized_func010.f90
632+new file mode 100644
633+index 0000000..be0920d
634+--- /dev/null
635++++ b/test/openmp_optimization/fortran_optimized_func010.f90
636+@@ -0,0 +1,11 @@
637++subroutine f(a, b, c, d)
638++ integer :: a(10000000), b(10000000), c(10000000), d(10000000)
639++ !$omp parallel do
640++ do i = 2, 10000000
641++ d(i) = b(i) * c(i)
642++ end do
643++ !$parallel end do
644++ do i = 2, 10000000
645++ a(i) = a(i - 1) + d(i)
646++ end do
647++end
648+ 
330diff --git a/test/openmp_optimization/optimized_main001.f90 b/test/openmp_optimization/optimized_main001.f90649diff --git a/test/openmp_optimization/optimized_main001.f90 b/test/openmp_optimization/optimized_main001.f90
331new file mode 100644650new file mode 100644
332index 0000000..f3c3cfa651index 0000000..f3c3cfa
@@ -548,11 +867,11 @@ index 0000000..728c8a8
548 867 
549diff --git a/test/openmp_optimization/optimized_main009.f90 b/test/openmp_optimization/optimized_main009.f90868diff --git a/test/openmp_optimization/optimized_main009.f90 b/test/openmp_optimization/optimized_main009.f90
550new file mode 100644869new file mode 100644
551-index 0000000..1111c77870+index 0000000..fdfc304
552--- /dev/null871--- /dev/null
553+++ b/test/openmp_optimization/optimized_main009.f90872+++ b/test/openmp_optimization/optimized_main009.f90
554@@ -0,0 +1,37 @@873@@ -0,0 +1,37 @@
555-+! Test optimizaton for fortran use openmp about parallel region expand874++! Test optimizaton for fortran use openmp about partial simd
556+!875+!
557+program main876+program main
558+ use omp_lib877+ use omp_lib
@@ -590,12 +909,311 @@ index 0000000..1111c77
590+! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,909+! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,
591+! Cham. https://doi.org/10.1007/978-3-319-98521-3_8910+! Cham. https://doi.org/10.1007/978-3-319-98521-3_8
592 911 
912+diff --git a/test/openmp_optimization/optimized_main010.f90 b/test/openmp_optimization/optimized_main010.f90
913+new file mode 100644
914+index 0000000..ca0189f
915+--- /dev/null
916++++ b/test/openmp_optimization/optimized_main010.f90
917+@@ -0,0 +1,19 @@
918++! Test optimizaton for fortran use openmp about partial simd
919++!
920++program main
921++ use omp_lib
922++ real(kind = 8) :: starttime, endtime, time
923++ integer :: a(10000000), b(10000000), c(10000000), d(10000000)
924++ do i = 1, 10000000
925++ a(i) = i
926++ b(i) = i
927++ c(i) = i
928++ end do
929++ starttime = omp_get_wtime()
930++ do i = 1, 50
931++ call f(a, b, c, d)
932++ end do
933++ endtime = omp_get_wtime()
934++ time = endtime - starttime
935++print *, time
936++end program main
937+ 
938+diff --git a/test/openmp_optimization/optimized_main011.f90 b/test/openmp_optimization/optimized_main011.f90
939+new file mode 100644
940+index 0000000..dd7fd85
941+--- /dev/null
942++++ b/test/openmp_optimization/optimized_main011.f90
943+@@ -0,0 +1,25 @@
944++! Test optimizaton for fortran use openmp about avoid false sharing
945++!
946++program main
947++ use omp_lib
948++ real(kind = 8) :: starttime, endtime, time
949++ integer :: a(10000 * 16)
950++ integer :: temp
951++ do i = 1, 10000
952++ a(i * 16) = i
953++ end do
954++ starttime = omp_get_wtime()
955++ do n = 1, 50000
956++ !$omp parallel do schedule (static, 1)
957++ do i = 1, 10000
958++ a(i) = a(i * 16) + 1
959++ end do
960++ !$omp end parallel do
961++ end do
962++ endtime = omp_get_wtime()
963++ time = endtime - starttime
964++print *, time
965++end program main
966++
967++! Reference
968++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
969+ 
970+diff --git a/test/openmp_optimization/optimized_main012.f90 b/test/openmp_optimization/optimized_main012.f90
971+new file mode 100644
972+index 0000000..6a2c1f6
973+--- /dev/null
974++++ b/test/openmp_optimization/optimized_main012.f90
975+@@ -0,0 +1,29 @@
976++! Test optimizaton for fortran use openmp about variable attributes
977++!
978++program main
979++ use omp_lib
980++ real(kind = 8) :: starttime, endtime, time
981++ integer :: a(1000), b(1000)
982++ integer :: temp
983++ starttime = omp_get_wtime()
984++ do n = 1, 5000
985++ !$omp parallel private(a)
986++ !$omp do
987++ do i = 1, 1000
988++ temp = a(i)
989++ end do
990++ !$omp end do
991++ !$omp do
992++ do i = 1, 1000
993++ temp = b(i)
994++ end do
995++ !$omp end do
996++ !$omp end parallel
997++ end do
998++ endtime = omp_get_wtime()
999++ time = endtime - starttime
1000++ print *, time
1001++end program main
1002++
1003++! Reference
1004++! 游佐勇. OpenMP并行编程模型与性能优化方法的研究及应用[D].成都理工大学,2011.
1005+ 
1006+diff --git a/test/openmp_optimization/optimized_main013.f90 b/test/openmp_optimization/optimized_main013.f90
1007+new file mode 100644
1008+index 0000000..f5b1ae6
1009+--- /dev/null
1010++++ b/test/openmp_optimization/optimized_main013.f90
1011+@@ -0,0 +1,29 @@
1012++! Test optimizaton for fortran use openmp about parallel region
1013++! reconstruction
1014++!
1015++subroutine add1(s)
1016++ use omp_lib
1017++ real :: s(10000)
1018++ !$omp do
1019++ do i = 1, 10000
1020++ s(i) = i + 1
1021++ end do
1022++ !$omp end do
1023++end subroutine add1
1024++program main
1025++ use omp_lib
1026++ real(kind = 8) :: starttime, endtime, time
1027++ real :: a(10000)
1028++ starttime = omp_get_wtime()
1029++ do n = 1, 50000
1030++ !$omp parallel
1031++ call add1(a)
1032++ !$omp end parallel
1033++ end do
1034++ endtime = omp_get_wtime()
1035++ time = endtime - starttime
1036++ print *, time
1037++end program main
1038++
1039++! Reference
1040++! 刘京,郑启龙,李彭勇,郭连伟.面向Open64的OpenMP程序优化[J].计算机系统应用,2016,25(01):154-159.
1041+ 
1042+diff --git a/test/openmp_optimization/optimized_main014.f90 b/test/openmp_optimization/optimized_main014.f90
1043+new file mode 100644
1044+index 0000000..96393d0
1045+--- /dev/null
1046++++ b/test/openmp_optimization/optimized_main014.f90
1047+@@ -0,0 +1,20 @@
1048++! Test optimizaton for fortran use openmp about parallel removing
1049++! parallel region with no side-effects
1050++!
1051++subroutine foo()
1052++ integer :: x = 1
1053++end subroutine foo
1054++program main
1055++ use omp_lib
1056++ real(kind = 8) :: starttime, endtime, time
1057++ starttime = omp_get_wtime()
1058++ do n = 1, 100000
1059++
1060++ end do
1061++ endtime = omp_get_wtime()
1062++ time = endtime - starttime
1063++print *, time
1064++end program main
1065++
1066++! Reference
1067++! https://openmp.llvm.org/remarks/OptimizationRemarks.html
1068+ 
1069+diff --git a/test/openmp_optimization/optimized_main015.f90 b/test/openmp_optimization/optimized_main015.f90
1070+new file mode 100644
1071+index 0000000..727fe74
1072+--- /dev/null
1073++++ b/test/openmp_optimization/optimized_main015.f90
1074+@@ -0,0 +1,37 @@
1075++! Test optimizaton for fortran use openmp about remove dependencies
1076++!
1077++program main
1078++ use omp_lib
1079++ real(kind = 8) :: starttime, endtime, time
1080++ integer :: a(1000000), a_copy(1000000)
1081++ integer :: b(1000000)
1082++ integer :: c(1000000)
1083++ integer :: x
1084++ do i = 1, 1000000
1085++ a(i) = i
1086++ b(i) = i + 1
1087++ c(i) = i + 2
1088++ end do
1089++ starttime = omp_get_wtime()
1090++ !$omp parallel shared(a, a_copy)
1091++ do w = 1, 100
1092++ !$omp do
1093++ do i = 1, 1000000
1094++ a_copy(i) = a(i + 1)
1095++ end do
1096++ !$omp end do
1097++ !$omp do
1098++ do i = 1, 1000000
1099++ x = (b(i) + c(i)) / 2
1100++ a(i) = a_copy(i) + x
1101++ end do
1102++ !$omp end do
1103++ end do
1104++ !$omp end parallel
1105++ endtime = omp_get_wtime()
1106++ time = endtime - starttime
1107++print *, time
1108++end program main
1109++
1110++! Reference
1111++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
1112+ 
1113+diff --git a/test/openmp_optimization/optimized_main016.f90 b/test/openmp_optimization/optimized_main016.f90
1114+new file mode 100644
1115+index 0000000..2b0f650
1116+--- /dev/null
1117++++ b/test/openmp_optimization/optimized_main016.f90
1118+@@ -0,0 +1,31 @@
1119++! Test optimizaton for fortran use openmp about remove dependencies
1120++!
1121++program main
1122++ use omp_lib
1123++ real(kind = 8) :: starttime, endtime, time
1124++ integer :: a(1000000)
1125++ integer :: b(1000000)
1126++ integer :: c(1000000)
1127++ do i = 1, 1000000
1128++ a(i) = i
1129++ b(i) = i + 1
1130++ c(i) = i + 2
1131++ end do
1132++ starttime = omp_get_wtime()
1133++ do w = 1, 1000
1134++ b(1) = b(1) - a(0)
1135++ !$omp parallel do shared(a, b, c)
1136++ do i = 2, 1000000
1137++ b(i) = b(i) + a(i - 1)
1138++ a(i) = a(i) + c(i)
1139++ end do
1140++ !$omp end parallel do
1141++ a(1000000 - 1) = a(1000000 - 1) + c(1000000 - 1)
1142++ end do
1143++ endtime = omp_get_wtime()
1144++ time = endtime - starttime
1145++print *, time
1146++end program main
1147++
1148++! Reference
1149++! http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
1150+ 
1151+diff --git a/test/openmp_optimization/optimized_main017.f90 b/test/openmp_optimization/optimized_main017.f90
1152+new file mode 100644
1153+index 0000000..09d6741
1154+--- /dev/null
1155++++ b/test/openmp_optimization/optimized_main017.f90
1156+@@ -0,0 +1,53 @@
1157++! Test optimizaton for fortran use openmp about communication
1158++!
1159++subroutine f(x, y)
1160++ integer, pointer :: x(:)
1161++ integer, pointer :: y
1162++ integer :: l
1163++ integer :: k
1164++ integer :: m
1165++ integer :: a
1166++ l = x(1)
1167++ k = y
1168++ m = 512 * k
1169++ a = 512 + l
1170++ !$omp parallel do firstprivate(x, m, l, a)
1171++ do i = 1, 512
1172++ x(i) = m + a * l * i
1173++ end do
1174++ !$omp end parallel do
1175++end
1176++
1177++program main
1178++ use omp_lib
1179++ interface
1180++ subroutine f(x, y)
1181++ integer, pointer :: x(:)
1182++ integer, pointer :: y
1183++ end subroutine
1184++ end interface
1185++ real(kind = 8) :: starttime, endtime, time
1186++ integer, target :: a(512)
1187++ integer, target :: b = 1
1188++ integer, pointer :: ap(:)
1189++ integer, pointer :: bp
1190++ do i = 1, 512
1191++ a(i) = i
1192++ end do
1193++ ap => a
1194++ bp => b
1195++ starttime = omp_get_wtime()
1196++ do i = 1, 1000
1197++ call f(ap, bp)
1198++ end do
1199++ endtime = omp_get_wtime()
1200++ time = endtime - starttime
1201++print *, time
1202++end program main
1203++
1204++! Reference
1205++! Doerfert, J., Finkel, H. (2018). Compiler Optimizations for OpenMP.
1206++! In: de Supinski, B., Valero-Lara, P., Martorell, X., Mateo Bellido S.
1207++! , Labarta, J. (eds) Evolving OpenMP for Evolving Architectures.
1208++! IWOMP 2018. Lecture Notes in Computer Science(), vol 11128. Springer,
1209++! Cham. https://doi.org/10.1007/978-3-319-98521-3_8
1210+ 
593diff --git a/test/openmp_optimization/readme.md b/test/openmp_optimization/readme.md1211diff --git a/test/openmp_optimization/readme.md b/test/openmp_optimization/readme.md
594new file mode 1006441212new file mode 100644
595-index 0000000..e12c6281213+index 0000000..e8cf656
596--- /dev/null1214--- /dev/null
597+++ b/test/openmp_optimization/readme.md1215+++ b/test/openmp_optimization/readme.md
598-@@ -0,0 +1,35 @@1216+@@ -0,0 +1,71 @@
599+These files are designed to test how OpenMP programs can be optimized.1217+These files are designed to test how OpenMP programs can be optimized.
600+This folder has two types of test file, one is unoptimized, the other1218+This folder has two types of test file, one is unoptimized, the other
601+one is optimized.1219+one is optimized.
@@ -604,17 +1222,45 @@ index 0000000..e12c628
604+3.20GHz, 512GB RAM, X861222+3.20GHz, 512GB RAM, X86
605+OMP_NUM_THREADS=81223+OMP_NUM_THREADS=8
606+1224+
607-+test every case 10 times1225++test every case 10 times with flang-new
608+ unoptimized optimized1226+ unoptimized optimized
609-+test001: 0.771 0.3951227++test001: 1.424 0.660
610-+test002: 0.270 0.1531228++test002: 0.636 0.442
611+test003: Unable to optimize with hand-written code1229+test003: Unable to optimize with hand-written code
612-+test004: 0.571 0.2011230++test004: 1.021 0.568
613-+test005: 0.524 0.1991231++test005: 0.992 0.572
614+test006: Unable to optimize with hand-written code1232+test006: Unable to optimize with hand-written code
615-+test007: 1.808 0.6141233++test007: 3.682 0.960
616-+test008: 6.265E-03 1.313E-041234++test008: 0.0185 0.000089
617-+test009: 0.798 0.4661235++test009: 1.428 0.820
1236++test010: 1.886 0.604
1237++test011: 2.468 1.758
1238++test012: 0.0986 0.0981
1239++test013: 0.626 0.621
1240++test014: 0.284 0.00102
1241++test015: 0.463 0.907
1242++test016: 3.903 0.713
1243++test017: 0.0295 0.0221 //run by gfortran
1244++
1245++test every case 10 times with flang
1246++ unoptimized optimized
1247++test001: 0.899 0.461
1248++test002: 0.592 0.437
1249++test003: Unable to optimize with hand-written code
1250++test004: 0.939 0.562
1251++test005: 0.981 0.559
1252++test006: Unable to optimize with hand-written code
1253++test007: 3.644 1.550
1254++test008: 0.0146 0.0028
1255++test009: 0.938 0.802
1256++test010: 1.347 0.585
1257++test011: 3.148 2.070
1258++test012: 0.120 0.120
1259++test013: 0.489 0.520
1260++test014: 0.608 0.000495
1261++test015: 0.392 1.812
1262++test016: 2.822 0.593
1263++test017: 0.0362 0.0254
618+1264+
619+Reference1265+Reference
620+[1] Müller, Matthias S.. "Some Simple OpenMP Optimization Techniques."1266+[1] Müller, Matthias S.. "Some Simple OpenMP Optimization Techniques."
@@ -631,13 +1277,21 @@ index 0000000..e12c628
631+Engineering, Artificial Intelligences, Networking and1277+Engineering, Artificial Intelligences, Networking and
632+Parallel/Distributed Computing, 2009, pp. 495-500, doi:1278+Parallel/Distributed Computing, 2009, pp. 495-500, doi:
633+10.1109/SNPD.2009.16.1279+10.1109/SNPD.2009.16.
1280++
1281++[4] 刘京,郑启龙,李彭勇,郭连伟.面向Open64的OpenMP程序优化[J].计算机系统应用,2016,25(01):154-159.
1282++
1283++[5] 游佐勇. OpenMP并行编程模型与性能优化方法的研究及应用[D].成都理工大学,2011.
1284++
1285++[6] http://akira.ruc.dk/~keld/teaching/IPDC_f10/Slides/pdf4x/4_Performance.4x.pdf
1286++
1287++[7] https://openmp.llvm.org/remarks/OptimizationRemarks.html
634 1288 
635-diff --git a/test/openmp_optimization/run.sh b/test/openmp_optimization/run.sh1289+diff --git a/test/openmp_optimization/run_flang-new.sh b/test/openmp_optimization/run_flang-new.sh
636new file mode 1006441290new file mode 100644
637-index 0000000..510f1191291+index 0000000..1faa2e3
638--- /dev/null1292--- /dev/null
639-+++ b/test/openmp_optimization/run.sh1293++++ b/test/openmp_optimization/run_flang-new.sh
640-@@ -0,0 +1,32 @@1294+@@ -0,0 +1,67 @@
641+for i in {001..009}1295+for i in {001..009}
642+do1296+do
643+echo "------- test $i ------."1297+echo "------- test $i ------."
@@ -646,6 +1300,24 @@ index 0000000..510f119
646+./a.out1300+./a.out
647+rm a.out1301+rm a.out
648+done1302+done
1303++echo "------- test 10 ------."
1304++flang-new fortran_main010.f90 -c -o fortran-test.o -fopenmp
1305++flang-new fortran_func010.f90 -c -o fortran-test2.o
1306++flang-new fortran-test2.o fortran-test.o -fopenmp -O3
1307++export OMP_NUM_THREADS=8
1308++./a.out
1309++rm *.o
1310++rm a.out
1311++
1312++for i in {011..017}
1313++do
1314++echo "------- test $i ------."
1315++flang-new fortran_main$i.f90 -fopenmp
1316++export OMP_NUM_THREADS=8
1317++./a.out
1318++rm a.out
1319++done
1320++
649+for i in {001..002}1321+for i in {001..002}
650+do1322+do
651+echo "------- test $i ------."1323+echo "------- test $i ------."
@@ -670,6 +1342,97 @@ index 0000000..510f119
670+./a.out1342+./a.out
671+rm a.out1343+rm a.out
672+done1344+done
1345++echo "------- test 10 ------."
1346++flang-new optimized_main010.f90 -c -o fortran-test.o -fopenmp
1347++flang-new fortran_optimized_func010.f90 -c -o fortran-test2.o -fopenmp -O3
1348++flang-new fortran-test2.o fortran-test.o -fopenmp -O3
1349++export OMP_NUM_THREADS=8
1350++./a.out
1351++rm *.o
1352++rm a.out
1353++
1354++for i in {011..017}
1355++do
1356++echo "------- test $i ------."
1357++flang-new optimized_main$i.f90 -fopenmp
1358++export OMP_NUM_THREADS=8
1359++./a.out
1360++rm a.out
1361++done
1362+ 
1363+diff --git a/test/openmp_optimization/run_flang.sh b/test/openmp_optimization/run_flang.sh
1364+new file mode 100644
1365+index 0000000..9977b42
1366+--- /dev/null
1367++++ b/test/openmp_optimization/run_flang.sh
1368+@@ -0,0 +1,67 @@
1369++for i in {001..009}
1370++do
1371++echo "------- test $i ------."
1372++flang fortran_main$i.f90 -fopenmp
1373++export OMP_NUM_THREADS=8
1374++./a.out
1375++rm a.out
1376++done
1377++echo "------- test 10 ------."
1378++flang fortran_main010.f90 -c -o fortran-test.o -fopenmp
1379++flang fortran_func010.f90 -c -o fortran-test2.o
1380++flang fortran-test2.o fortran-test.o -fopenmp -O3
1381++export OMP_NUM_THREADS=8
1382++./a.out
1383++rm *.o
1384++rm a.out
1385++
1386++for i in {011..017}
1387++do
1388++echo "------- test $i ------."
1389++flang fortran_main$i.f90 -fopenmp
1390++export OMP_NUM_THREADS=8
1391++./a.out
1392++rm a.out
1393++done
1394++
1395++for i in {001..002}
1396++do
1397++echo "------- test $i ------."
1398++flang optimized_main$i.f90 -fopenmp
1399++export OMP_NUM_THREADS=8
1400++./a.out
1401++rm a.out
1402++done
1403++for i in {004..005}
1404++do
1405++echo "------- test $i ------."
1406++flang optimized_main$i.f90 -fopenmp
1407++export OMP_NUM_THREADS=8
1408++./a.out
1409++rm a.out
1410++done
1411++for i in {007..009}
1412++do
1413++echo "------- test $i ------."
1414++flang optimized_main$i.f90 -fopenmp
1415++export OMP_NUM_THREADS=8
1416++./a.out
1417++rm a.out
1418++done
1419++echo "------- test 10 ------."
1420++flang optimized_main010.f90 -c -o fortran-test.o -fopenmp
1421++flang fortran_optimized_func010.f90 -c -o fortran-test2.o -fopenmp -O3
1422++flang fortran-test2.o fortran-test.o -fopenmp -O3
1423++export OMP_NUM_THREADS=8
1424++./a.out
1425++rm *.o
1426++rm a.out
1427++
1428++for i in {011..017}
1429++do
1430++echo "------- test $i ------."
1431++flang optimized_main$i.f90 -fopenmp
1432++export OMP_NUM_THREADS=8
1433++./a.out
1434++rm a.out
1435++done
673 1436 
674-- 1437--
6752.25.114382.25.1
Mflang.spec+4-1
@@ -2,7 +2,7 @@
2 2 
3Name: flang3Name: flang
4Version: flang_202103244Version: flang_20210324
5-Release: 125+Release: 13
6Summary: Fortran language compiler targeting LLVM6Summary: Fortran language compiler targeting LLVM
7 7 
8License: Apache-2.08License: Apache-2.0
@@ -39,6 +39,9 @@ TODO: support build Flang.
39 39 
40 40 
41%changelog41%changelog
42+* Fri Nov 4 2022 xieyihui <yihui@isrc.iscas.ac.cn> - flang_20210324-13
43+- Fix 4-add-test-cases-for-openmp-optimization.patch for add new test cases for OpenMP optimization
44+ 
42* Thu Oct 27 2022 wangzhewei <zhewei@isrc.iscas.ac.cn> - flang_20210324-1245* Thu Oct 27 2022 wangzhewei <zhewei@isrc.iscas.ac.cn> - flang_20210324-12
43- Add patch for add test cases for attribute declarations and specifications46- Add patch for add test cases for attribute declarations and specifications
44 47